summaryrefslogtreecommitdiffstats
path: root/src/gui
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@digia.com>2014-09-18 14:47:35 +0200
committerAllan Sandfeld Jensen <allan.jensen@digia.com>2014-09-19 02:55:29 +0200
commitca36198251147d2df0b07beef1f824e07e369d07 (patch)
tree2e93a5c35b4e9b8d71f441e203fe840000ad818f /src/gui
parent4453bfcb20a781192870b37f668ebee72b91974e (diff)
QPaintBuffer paints drawGlyphRun with wrong font
If QRawFont and and drawGlyphRun is used on a QPaintBuffer it will lose the QRawFont and end up painting with primary font at the time. With this patch, QStaticTextItem can now indicate that they must be drawn using the supplied font-engine and that the font information is not enough. Change-Id: Id6bd376d797d2bfb457e7de55c48bdcf9f20ae38 Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@digia.com>
Diffstat (limited to 'src/gui')
-rw-r--r--src/gui/painting/qpaintbuffer.cpp5
-rw-r--r--src/gui/painting/qpainter.cpp2
-rw-r--r--src/gui/text/qstatictext_p.h5
3 files changed, 11 insertions, 1 deletions
diff --git a/src/gui/painting/qpaintbuffer.cpp b/src/gui/painting/qpaintbuffer.cpp
index 421d706230..e8bdc495c2 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 159acf40c6..3af8fdea2e 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<glyph_t *>(const_cast<glyph_t *>(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 4451f27b27..fd920aaa52 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