diff --git a/qrenderdoc/Code/QRDUtils.cpp b/qrenderdoc/Code/QRDUtils.cpp index bb842b3fa..14cddade5 100644 --- a/qrenderdoc/Code/QRDUtils.cpp +++ b/qrenderdoc/Code/QRDUtils.cpp @@ -452,13 +452,17 @@ bool RichResourceTextCheck(const QVariant &var) static const int RichResourceTextMargin = 2; void RichResourceTextPaint(const QWidget *owner, QPainter *painter, QRect rect, QFont font, - QPalette palette, bool mouseOver, QPoint mousePos, const QVariant &var) + QPalette palette, QStyle::State state, QPoint mousePos, + const QVariant &var) { + QBrush foreBrush = palette.brush(state & QStyle::State_Selected ? QPalette::HighlightedText + : QPalette::WindowText); + + painter->save(); + // special case handling for ResourceId/GPUAddress on its own if(var.userType() == qMetaTypeId() || var.userType() == qMetaTypeId()) { - painter->save(); - QFont f = painter->font(); f.setBold(true); painter->setFont(f); @@ -511,6 +515,7 @@ void RichResourceTextPaint(const QWidget *owner, QPainter *painter, QRect rect, } } + painter->setPen(foreBrush.color()); painter->drawText(rect, Qt::AlignLeft | Qt::AlignVCenter, name); QRect textRect = @@ -530,11 +535,11 @@ void RichResourceTextPaint(const QWidget *owner, QPainter *painter, QRect rect, painter->drawPixmap(pos, px, px.rect()); - if(mouseOver && textRect.contains(mousePos) && valid) + if((state & QStyle::State_MouseOver) && textRect.contains(mousePos) && valid) { int underline_y = textRect.bottom() - margin; - painter->setPen(QPen(palette.brush(QPalette::WindowText), 1.0)); + painter->setPen(QPen(foreBrush, 1.0)); painter->drawLine(QPoint(textRect.left(), underline_y), QPoint(textRect.right(), underline_y)); } @@ -560,11 +565,17 @@ void RichResourceTextPaint(const QWidget *owner, QPainter *painter, QRect rect, else painter->translate(1, 0); - linkedText->doc.drawContents(painter, QRectF(0, 0, rect.width() - 1, rect.height())); + QAbstractTextDocumentLayout::PaintContext docCtx; + docCtx.palette = palette; + docCtx.palette.setColor(QPalette::Text, foreBrush.color()); - if(mouseOver) + docCtx.clip = QRectF(0, 0, rect.width() - 1, rect.height()); + + linkedText->doc.documentLayout()->draw(painter, docCtx); + + if(state & QStyle::State_MouseOver) { - painter->setPen(QPen(palette.brush(QPalette::WindowText), 1.0)); + painter->setPen(QPen(foreBrush, 1.0)); QAbstractTextDocumentLayout *layout = linkedText->doc.documentLayout(); @@ -608,6 +619,8 @@ void RichResourceTextPaint(const QWidget *owner, QPainter *painter, QRect rect, } } } + + painter->restore(); } int RichResourceTextWidthHint(const QWidget *owner, const QFont &font, const QVariant &var) @@ -885,8 +898,7 @@ void RichTextViewDelegate::paint(QPainter *painter, const QStyleOptionViewItem & rect.setX(rect.x() + opt.icon.actualSize(opt.decorationSize, mode, state).width() + 4); } - RichResourceTextPaint(m_widget, painter, rect, opt.font, option.palette, - option.state & QStyle::State_MouseOver, + RichResourceTextPaint(m_widget, painter, rect, opt.font, option.palette, option.state, m_widget->viewport()->mapFromGlobal(QCursor::pos()), v); painter->restore(); diff --git a/qrenderdoc/Code/QRDUtils.h b/qrenderdoc/Code/QRDUtils.h index 9a8331093..2c792deb3 100644 --- a/qrenderdoc/Code/QRDUtils.h +++ b/qrenderdoc/Code/QRDUtils.h @@ -197,7 +197,8 @@ bool RichResourceTextCheck(const QVariant &var); // Paint the given variant containing rich text with the given parameters. void RichResourceTextPaint(const QWidget *owner, QPainter *painter, QRect rect, QFont font, - QPalette palette, bool mouseOver, QPoint mousePos, const QVariant &var); + QPalette palette, QStyle::State state, QPoint mousePos, + const QVariant &var); // Gives the width for a size hint for the rich text (since it might be larger than the original // text) diff --git a/qrenderdoc/Widgets/Extended/RDLabel.cpp b/qrenderdoc/Widgets/Extended/RDLabel.cpp index c476260b3..b25a19ba7 100644 --- a/qrenderdoc/Widgets/Extended/RDLabel.cpp +++ b/qrenderdoc/Widgets/Extended/RDLabel.cpp @@ -209,6 +209,8 @@ void RDLabel::paintEvent(QPaintEvent *event) r.setLeft(r.left() + contentsMargins().left() + margin()); r.setRight(r.right() - contentsMargins().right() - margin()); - RichResourceTextPaint(this, &painter, r, font(), palette(), r.contains(pos), pos, m_variant); + RichResourceTextPaint(this, &painter, r, font(), palette(), + r.contains(pos) ? QStyle::State_MouseOver : QStyle::State_None, pos, + m_variant); } }