summaryrefslogtreecommitdiffstats
path: root/src/gui/painting/qpaintbuffer.cpp
diff options
context:
space:
mode:
authorEskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@nokia.com>2010-03-26 16:56:44 +0100
committerEskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@nokia.com>2010-03-29 14:10:09 +0200
commit3bdff93c991bfabcaa729a89a2b171c562633ced (patch)
tree552323ceba27a1b8bd5551cda789ded0e7791128 /src/gui/painting/qpaintbuffer.cpp
parent732fbde53bd39d9b99e65e4aad7b028df246fce2 (diff)
Implement proper QStaticText support in QPaintBuffer
Use qt_draw_glyphs() to implement a QPaintBuffer::drawStaticText() which will actually replay via drawStaticTextItem() on engines that support it. Task-number: QTBUG-9064 Reviewed-by: Gunnar
Diffstat (limited to 'src/gui/painting/qpaintbuffer.cpp')
-rw-r--r--src/gui/painting/qpaintbuffer.cpp33
1 files changed, 19 insertions, 14 deletions
diff --git a/src/gui/painting/qpaintbuffer.cpp b/src/gui/painting/qpaintbuffer.cpp
index ca2077f461..e1156dcb89 100644
--- a/src/gui/painting/qpaintbuffer.cpp
+++ b/src/gui/painting/qpaintbuffer.cpp
@@ -557,11 +557,7 @@ QString QPaintBuffer::commandDescription(int command) const
debug << "Cmd_Translate:" << delta;
break; }
case QPaintBufferPrivate::Cmd_DrawStaticText: {
- QPointF delta(d_ptr->floats.at(cmd.extra), d_ptr->floats.at(cmd.extra+1));
- QVariantList variants(d_ptr->variants.at(cmd.offset).value<QVariantList>());
-
- QStaticText text(variants.at(0).value<QStaticText>());
- debug << "Cmd_DrawStaticText:" << text.text();
+ debug << "Cmd_DrawStaticText";
break; }
}
@@ -1272,13 +1268,14 @@ void QPaintBufferEngine::drawTiledPixmap(const QRectF &r, const QPixmap &pm, con
void QPaintBufferEngine::drawStaticTextItem(QStaticTextItem *staticTextItem)
{
- QString text = QString(staticTextItem->chars, staticTextItem->numChars);
+ QVariantList variants;
- QStaticText staticText(text);
- staticText.prepare(state()->matrix, staticTextItem->font);
+ variants << QVariant(staticTextItem->font);
+ for (int i=0; i<staticTextItem->numGlyphs; ++i) {
+ variants.append(staticTextItem->glyphs[i]);
+ variants.append(staticTextItem->glyphPositions[i].toPointF());
+ }
- QVariantList variants;
- variants << QVariant(staticTextItem->font) << QVariant::fromValue(staticText);
buffer->addCommand(QPaintBufferPrivate::Cmd_DrawStaticText, QVariant(variants));
}
@@ -1761,11 +1758,19 @@ void QPainterReplayer::process(const QPaintBufferCommand &cmd)
QVariantList variants(d->variants.at(cmd.offset).value<QVariantList>());
- QFont font(variants.at(0).value<QFont>());
- QStaticText text(variants.at(0).value<QStaticText>());
-
+ QFont font = variants.at(0).value<QFont>();
+
+ QVector<quint32> glyphs;
+ QVector<QPointF> positions;
+
+ for (int i=0; i<(variants.size() - 1) / 2; ++i) {
+ glyphs.append(variants.at(i*2 + 1).toUInt());
+ positions.append(variants.at(i*2 + 2).toPointF());
+ }
+
painter->setFont(font);
- painter->drawStaticText(QPointF(0, 0), text);
+
+ qt_draw_glyphs(painter, glyphs.constData(), positions.constData(), glyphs.size());
break;
}