summaryrefslogtreecommitdiffstats
path: root/src/gui/painting/qpainter.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/painting/qpainter.cpp')
-rw-r--r--src/gui/painting/qpainter.cpp32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/gui/painting/qpainter.cpp b/src/gui/painting/qpainter.cpp
index a98ac10..f5bd2c5 100644
--- a/src/gui/painting/qpainter.cpp
+++ b/src/gui/painting/qpainter.cpp
@@ -69,6 +69,7 @@
#include <private/qwidget_p.h>
#include <private/qpaintengine_raster_p.h>
#include <private/qmath_p.h>
+#include <private/qstatictext_p.h>
QT_BEGIN_NAMESPACE
@@ -5703,6 +5704,37 @@ void QPainter::drawText(const QPointF &p, const QString &str)
drawText(p, str, 0, 0);
}
+void QPainter::drawStaticText(const QPointF &p, const QStaticText &staticText)
+{
+ const QStaticTextPrivate *staticText_d = QStaticTextPrivate::get(&staticText);
+ const QTextEngine &engine = staticText_d->engine;
+ const QVarLengthArray<int> &visualOrder = staticText_d->visualOrder;
+
+ QFixed x = QFixed::fromReal(p.x());
+ QFixed ox = x;
+
+ int nItems = engine.layoutData->items.size();
+ for (int i = 0; i < nItems; ++i) {
+ int item = visualOrder[i];
+ const QScriptItem &si = engine.layoutData->items.at(item);
+ if (si.analysis.flags >= QScriptAnalysis::TabOrObject) {
+ x += si.width;
+ continue;
+ }
+ QFont f = engine.font(si);
+ QTextItemInt gf(si, &f);
+ gf.glyphs = engine.shapedGlyphs(&si);
+ gf.chars = engine.layoutData->string.unicode() + si.position;
+ gf.num_chars = engine.length(item);
+ gf.width = si.width;
+ gf.logClusters = engine.logClusters(&si);
+
+ drawTextItem(QPointF(x.toReal(), p.y()), gf);
+
+ x += si.width;
+ }
+}
+
/*!
\internal
*/