diff options
author | Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@nokia.com> | 2011-05-06 10:25:20 +0200 |
---|---|---|
committer | Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@nokia.com> | 2011-05-06 10:44:49 +0200 |
commit | 80a230e221402e77c1ece2f1d37e4fe5755d26db (patch) | |
tree | fa8da7fe8114af97b5118c32d412217f11a7e774 /src/gui/painting/qpainter.cpp | |
parent | 69c4b97be2df727a3cdd3b6f70ab6e39f37d0052 (diff) |
Fix QPainter::drawGlyphs() with non-affine transformation
When the matrix has an non-affine transformation, the text will have to
be rendered using the default path-renderer. This means going through
the drawTextItem() path (since drawStaticText() has no support for those
transformations) and it also means not pre-transforming the coordinates,
since the default implementation of drawTextItem() supports
transformations.
Task-number: QTBUG-18214
Reviewed-by: Jiang Jiang
(cherry picked from commit 55446d104db77fc7994ab12352b1c08bb7b63346)
Diffstat (limited to 'src/gui/painting/qpainter.cpp')
-rw-r--r-- | src/gui/painting/qpainter.cpp | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/gui/painting/qpainter.cpp b/src/gui/painting/qpainter.cpp index b7686fa7fe..016d480526 100644 --- a/src/gui/painting/qpainter.cpp +++ b/src/gui/painting/qpainter.cpp @@ -5811,6 +5811,13 @@ void QPainter::drawGlyphs(const QPointF &position, const QGlyphs &glyphs) d->extended != 0 ? qt_paintengine_supports_transformations(d->extended->type()) : qt_paintengine_supports_transformations(d->engine->type()); + + // If the matrix is not affine, the paint engine will fall back to + // drawing the glyphs as paths, which in turn means we should not + // preprocess the glyph positions + if (!d->state->matrix.isAffine()) + paintEngineSupportsTransformations = true; + for (int i=0; i<count; ++i) { QPointF processedPosition = position + glyphPositions.at(i); if (!paintEngineSupportsTransformations) @@ -5854,7 +5861,7 @@ void QPainterPrivate::drawGlyphs(quint32 *glyphArray, QFixedPoint *positions, in QFixed width = rightMost - leftMost; - if (extended != 0) { + if (extended != 0 && state->matrix.isAffine()) { QStaticTextItem staticTextItem; staticTextItem.color = state->pen.color(); staticTextItem.font = state->font; |