summaryrefslogtreecommitdiffstats
path: root/src/declarative/graphicsitems
diff options
context:
space:
mode:
Diffstat (limited to 'src/declarative/graphicsitems')
-rw-r--r--src/declarative/graphicsitems/qmlgraphicstext.cpp57
-rw-r--r--src/declarative/graphicsitems/qmlgraphicstext_p.h3
-rw-r--r--src/declarative/graphicsitems/qmlgraphicstext_p_p.h1
3 files changed, 41 insertions, 20 deletions
diff --git a/src/declarative/graphicsitems/qmlgraphicstext.cpp b/src/declarative/graphicsitems/qmlgraphicstext.cpp
index 459541e..ce86b8f 100644
--- a/src/declarative/graphicsitems/qmlgraphicstext.cpp
+++ b/src/declarative/graphicsitems/qmlgraphicstext.cpp
@@ -41,6 +41,7 @@
#include "qmlgraphicstext_p.h"
#include "qmlgraphicstext_p_p.h"
+#include <qmlstyledtext_p.h>
#include <qfxperf_p_p.h>
@@ -143,7 +144,7 @@ void QmlGraphicsText::setFont(const QFont &font)
Q_D(QmlGraphicsText);
d->font = font;
- d->updateSize();
+ d->updateLayout();
d->markImgDirty();
}
@@ -166,7 +167,7 @@ void QmlGraphicsText::setText(const QString &n)
}
d->text = n;
- d->updateSize();
+ d->updateLayout();
d->markImgDirty();
emit textChanged(d->text);
}
@@ -336,7 +337,7 @@ void QmlGraphicsText::setWrap(bool w)
d->wrap = w;
- d->updateSize();
+ d->updateLayout();
d->markImgDirty();
}
@@ -387,12 +388,13 @@ void QmlGraphicsText::setTextFormat(TextFormat format)
Q_D(QmlGraphicsText);
if (format == d->format)
return;
+ d->format = format;
bool wasRich = d->richText;
d->richText = format == RichText || (format == AutoText && Qt::mightBeRichText(d->text));
if (wasRich && !d->richText) {
//### delete control? (and vice-versa below)
- d->updateSize();
+ d->updateLayout();
d->markImgDirty();
} else if (!wasRich && d->richText) {
if (!d->doc) {
@@ -400,10 +402,9 @@ void QmlGraphicsText::setTextFormat(TextFormat format)
d->doc->setDocumentMargin(0);
}
d->doc->setHtml(d->text);
- d->updateSize();
+ d->updateLayout();
d->markImgDirty();
}
- d->format = format;
}
/*!
@@ -436,7 +437,7 @@ void QmlGraphicsText::setElideMode(QmlGraphicsText::TextElideMode mode)
d->elideMode = mode;
- d->updateSize();
+ d->updateLayout();
d->markImgDirty();
}
@@ -453,6 +454,34 @@ void QmlGraphicsText::geometryChanged(const QRectF &newGeometry,
QmlGraphicsItem::geometryChanged(newGeometry, oldGeometry);
}
+void QmlGraphicsTextPrivate::updateLayout()
+{
+ Q_Q(QmlGraphicsText);
+ if (q->isComponentComplete()) {
+ //setup instance of QTextLayout for all cases other than richtext
+ if (!richText) {
+ layout.clearLayout();
+ layout.setFont(font);
+ if (format != QmlGraphicsText::StyledText) {
+ QString tmp = text;
+ tmp.replace(QLatin1Char('\n'), QChar::LineSeparator);
+ singleline = !tmp.contains(QChar::LineSeparator);
+ if (singleline && elideMode != QmlGraphicsText::ElideNone && q->widthValid()) {
+ QFontMetrics fm(font);
+ tmp = fm.elidedText(tmp,(Qt::TextElideMode)elideMode,q->width()); // XXX still worth layout...?
+ }
+ layout.setText(tmp);
+ } else {
+ singleline = false;
+ QmlStyledText::parse(text, layout);
+ }
+ }
+ updateSize();
+ } else {
+ dirty = true;
+ }
+}
+
void QmlGraphicsTextPrivate::updateSize()
{
Q_Q(QmlGraphicsText);
@@ -464,20 +493,10 @@ void QmlGraphicsTextPrivate::updateSize()
}
int dy = q->height();
- QString tmp;
QSize size(0, 0);
//setup instance of QTextLayout for all cases other than richtext
- if (!richText)
- {
- tmp = text;
- tmp.replace(QLatin1Char('\n'), QChar::LineSeparator);
- singleline = !tmp.contains(QChar::LineSeparator);
- if (singleline && elideMode != QmlGraphicsText::ElideNone && q->widthValid())
- tmp = fm.elidedText(tmp,(Qt::TextElideMode)elideMode,q->width()); // XXX still worth layout...?
- layout.clearLayout();
- layout.setFont(font);
- layout.setText(tmp);
+ if (!richText) {
size = setupTextLayout(&layout);
cachedLayoutSize = size;
dy -= size.height();
@@ -769,7 +788,7 @@ void QmlGraphicsText::componentComplete()
#endif
QmlGraphicsItem::componentComplete();
if (d->dirty) {
- d->updateSize();
+ d->updateLayout();
d->dirty = false;
}
}
diff --git a/src/declarative/graphicsitems/qmlgraphicstext_p.h b/src/declarative/graphicsitems/qmlgraphicstext_p.h
index 6ca460b..717fcb4 100644
--- a/src/declarative/graphicsitems/qmlgraphicstext_p.h
+++ b/src/declarative/graphicsitems/qmlgraphicstext_p.h
@@ -86,7 +86,8 @@ public:
Sunken };
enum TextFormat { PlainText = Qt::PlainText,
RichText = Qt::RichText,
- AutoText = Qt::AutoText };
+ AutoText = Qt::AutoText,
+ StyledText = 4 };
enum TextElideMode { ElideLeft = Qt::ElideLeft,
ElideRight = Qt::ElideRight,
ElideMiddle = Qt::ElideMiddle,
diff --git a/src/declarative/graphicsitems/qmlgraphicstext_p_p.h b/src/declarative/graphicsitems/qmlgraphicstext_p_p.h
index 79d1a4f..73c3dd7 100644
--- a/src/declarative/graphicsitems/qmlgraphicstext_p_p.h
+++ b/src/declarative/graphicsitems/qmlgraphicstext_p_p.h
@@ -80,6 +80,7 @@ public:
~QmlGraphicsTextPrivate();
void updateSize();
+ void updateLayout();
void markImgDirty() {
Q_Q(QmlGraphicsText);
imgDirty = true;