summaryrefslogtreecommitdiffstats
path: root/src/gui/text/qstatictext.cpp
diff options
context:
space:
mode:
authorEskil Abrahamsen Blomfeldt <eblomfel@trolltech.com>2009-05-22 14:23:08 (GMT)
committerEskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@nokia.com>2010-01-14 12:46:29 (GMT)
commit596d92d6ca25465594e5b852e99d73dda25494fd (patch)
tree0aabae97679cf55c25b9583d79b1f088aa1217b4 /src/gui/text/qstatictext.cpp
parenta25dd3694d752cdf104f0a9064f47f001082edad (diff)
downloadQt-596d92d6ca25465594e5b852e99d73dda25494fd.zip
Qt-596d92d6ca25465594e5b852e99d73dda25494fd.tar.gz
Qt-596d92d6ca25465594e5b852e99d73dda25494fd.tar.bz2
Fix formatting/clipping rectangle in QPainter::drawStaticText()
The rectangle should clip the text vertically and break lines horizontally, to mirror behavior of QPainter::drawText().
Diffstat (limited to 'src/gui/text/qstatictext.cpp')
-rw-r--r--src/gui/text/qstatictext.cpp26
1 files changed, 20 insertions, 6 deletions
diff --git a/src/gui/text/qstatictext.cpp b/src/gui/text/qstatictext.cpp
index 9ddcf44..44cb799 100644
--- a/src/gui/text/qstatictext.cpp
+++ b/src/gui/text/qstatictext.cpp
@@ -44,11 +44,17 @@
QT_BEGIN_NAMESPACE
-QStaticText::QStaticText(const QString &text, const QFont &font, const QSizeF &size)
+QStaticText::QStaticText(const QString &text, const QFont &font, const QSizeF &sz)
: d_ptr(new QStaticTextPrivate)
{
Q_D(QStaticText);
- d->init(text, font, size.isValid() ? size.width() : -1.0);
+ d->init(text, font, sz);
+}
+
+QStaticText::~QStaticText()
+{
+ Q_D(QStaticText);
+ delete d;
}
QStaticTextPrivate::QStaticTextPrivate()
@@ -56,24 +62,32 @@ QStaticTextPrivate::QStaticTextPrivate()
{
}
+QStaticTextPrivate::~QStaticTextPrivate()
+{
+ delete textLayout;
+}
+
QStaticTextPrivate *QStaticTextPrivate::get(const QStaticText *q)
{
return q->d_ptr;
}
-void QStaticTextPrivate::init(const QString &text, const QFont &font, qreal width)
+void QStaticTextPrivate::init(const QString &text, const QFont &font, const QSizeF &sz)
{
Q_ASSERT(textLayout == 0);
+ size = sz;
+
textLayout = new QTextLayout(text, font);
textLayout->setCacheEnabled(true);
QFontMetrics fontMetrics(font);
textLayout->beginLayout();
- int h = width >= 0.0 ? 0 : -fontMetrics.ascent();
+ int h = size.isValid() ? 0 : -fontMetrics.ascent();
+
QTextLine line;
- if ((line = textLayout->createLine()).isValid()) {
- line.setLineWidth(width >= 0.0 ? width : fontMetrics.width(text));
+ while ((line = textLayout->createLine()).isValid()) {
+ line.setLineWidth(size.isValid() ? size.width() : fontMetrics.width(text));
line.setPosition(QPointF(0, h));
h += line.height();
}