summaryrefslogtreecommitdiffstats
path: root/src/declarative/fx/qfxtext.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/declarative/fx/qfxtext.cpp')
-rw-r--r--src/declarative/fx/qfxtext.cpp103
1 files changed, 99 insertions, 4 deletions
diff --git a/src/declarative/fx/qfxtext.cpp b/src/declarative/fx/qfxtext.cpp
index 1f6890d..8618b87 100644
--- a/src/declarative/fx/qfxtext.cpp
+++ b/src/declarative/fx/qfxtext.cpp
@@ -43,8 +43,7 @@
#include "qfxtext_p.h"
#include <private/qtextcontrol_p.h>
-
-#include <qfxperf.h>
+#include <private/qfxperf_p.h>
#include <QTextLayout>
#include <QTextLine>
#include <QTextDocument>
@@ -158,7 +157,7 @@ void QFxText::setText(const QString &n)
if (d->text == n)
return;
- d->richText = Qt::mightBeRichText(n); // ### what's the cost?
+ d->richText = d->format == RichText || (d->format == AutoText && Qt::mightBeRichText(n));
if (d->richText) {
if (!d->doc)
{
@@ -166,7 +165,7 @@ void QFxText::setText(const QString &n)
d->control->setTextInteractionFlags(Qt::TextBrowserInteraction);
d->doc = d->control->document();
d->doc->setDocumentMargin(0);
- }
+ }
d->doc->setHtml(n);
}
@@ -373,6 +372,77 @@ void QFxText::setWrap(bool w)
}
/*!
+ \qmlproperty enumeration Text::textFormat
+
+ The way the text property should be displayed.
+
+ Supported text formats are \c AutoText, \c PlainText and \c RichText.
+
+ The default is AutoText. If the text format is AutoText the text element
+ will automatically determine whether the text should be treated as
+ rich text. This determination is made using Qt::mightBeRichText().
+
+ \table
+ \row
+ \o
+ \qml
+VerticalLayout {
+ TextEdit {
+ font.size: 24
+ text: "<b>Hello</b> <i>World!</i>"
+ }
+ TextEdit {
+ font.size: 24
+ textFormat: "RichText"
+ text: "<b>Hello</b> <i>World!</i>"
+ }
+ TextEdit {
+ font.size: 24
+ textFormat: "PlainText"
+ text: "<b>Hello</b> <i>World!</i>"
+ }
+}
+ \endqml
+ \o \image declarative-textformat.png
+ \endtable
+*/
+
+QFxText::TextFormat QFxText::textFormat() const
+{
+ Q_D(const QFxText);
+ return d->format;
+}
+
+void QFxText::setTextFormat(TextFormat format)
+{
+ Q_D(QFxText);
+ if (format == d->format)
+ return;
+ 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->imgDirty = true;
+ d->updateSize();
+ update();
+ } else if (!wasRich && d->richText) {
+ if (!d->doc)
+ {
+ d->control = new QTextControl(this);
+ d->control->setTextInteractionFlags(Qt::TextBrowserInteraction);
+ d->doc = d->control->document();
+ d->doc->setDocumentMargin(0);
+ }
+ d->doc->setHtml(d->text);
+ d->imgDirty = true;
+ d->updateSize();
+ update();
+ }
+ d->format = format;
+}
+
+/*!
\qmlproperty Qt::TextElideMode Text::elide
Set this property to elide parts of the text fit to the Text item's width.
@@ -686,6 +756,21 @@ void QFxTextPrivate::checkImgCache()
imgDirty = false;
}
+bool QFxText::smoothTransform() const
+{
+ Q_D(const QFxText);
+ return d->smooth;
+}
+
+void QFxText::setSmoothTransform(bool s)
+{
+ Q_D(QFxText);
+ if (d->smooth == s)
+ return;
+ d->smooth = s;
+ update();
+}
+
void QFxText::paintContents(QPainter &p)
{
Q_D(QFxText);
@@ -693,6 +778,11 @@ void QFxText::paintContents(QPainter &p)
if (d->imgCache.isNull())
return;
+ bool oldAA = p.testRenderHint(QPainter::Antialiasing);
+ bool oldSmooth = p.testRenderHint(QPainter::SmoothPixmapTransform);
+ if (d->smooth)
+ p.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform, d->smooth);
+
int w = width();
int h = height();
@@ -733,6 +823,11 @@ void QFxText::paintContents(QPainter &p)
p.drawPixmap(x, y, d->imgCache);
if (needClip)
p.restore();
+
+ if (d->smooth) {
+ p.setRenderHint(QPainter::Antialiasing, oldAA);
+ p.setRenderHint(QPainter::SmoothPixmapTransform, oldSmooth);
+ }
}
void QFxText::componentComplete()