From a0fa1654a733a9080afd6a95ec52144846e08ae5 Mon Sep 17 00:00:00 2001 From: Shawn Rutledge Date: Tue, 15 Jun 2021 22:14:41 +0200 Subject: Fix rendering of text checkboxes when text is selected Fixes: QTBUG-94532 Change-Id: I4343558dcec6149dcdcc0f7ca32c49fdc67452af Reviewed-by: Volker Hilsheimer (cherry picked from commit bc30d5624d59d523c4c31473cb64621ee5c43f9d) Reviewed-by: Qt Cherry-pick Bot --- src/gui/text/qtextdocumentlayout.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/gui/text/qtextdocumentlayout.cpp b/src/gui/text/qtextdocumentlayout.cpp index 509cc7e521..f8b4474e09 100644 --- a/src/gui/text/qtextdocumentlayout.cpp +++ b/src/gui/text/qtextdocumentlayout.cpp @@ -2186,9 +2186,11 @@ void QTextDocumentLayoutPrivate::drawListItem(const QPointF &offset, QPainter *p painter->setRenderHint(QPainter::Antialiasing); + const bool marker = bl.blockFormat().marker() != QTextBlockFormat::MarkerType::NoMarker; if (selectionFormat) { painter->setPen(QPen(selectionFormat->foreground(), 0)); - painter->fillRect(r, selectionFormat->background()); + if (!marker) + painter->fillRect(r, selectionFormat->background()); } else { QBrush fg = charFormat.foreground(); if (fg == Qt::NoBrush) @@ -2198,19 +2200,21 @@ void QTextDocumentLayoutPrivate::drawListItem(const QPointF &offset, QPainter *p QBrush brush = context.palette.brush(QPalette::Text); - bool marker = bl.blockFormat().marker() != QTextBlockFormat::MarkerType::NoMarker; if (marker) { int adj = fontMetrics.lineSpacing() / 6; r.adjust(-adj, 0, -adj, 0); + const QRectF outer = r.adjusted(-adj, -adj, adj, adj); + if (selectionFormat) + painter->fillRect(outer, selectionFormat->background()); if (bl.blockFormat().marker() == QTextBlockFormat::MarkerType::Checked) { - // ### Qt6: render with QStyle / PE_IndicatorCheckBox. We don't currently + // ### Qt7: render with QStyle / PE_IndicatorCheckBox. We don't currently // have access to that here, because it would be a widget dependency. painter->setPen(QPen(painter->pen().color(), 2)); painter->drawLine(r.topLeft(), r.bottomRight()); painter->drawLine(r.topRight(), r.bottomLeft()); painter->setPen(QPen(painter->pen().color(), 0)); } - painter->drawRect(r.adjusted(-adj, -adj, adj, adj)); + painter->drawRect(outer); } switch (style) { -- cgit v1.2.3