diff --git a/src/gui/painting/qpaintbuffer.cpp b/src/gui/painting/qpaintbuffer.cpp index 421d706230a..e8bdc495c2b 100644 --- a/src/gui/painting/qpaintbuffer.cpp +++ b/src/gui/painting/qpaintbuffer.cpp @@ -1242,6 +1242,11 @@ void QPaintBufferEngine::drawTiledPixmap(const QRectF &r, const QPixmap &pm, con void QPaintBufferEngine::drawStaticTextItem(QStaticTextItem *staticTextItem) { + if (staticTextItem->usesRawFont) { + QPaintEngineEx::drawStaticTextItem(staticTextItem); // Draw as path + return; + } + QVariantList variants; variants << QVariant(staticTextItem->font); diff --git a/src/gui/painting/qpainter.cpp b/src/gui/painting/qpainter.cpp index 159acf40c68..3af8fdea2e9 100644 --- a/src/gui/painting/qpainter.cpp +++ b/src/gui/painting/qpainter.cpp @@ -5619,6 +5619,8 @@ void QPainterPrivate::drawGlyphs(const quint32 *glyphArray, QFixedPoint *positio staticTextItem.numGlyphs = glyphCount; staticTextItem.glyphs = reinterpret_cast(const_cast(glyphArray)); staticTextItem.glyphPositions = positions; + // The font property is meaningless, the fontengine must be used directly: + staticTextItem.usesRawFont = true; extended->drawStaticTextItem(&staticTextItem); } else { diff --git a/src/gui/text/qstatictext_p.h b/src/gui/text/qstatictext_p.h index 4451f27b27e..fd920aaa522 100644 --- a/src/gui/text/qstatictext_p.h +++ b/src/gui/text/qstatictext_p.h @@ -79,7 +79,8 @@ class Q_GUI_EXPORT QStaticTextItem { public: QStaticTextItem() : chars(0), numChars(0), useBackendOptimizations(false), - userDataNeedsUpdate(0), m_fontEngine(0), m_userData(0) {} + userDataNeedsUpdate(0), usesRawFont(0), + m_fontEngine(0), m_userData(0) {} QStaticTextItem(const QStaticTextItem &other) { @@ -97,6 +98,7 @@ public: color = other.color; useBackendOptimizations = other.useBackendOptimizations; userDataNeedsUpdate = other.userDataNeedsUpdate; + usesRawFont = other.usesRawFont; m_fontEngine = 0; m_userData = 0; @@ -145,6 +147,7 @@ public: QColor color; // 10 bytes per item char useBackendOptimizations : 1; // 1 byte per item char userDataNeedsUpdate : 1; // + char usesRawFont : 1; // // ================ // 51 bytes per item