summaryrefslogtreecommitdiffstats
path: root/src/gui/painting
diff options
context:
space:
mode:
authorEskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@digia.com>2013-05-08 13:32:18 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-05-13 11:18:41 +0200
commit151dd9c67cd60ea72d89fe9a82937f008b6e2ac8 (patch)
treec7a318302eb28db3d036dba2369a9adfa01e3534 /src/gui/painting
parent4c13b537025db4c039440a52159a153ffc20e597 (diff)
Fix transformed raster fonts on Windows
We removed all Q_WS_WIN code when going to Qt 5. One of the things removed was the condition that we do painter path text rendering for transformed, non-ttf fonts, since the GDI engine does not support transforming those. This has now been reintroduced and adapted to the QPA way of doing things, by checking for it in the font engine subclass. Then there was the problem that QStaticText only supports cases where the font engine can transform the glyphs. Thus we need to fall back to regular text drawing in drawStaticText() for unsupported cases, and we need to skip the optimized path in the raster engine (which goes to drawStaticTextItem) Task-number: QTBUG-30932 Change-Id: I17ba7355ee127811b0e77bb3a9b9db092e99893b Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
Diffstat (limited to 'src/gui/painting')
-rw-r--r--src/gui/painting/qpaintengine_raster.cpp3
-rw-r--r--src/gui/painting/qpainter.cpp17
2 files changed, 12 insertions, 8 deletions
diff --git a/src/gui/painting/qpaintengine_raster.cpp b/src/gui/painting/qpaintengine_raster.cpp
index a123c147a2..66a4a43cba 100644
--- a/src/gui/painting/qpaintengine_raster.cpp
+++ b/src/gui/painting/qpaintengine_raster.cpp
@@ -3078,7 +3078,8 @@ void QRasterPaintEngine::drawTextItem(const QPointF &p, const QTextItem &textIte
ti.fontEngine->getGlyphPositions(ti.glyphs, matrix, ti.flags, glyphs, positions);
drawCachedGlyphs(glyphs.size(), glyphs.constData(), positions.constData(), ti.fontEngine);
- } else if (matrix.type() < QTransform::TxProject) {
+ } else if (matrix.type() < QTransform::TxProject
+ && ti.fontEngine->supportsTransformation(matrix)) {
bool invertible;
QTransform invMat = matrix.inverted(&invertible);
if (!invertible)
diff --git a/src/gui/painting/qpainter.cpp b/src/gui/painting/qpainter.cpp
index e42b70427c..d950c4e45f 100644
--- a/src/gui/painting/qpainter.cpp
+++ b/src/gui/painting/qpainter.cpp
@@ -5727,17 +5727,20 @@ void QPainter::drawStaticText(const QPointF &topLeftPosition, const QStaticText
staticText_d->needsRelayout = true;
}
- // If we don't have an extended paint engine, or if the painter is projected,
- // we go through standard code path
- if (d->extended == 0 || !d->state->matrix.isAffine()) {
- staticText_d->paintText(topLeftPosition, this);
- return;
- }
-
QFontEngine *fe = staticText_d->font.d->engineForScript(QChar::Script_Common);
if (fe->type() == QFontEngine::Multi)
fe = static_cast<QFontEngineMulti *>(fe)->engine(0);
+ // If we don't have an extended paint engine, if the painter is projected,
+ // or if the font engine does not support the matrix, we go through standard
+ // code path
+ if (d->extended == 0
+ || !d->state->matrix.isAffine()
+ || !fe->supportsTransformation(d->state->matrix)) {
+ staticText_d->paintText(topLeftPosition, this);
+ return;
+ }
+
bool engineRequiresPretransform = d->extended->requiresPretransformedGlyphPositions(fe, d->state->matrix);
if (staticText_d->untransformedCoordinates && engineRequiresPretransform) {
// The coordinates are untransformed, and the engine can't deal with that