summaryrefslogtreecommitdiffstats
path: root/src/declarative/graphicsitems
diff options
context:
space:
mode:
authorMartin Jones <martin.jones@nokia.com>2010-11-03 06:20:56 (GMT)
committerMartin Jones <martin.jones@nokia.com>2010-11-03 06:20:56 (GMT)
commita2ecba558d4722bfae9acea84e6e33e72187756d (patch)
tree9cdb41ea52e1f8a017cfd243448535be8de7eb4e /src/declarative/graphicsitems
parent648eb76c22762c510815305e9e495db2aee9d2ad (diff)
parentaf15292e4982c11542487d39fc76ccfb8516598f (diff)
downloadQt-a2ecba558d4722bfae9acea84e6e33e72187756d.zip
Qt-a2ecba558d4722bfae9acea84e6e33e72187756d.tar.gz
Qt-a2ecba558d4722bfae9acea84e6e33e72187756d.tar.bz2
Merge branch '4.7' of scm.dev.nokia.troll.no:qt/qt-qml into 4.7
Diffstat (limited to 'src/declarative/graphicsitems')
-rw-r--r--src/declarative/graphicsitems/qdeclarativetext.cpp25
-rw-r--r--src/declarative/graphicsitems/qdeclarativetextlayout.cpp13
-rw-r--r--src/declarative/graphicsitems/qdeclarativetextlayout_p.h1
3 files changed, 27 insertions, 12 deletions
diff --git a/src/declarative/graphicsitems/qdeclarativetext.cpp b/src/declarative/graphicsitems/qdeclarativetext.cpp
index 03c9765..84f276e 100644
--- a/src/declarative/graphicsitems/qdeclarativetext.cpp
+++ b/src/declarative/graphicsitems/qdeclarativetext.cpp
@@ -219,6 +219,7 @@ void QDeclarativeTextPrivate::updateSize()
QFontMetrics fm(font);
if (text.isEmpty()) {
+ q->setImplicitWidth(0);
q->setImplicitHeight(fm.height());
emit q->paintedSizeChanged();
q->update();
@@ -291,30 +292,30 @@ QSize QDeclarativeTextPrivate::setupTextLayout()
qreal height = 0;
qreal lineWidth = 0;
- //set manual width
- if (q->widthValid())
- lineWidth = q->width();
-
QTextOption textOption = layout.textOption();
- textOption.setWrapMode(QTextOption::WrapMode(wrapMode));
+ textOption.setWrapMode(QTextOption::NoWrap);
textOption.setAlignment(Qt::Alignment(hAlign));
- layout.setTextOption(textOption);
+ // if the item has an explicit width, we set the line width and enable wrapping
+ if (q->widthValid()) {
+ lineWidth = q->width();
+ textOption.setWrapMode(QTextOption::WrapMode(wrapMode));
+ }
+
+ layout.setTextOption(textOption);
layout.beginLayout();
while (1) {
QTextLine line = layout.createLine();
if (!line.isValid())
break;
- if (q->widthValid()) {
- line.setLineWidth(lineWidth);
- line.setPosition(QPointF(0, height));
- height += line.height();
- }
+ line.setLineWidth(lineWidth);
+ line.setPosition(QPointF(0, height));
+ height += line.height();
}
layout.endLayout();
- return QSize(qCeil(layout.boundingRect().width()), layout.boundingRect().height());
+ return layout.boundingRect().toAlignedRect().size();
}
/*!
diff --git a/src/declarative/graphicsitems/qdeclarativetextlayout.cpp b/src/declarative/graphicsitems/qdeclarativetextlayout.cpp
index 89a2158..db5d75d 100644
--- a/src/declarative/graphicsitems/qdeclarativetextlayout.cpp
+++ b/src/declarative/graphicsitems/qdeclarativetextlayout.cpp
@@ -285,6 +285,19 @@ void QDeclarativeTextLayout::beginLayout()
QTextLayout::beginLayout();
}
+void QDeclarativeTextLayout::clearLayout()
+{
+ if (d && d->cached) {
+ d->cached = false;
+ d->items.clear();
+ d->positions.clear();
+ d->glyphs.clear();
+ d->chars.clear();
+ d->position = QPointF();
+ }
+ QTextLayout::clearLayout();
+}
+
void QDeclarativeTextLayout::prepare()
{
if (!d || !d->cached) {
diff --git a/src/declarative/graphicsitems/qdeclarativetextlayout_p.h b/src/declarative/graphicsitems/qdeclarativetextlayout_p.h
index 90bf0e0..8b81db3 100644
--- a/src/declarative/graphicsitems/qdeclarativetextlayout_p.h
+++ b/src/declarative/graphicsitems/qdeclarativetextlayout_p.h
@@ -59,6 +59,7 @@ public:
~QDeclarativeTextLayout();
void beginLayout();
+ void clearLayout();
void prepare();
void draw(QPainter *, const QPointF & = QPointF());