diff options
author | Viktor Arvidsson <viktor.arvidss@gmail.com> | 2022-01-31 03:24:27 +0100 |
---|---|---|
committer | Viktor Arvidsson <viktor.arvidss@gmail.com> | 2022-02-02 16:45:37 +0100 |
commit | 724e4646e2bf354fe1bf4daba1925b33bd695288 (patch) | |
tree | c6e8060c0ce87aea7a1c778e4d3e85ad4efd1b9a /src/gui/painting | |
parent | fd3341a74ecbe93c5fb931f625075b93be69b9de (diff) |
Fix clipped glyphs in text rendering of QGraphicsTextItem
[ChangeLog][QtGui] Clipping of visible glyphs when doing
partial updates of a graphics view was off by 1. Also fixed
an issue that caused rounding errors when transforming
the clip rect into the glyphs draw space which was caused
by transforming a QRect instead of a QRectF.
Fixes: QTBUG-93432
Pick-to: 5.15 6.2 6.3
Change-Id: Ibdb0e4116872af0f88bf03d9b3ac95331058b882
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
Diffstat (limited to 'src/gui/painting')
-rw-r--r-- | src/gui/painting/qpaintengine_raster.cpp | 12 | ||||
-rw-r--r-- | src/gui/painting/qpaintengine_raster_p.h | 2 |
2 files changed, 7 insertions, 7 deletions
diff --git a/src/gui/painting/qpaintengine_raster.cpp b/src/gui/painting/qpaintengine_raster.cpp index 2afd9b9715..3bd3a81353 100644 --- a/src/gui/painting/qpaintengine_raster.cpp +++ b/src/gui/painting/qpaintengine_raster.cpp @@ -3045,10 +3045,10 @@ QRasterPaintEnginePrivate::getPenFunc(const QRectF &rect, static QPair<int, int> visibleGlyphRange(const QRectF &clip, QFontEngine *fontEngine, glyph_t *glyphs, QFixedPoint *positions, int numGlyphs) { - QFixed clipLeft = QFixed::fromReal(clip.left()); - QFixed clipRight = QFixed::fromReal(clip.right()); - QFixed clipTop = QFixed::fromReal(clip.top()); - QFixed clipBottom = QFixed::fromReal(clip.bottom()); + QFixed clipLeft = QFixed::fromReal(clip.left() - 1); + QFixed clipRight = QFixed::fromReal(clip.right() + 1); + QFixed clipTop = QFixed::fromReal(clip.top() - 1); + QFixed clipBottom = QFixed::fromReal(clip.bottom() + 1); int first = 0; while (first < numGlyphs) { @@ -3531,7 +3531,7 @@ QRasterPaintEngine::ClipType QRasterPaintEngine::clipType() const \internal Returns the bounding rect of the currently set clip. */ -QRect QRasterPaintEngine::clipBoundingRect() const +QRectF QRasterPaintEngine::clipBoundingRect() const { Q_D(const QRasterPaintEngine); @@ -3543,7 +3543,7 @@ QRect QRasterPaintEngine::clipBoundingRect() const if (clip->hasRectClip) return clip->clipRect; - return QRect(clip->xmin, clip->ymin, clip->xmax - clip->xmin, clip->ymax - clip->ymin); + return QRectF(clip->xmin, clip->ymin, clip->xmax - clip->xmin, clip->ymax - clip->ymin); } void QRasterPaintEnginePrivate::initializeRasterizer(QSpanData *data) diff --git a/src/gui/painting/qpaintengine_raster_p.h b/src/gui/painting/qpaintengine_raster_p.h index 448f898f29..4433c021e2 100644 --- a/src/gui/painting/qpaintengine_raster_p.h +++ b/src/gui/painting/qpaintengine_raster_p.h @@ -204,7 +204,7 @@ public: ComplexClip }; ClipType clipType() const; - QRect clipBoundingRect() const; + QRectF clipBoundingRect() const; #ifdef Q_OS_WIN void setDC(HDC hdc); |