summaryrefslogtreecommitdiffstats
path: root/src/gui/text/qtextlayout.cpp
diff options
context:
space:
mode:
authorChristoph Cullmann <cullmann@kde.org>2018-02-11 13:18:29 +0100
committerDominik Haumann <dhaumann@kde.org>2018-02-15 17:13:19 +0000
commit47904bb08aeb5dc63c78357aba6003460a65d4b3 (patch)
tree7d9851965fbc0fddaa3b68b4978bee7aa04a7f2c /src/gui/text/qtextlayout.cpp
parent09e212eec0c1b3dc7a3e951413de2d0332e44a78 (diff)
fix selection rendering issues if rounding leads to left-out pixels
instead of manual qFloor, use the toAlignedRect() function to get the minimal enclosing rectangle this will in some cases over-paint one-pixel, which is preferable to under-paint which leaves gaps inside painting text lines that can not be fixed by the user of the painting routines Task-number: QTBUG-66036 Change-Id: I8d6c2f7370e55bd544e1ff93d5c07b554b20ffeb Reviewed-by: Frederik Gladhorn <frederik.gladhorn@qt.io> Reviewed-by: Dominik Haumann <dhaumann@kde.org> Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'src/gui/text/qtextlayout.cpp')
-rw-r--r--src/gui/text/qtextlayout.cpp14
1 files changed, 5 insertions, 9 deletions
diff --git a/src/gui/text/qtextlayout.cpp b/src/gui/text/qtextlayout.cpp
index 87f73e1e83..71d7157032 100644
--- a/src/gui/text/qtextlayout.cpp
+++ b/src/gui/text/qtextlayout.cpp
@@ -1006,10 +1006,8 @@ static void addSelectedRegionsToPath(QTextEngine *eng, int lineNumber, const QPo
}
if (lastSelectionWidth > 0) {
- QRectF rect = boundingRect & QRectF(lastSelectionX.toReal(), selectionY, lastSelectionWidth.toReal(), lineHeight);
- rect.moveLeft(qFloor(rect.left()));
- rect.moveTop(qFloor(rect.top()));
- region->addRect(rect);
+ const QRectF rect = boundingRect & QRectF(lastSelectionX.toReal(), selectionY, lastSelectionWidth.toReal(), lineHeight);
+ region->addRect(rect.toAlignedRect());
}
lastSelectionX = selectionX;
@@ -1017,10 +1015,8 @@ static void addSelectedRegionsToPath(QTextEngine *eng, int lineNumber, const QPo
}
}
if (lastSelectionWidth > 0) {
- QRectF rect = boundingRect & QRectF(lastSelectionX.toReal(), selectionY, lastSelectionWidth.toReal(), lineHeight);
- rect.moveLeft(qFloor(rect.left()));
- rect.moveTop(qFloor(rect.top()));
- region->addRect(rect);
+ const QRectF rect = boundingRect & QRectF(lastSelectionX.toReal(), selectionY, lastSelectionWidth.toReal(), lineHeight);
+ region->addRect(rect.toAlignedRect());
}
}
@@ -2135,7 +2131,7 @@ static void setPenAndDrawBackground(QPainter *p, const QPen &defaultPen, const Q
QBrush bg = chf.background();
if (bg.style() != Qt::NoBrush && !chf.property(SuppressBackground).toBool())
- p->fillRect(QRectF(qFloor(r.x()), qFloor(r.y()), r.width(), r.height()), bg);
+ p->fillRect(r.toAlignedRect(), bg);
if (c.style() != Qt::NoBrush) {
p->setPen(QPen(c, 0));
}