summaryrefslogtreecommitdiffstats
path: root/src/gui/painting
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/painting')
-rw-r--r--src/gui/painting/qpaintbuffer.cpp2
-rw-r--r--src/gui/painting/qpainter.cpp87
-rw-r--r--src/gui/painting/qpainter.h16
-rw-r--r--src/gui/painting/qpainter_p.h6
4 files changed, 45 insertions, 66 deletions
diff --git a/src/gui/painting/qpaintbuffer.cpp b/src/gui/painting/qpaintbuffer.cpp
index 632dea7..51eb681 100644
--- a/src/gui/painting/qpaintbuffer.cpp
+++ b/src/gui/painting/qpaintbuffer.cpp
@@ -1448,7 +1448,7 @@ void QPainterReplayer::process(const QPaintBufferCommand &cmd)
QStaticText text(variants.at(0).value<QStaticText>());
painter->setFont(font);
- painter->drawStaticText(QPointF(0, 0), text);
+ qt_draw_static_text(painter, QPointF(0, 0), text);
break; }
diff --git a/src/gui/painting/qpainter.cpp b/src/gui/painting/qpainter.cpp
index 4338a5f..0d47260 100644
--- a/src/gui/painting/qpainter.cpp
+++ b/src/gui/painting/qpainter.cpp
@@ -5707,36 +5707,23 @@ void QPainter::drawText(const QPointF &p, const QString &str)
drawText(p, str, 0, 0);
}
-/*!
- \fn void QPainter::drawStaticText(const QPoint &position, const QStaticText &staticText)
-
- \internal
-
- \overload
-*/
-
-/*!
- \fn void QPainter::drawStaticText(int x, int y, const QStaticText &staticText)
-
- \internal
-
- \overload
-*/
-
-/*!
- Draws the given \a staticText beginning at the given \a position.
+QPainterPrivate *QPainterPrivate::get(QPainter *p)
+{
+ return p->d_ptr.data();
+}
- \internal
+void qt_draw_static_text(QPainter *p, const QPointF &position, const QStaticText &text)
+{
+ QPainterPrivate *prv = QPainterPrivate::get(p);
+ Q_ASSERT(prv != 0);
- This function can be used to optimize drawing text if the text and its layout is updated
- seldomly.
+ prv->drawStaticText(position, text);
+}
- \sa QStaticText
-*/
-void QPainter::drawStaticText(const QPointF &position, const QStaticText &staticText)
+void QPainterPrivate::drawStaticText(const QPointF &position, const QStaticText &staticText)
{
- Q_D(QPainter);
- if (!d->engine || staticText.isEmpty() || pen().style() == Qt::NoPen)
+ Q_Q(QPainter);
+ if (!engine || staticText.isEmpty() || q->pen().style() == Qt::NoPen)
return;
QStaticTextPrivate *staticText_d =
@@ -5744,31 +5731,31 @@ void QPainter::drawStaticText(const QPointF &position, const QStaticText &static
// 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()) {
+ if (extended == 0 || !state->matrix.isAffine()) {
if (staticText_d->size.isValid())
- drawText(QRectF(position, staticText_d->size), staticText_d->text);
+ q->drawText(QRectF(position, staticText_d->size), staticText_d->text);
else
- drawText(position, staticText_d->text);
+ q->drawText(position, staticText_d->text);
return;
}
// Don't recalculate entire layout because of translation, rather add the dx and dy
// into the position to move each text item the correct distance.
- QPointF transformedPosition = position * d->state->matrix;
- QTransform matrix = d->state->matrix;
+ QPointF transformedPosition = position * state->matrix;
+ QTransform matrix = state->matrix;
// The translation has been applied to transformedPosition. Remove translation
// component from matrix.
- if (d->state->matrix.isTranslating()) {
- qreal m11 = d->state->matrix.m11();
- qreal m12 = d->state->matrix.m12();
- qreal m13 = d->state->matrix.m13();
- qreal m21 = d->state->matrix.m21();
- qreal m22 = d->state->matrix.m22();
- qreal m23 = d->state->matrix.m23();
- qreal m33 = d->state->matrix.m33();
-
- d->state->matrix.setMatrix(m11, m12, m13,
+ if (state->matrix.isTranslating()) {
+ qreal m11 = state->matrix.m11();
+ qreal m12 = state->matrix.m12();
+ qreal m13 = state->matrix.m13();
+ qreal m21 = state->matrix.m21();
+ qreal m22 = state->matrix.m22();
+ qreal m23 = state->matrix.m23();
+ qreal m33 = state->matrix.m33();
+
+ state->matrix.setMatrix(m11, m12, m13,
m21, m22, m23,
0.0, 0.0, m33);
}
@@ -5776,21 +5763,21 @@ void QPainter::drawStaticText(const QPointF &position, const QStaticText &static
// If the transform is not identical to the text transform,
// we have to relayout the text (for other transformations than plain translation)
bool staticTextNeedsReinit = false;
- if (staticText_d->matrix != d->state->matrix) {
- staticText_d->matrix = d->state->matrix;
+ if (staticText_d->matrix != state->matrix) {
+ staticText_d->matrix = state->matrix;
staticTextNeedsReinit = true;
}
bool restoreWhenFinished = false;
if (staticText_d->needsClipRect) {
- save();
- setClipRect(QRectF(position, staticText_d->size));
+ q->save();
+ q->setClipRect(QRectF(position, staticText_d->size));
restoreWhenFinished = true;
}
- if (font() != staticText_d->font) {
- staticText_d->font = font();
+ if (q->font() != staticText_d->font) {
+ staticText_d->font = q->font();
staticTextNeedsReinit = true;
}
@@ -5817,14 +5804,14 @@ void QPainter::drawStaticText(const QPointF &position, const QStaticText &static
for (int i=0; i<staticText_d->itemCount; ++i) {
QStaticTextItem *item = staticText_d->items + i;
- d->extended->drawStaticTextItem(item);
+ extended->drawStaticTextItem(item);
}
if (restoreWhenFinished)
- restore();
+ q->restore();
if (matrix.isTranslating())
- d->state->matrix = matrix;
+ state->matrix = matrix;
}
/*!
diff --git a/src/gui/painting/qpainter.h b/src/gui/painting/qpainter.h
index 181eba7..088a973 100644
--- a/src/gui/painting/qpainter.h
+++ b/src/gui/painting/qpainter.h
@@ -78,7 +78,6 @@ class QPolygon;
class QTextItem;
class QMatrix;
class QTransform;
-class QStaticText;
class QPainterPrivateDeleter;
@@ -370,10 +369,6 @@ public:
void setLayoutDirection(Qt::LayoutDirection direction);
Qt::LayoutDirection layoutDirection() const;
- inline void drawStaticText(int x, int y, const QStaticText &staticText);
- inline void drawStaticText(const QPoint &p, const QStaticText &staticText);
- void drawStaticText(const QPointF &p, const QStaticText &staticText);
-
void drawText(const QPointF &p, const QString &s);
inline void drawText(const QPoint &p, const QString &s);
inline void drawText(int x, int y, const QString &s);
@@ -527,6 +522,7 @@ private:
friend class QRasterPaintEngine;
friend class QAlphaPaintEngine;
friend class QPreviewPaintEngine;
+ friend class QPainterPrivate;
};
Q_DECLARE_OPERATORS_FOR_FLAGS(QPainter::RenderHints)
@@ -911,16 +907,6 @@ inline void QPainter::drawText(const QPoint &p, const QString &s)
drawText(QPointF(p), s);
}
-inline void QPainter::drawStaticText(const QPoint &p, const QStaticText &staticText)
-{
- drawStaticText(QPointF(p), staticText);
-}
-
-inline void QPainter::drawStaticText(int x, int y, const QStaticText &staticText)
-{
- drawStaticText(QPointF(x, y), staticText);
-}
-
inline void QPainter::drawText(int x, int y, int w, int h, int flags, const QString &str, QRect *br)
{
drawText(QRect(x, y, w, h), flags, str, br);
diff --git a/src/gui/painting/qpainter_p.h b/src/gui/painting/qpainter_p.h
index 02a91aa..2979de6 100644
--- a/src/gui/painting/qpainter_p.h
+++ b/src/gui/painting/qpainter_p.h
@@ -70,6 +70,7 @@ QT_BEGIN_NAMESPACE
class QPaintEngine;
class QEmulationPaintEngine;
class QPaintEngineEx;
+class QStaticText;
struct QTLWExtra;
@@ -229,6 +230,8 @@ public:
void drawStretchedGradient(const QPainterPath &path, DrawOperation operation);
void drawOpaqueBackground(const QPainterPath &path, DrawOperation operation);
+ void drawStaticText(const QPointF &position, const QStaticText &staticText);
+
void updateMatrix();
void updateInvMatrix();
@@ -242,6 +245,8 @@ public:
static bool attachPainterPrivate(QPainter *q, QPaintDevice *pdev);
void detachPainterPrivate(QPainter *q);
+ static QPainterPrivate *get(QPainter *p);
+
QPaintDevice *device;
QPaintDevice *original_device;
QPaintDevice *helper_device;
@@ -252,6 +257,7 @@ public:
};
Q_GUI_EXPORT void qt_draw_helper(QPainterPrivate *p, const QPainterPath &path, QPainterPrivate::DrawOperation operation);
+Q_GUI_EXPORT void qt_draw_static_text(QPainter *p, const QPointF &position, const QStaticText &text);
QString qt_generate_brush_key(const QBrush &brush);