From 0b830897c6256b26289c912e28257d040e9c1b4c Mon Sep 17 00:00:00 2001 From: Eskil Abrahamsen Blomfeldt Date: Mon, 18 Jan 2010 15:26:19 +0100 Subject: Implement QPaintBufferEngine::drawStaticTextItem() Make QPaintEngineEx::drawStaticTextItem() pure virtual to make sure it's implemented in all engines, and implement the paint buffer version to make gui compile. --- src/gui/painting/qpaintbuffer.cpp | 37 +++++++++++++++++++++++++++++++++++++ src/gui/painting/qpaintbuffer_p.h | 2 ++ src/gui/painting/qpaintengineex_p.h | 2 +- src/gui/text/qstatictext.h | 2 ++ 4 files changed, 42 insertions(+), 1 deletion(-) diff --git a/src/gui/painting/qpaintbuffer.cpp b/src/gui/painting/qpaintbuffer.cpp index 2344c04..e0067b0 100644 --- a/src/gui/painting/qpaintbuffer.cpp +++ b/src/gui/painting/qpaintbuffer.cpp @@ -45,6 +45,7 @@ #include #include #include +#include #include @@ -960,6 +961,30 @@ void QPaintBufferEngine::drawTiledPixmap(const QRectF &r, const QPixmap &pm, con buffer->updateBoundingRect(r); } +void QPaintBufferEngine::drawStaticTextItem(QStaticTextItem *staticTextItem) +{ + QString text = QString(staticTextItem->chars, staticTextItem->numChars); + + QFontDef fontDef = staticTextItem->fontEngine->fontDef; + QFont font(fontDef.family, fontDef.pointSize, fontDef.weight, fontDef.style == QFont::StyleItalic); + + QTransform xform; + for (int i=buffer->commands.size()-1; i>=0; --i) { + const QPaintBufferCommand &cmd = buffer->commands.at(i); + if (cmd.id == QPaintBufferPrivate::Cmd_SetTransform) { + xform = qVariantValue(buffer->variants.at(cmd.offset)); + break; + } + } + + QStaticText staticText(text); + staticText.prepare(xform, font); + + QVariantList variants; + variants << QVariant(font) << QVariant::fromValue(staticText); + buffer->addCommand(QPaintBufferPrivate::Cmd_DrawStaticText, QVariant(variants)); +} + void QPaintBufferEngine::drawTextItem(const QPointF &pos, const QTextItem &ti) { #ifdef QPAINTBUFFER_DEBUG_DRAW @@ -1425,6 +1450,18 @@ void QPainterReplayer::process(const QPaintBufferCommand &cmd) #endif painter->setClipRegion(region, Qt::ClipOperation(cmd.extra)); break; } + + case QPaintBufferPrivate::Cmd_DrawStaticText: { + + QVariantList variants(d->variants.at(cmd.offset).value()); + + QFont font(variants.at(0).value()); + QStaticText text(variants.at(0).value()); + + painter->setFont(font); + painter->drawStaticText(QPointF(0, 0), text); + + break; } case QPaintBufferPrivate::Cmd_DrawText: { QPointF pos(d->floats.at(cmd.extra), d->floats.at(cmd.extra+1)); diff --git a/src/gui/painting/qpaintbuffer_p.h b/src/gui/painting/qpaintbuffer_p.h index 79d7b35..41a26c5 100644 --- a/src/gui/painting/qpaintbuffer_p.h +++ b/src/gui/painting/qpaintbuffer_p.h @@ -175,6 +175,7 @@ public: Cmd_DrawText, Cmd_DrawTextItem, + Cmd_DrawStaticText, Cmd_DrawImagePos, Cmd_DrawImageRect, @@ -394,6 +395,7 @@ public: virtual void drawTiledPixmap(const QRectF &r, const QPixmap &pixmap, const QPointF &s); virtual void drawTextItem(const QPointF &pos, const QTextItem &ti); + virtual void drawStaticTextItem(QStaticTextItem *staticTextItem); virtual void setState(QPainterState *s); virtual uint flags() const {return QPaintEngineEx::DoNotEmulate;} diff --git a/src/gui/painting/qpaintengineex_p.h b/src/gui/painting/qpaintengineex_p.h index 1370e82..90c4f9f 100644 --- a/src/gui/painting/qpaintengineex_p.h +++ b/src/gui/painting/qpaintengineex_p.h @@ -201,7 +201,7 @@ public: virtual void updateState(const QPaintEngineState &state); - virtual void drawStaticTextItem(QStaticTextItem *) { /* ### should be pure virtual ### */ }; + virtual void drawStaticTextItem(QStaticTextItem *) = 0; virtual void setState(QPainterState *s); inline QPainterState *state() { return static_cast(QPaintEngine::state); } diff --git a/src/gui/text/qstatictext.h b/src/gui/text/qstatictext.h index e507d82..6c70816 100644 --- a/src/gui/text/qstatictext.h +++ b/src/gui/text/qstatictext.h @@ -85,6 +85,8 @@ private: friend class QStaticTextPrivate; }; +Q_DECLARE_METATYPE(QStaticText) + QT_END_NAMESPACE QT_END_HEADER -- cgit v0.12