Skip to content

Commit

Permalink
Text format AutoText should use StyledText instead of RichText.
Browse files Browse the repository at this point in the history
Task-number: QTBUG-21723
Change-Id: Ife213be95985ad1022e2f60241e69ecd9f467caf
Reviewed-on: http://codereview.qt-project.org/5825
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Yann Bodson <yann.bodson@nokia.com>
  • Loading branch information
Yann Bodson authored and Qt by Nokia committed Sep 30, 2011
1 parent 270f4a7 commit 3fff5e6
Show file tree
Hide file tree
Showing 8 changed files with 39 additions and 12 deletions.
2 changes: 2 additions & 0 deletions doc/src/declarative/whatsnew.qdoc
Expand Up @@ -99,6 +99,8 @@ Added topMargin, bottomMargin, leftMargin, rightMargin, xOrigin, yOrigin propert
Image has two new properties: horizontalAlignment and verticalAlignment. It also has a new value for
fillMode (Image.Pad) that does not transform the image.

Text will now automatically switch to StyledText instead of RichText if textFormat is set to AutoText.

Grid now has rowSpacing and columnSpacing properties.

Positioners now have attached properties that can be used to determine a subitem's location within a
Expand Down
22 changes: 12 additions & 10 deletions src/declarative/items/qsgtext.cpp
Expand Up @@ -104,7 +104,7 @@ QSGTextPrivate::QSGTextPrivate()
maximumLineCountValid(false),
texture(0),
imageCacheDirty(false), updateOnComponentComplete(true),
richText(false), singleline(false), cacheAllTextAsImage(true), internalWidthUpdate(false),
richText(false), styledText(false), singleline(false), cacheAllTextAsImage(true), internalWidthUpdate(false),
requireImplicitWidth(false), truncated(false), hAlignImplicit(true), rightToLeftText(false),
layoutTextElided(false), richTextAsImage(false), textureImageCacheDirty(false), naturalWidth(0),
doc(0), nodeType(NodeIsNull)
Expand Down Expand Up @@ -230,7 +230,7 @@ void QSGTextPrivate::updateLayout()
if (!richText) {
layout.clearLayout();
layout.setFont(font);
if (format != QSGText::StyledText) {
if (!styledText) {
QString tmp = text;
tmp.replace(QLatin1Char('\n'), QChar::LineSeparator);
singleline = !tmp.contains(QChar::LineSeparator);
Expand Down Expand Up @@ -937,7 +937,7 @@ void QSGText::setFont(const QFont &font)
The text to display. Text supports both plain and rich text strings.
The item will try to automatically determine whether the text should
be treated as rich text. This determination is made using Qt::mightBeRichText().
be treated as styled text. This determination is made using Qt::mightBeRichText().
*/
QString QSGText::text() const
{
Expand All @@ -951,7 +951,8 @@ void QSGText::setText(const QString &n)
if (d->text == n)
return;

d->richText = d->format == RichText || (d->format == AutoText && Qt::mightBeRichText(n));
d->richText = d->format == RichText;
d->styledText = d->format == StyledText || (d->format == AutoText && Qt::mightBeRichText(n));
d->text = n;
if (isComponentComplete()) {
if (d->richText) {
Expand Down Expand Up @@ -1316,13 +1317,13 @@ void QSGText::resetMaximumLineCount()
\list
\o Text.AutoText (default)
\o Text.PlainText
\o Text.RichText
\o Text.StyledText
\o Text.RichText
\endlist
If the text format is \c Text.AutoText the text element
will automatically determine whether the text should be treated as
rich text. This determination is made using Qt::mightBeRichText().
styled text. This determination is made using Qt::mightBeRichText().
Text.StyledText is an optimized format supporting some basic text
styling markup, in the style of html 3.2:
Expand Down Expand Up @@ -1379,7 +1380,8 @@ void QSGText::setTextFormat(TextFormat format)
return;
d->format = format;
bool wasRich = d->richText;
d->richText = format == RichText || (format == AutoText && Qt::mightBeRichText(d->text));
d->richText = format == RichText;
d->styledText = format == StyledText || (format == AutoText && Qt::mightBeRichText(d->text));

if (!wasRich && d->richText && isComponentComplete()) {
d->ensureDoc();
Expand Down Expand Up @@ -1686,7 +1688,7 @@ void QSGText::componentComplete()

QString QSGTextPrivate::anchorAt(const QPointF &mousePos)
{
if (format == QSGText::StyledText) {
if (styledText) {
for (int i = 0; i < layout.lineCount(); ++i) {
QTextLine line = layout.lineAt(i);
if (line.naturalTextRect().contains(mousePos)) {
Expand Down Expand Up @@ -1717,7 +1719,7 @@ void QSGText::mousePressEvent(QMouseEvent *event)
Q_D(QSGText);

if (d->isLinkActivatedConnected()) {
if (d->format == QSGText::StyledText)
if (d->styledText)
d->activeLink = d->anchorAt(event->localPos());
else if (d->richText && d->doc)
d->activeLink = d->doc->documentLayout()->anchorAt(event->localPos());
Expand All @@ -1742,7 +1744,7 @@ void QSGText::mouseReleaseEvent(QMouseEvent *event)

QString link;
if (d->isLinkActivatedConnected()) {
if (d->format == QSGText::StyledText)
if (d->styledText)
link = d->anchorAt(event->localPos());
else if (d->richText && d->doc)
link = d->doc->documentLayout()->anchorAt(event->localPos());
Expand Down
1 change: 1 addition & 0 deletions src/declarative/items/qsgtext_p_p.h
Expand Up @@ -110,6 +110,7 @@ class Q_AUTOTEST_EXPORT QSGTextPrivate : public QSGImplicitSizeItemPrivate
bool imageCacheDirty:1;
bool updateOnComponentComplete:1;
bool richText:1;
bool styledText:1;
bool singleline:1;
bool cacheAllTextAsImage:1;
bool internalWidthUpdate:1;
Expand Down
@@ -1,5 +1,6 @@
import QtQuick 2.0

Text {
textFormat: Text.RichText
text: "<img src='http/exists.png'>"
}
@@ -1,5 +1,6 @@
import QtQuick 2.0

Text {
textFormat: Text.RichText
text: "<img src='http/notexists.png'>"
}
@@ -1,5 +1,6 @@
import QtQuick 2.0

Text {
textFormat: Text.RichText
text: "<img src='http://127.0.0.1:14453/exists.png'>"
}
@@ -1,5 +1,6 @@
import QtQuick 2.0

Text {
textFormat: Text.RichText
text: "<img src='http://127.0.0.1:14453/notexists.png'>"
}
22 changes: 20 additions & 2 deletions tests/auto/declarative/qsgtext/tst_qsgtext.cpp
Expand Up @@ -321,14 +321,14 @@ void tst_qsgtext::width()

int documentWidth = document.idealWidth();

QString componentStr = "import QtQuick 2.0\nText { text: \"" + richText.at(i) + "\" }";
QString componentStr = "import QtQuick 2.0\nText { text: \"" + richText.at(i) + "\"; textFormat: Text.RichText }";
QDeclarativeComponent textComponent(&engine);
textComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
QSGText *textObject = qobject_cast<QSGText*>(textComponent.create());

QVERIFY(textObject != 0);
QCOMPARE(textObject->width(), qreal(documentWidth));
QVERIFY(textObject->textFormat() == QSGText::AutoText); // setting text doesn't change format
QVERIFY(textObject->textFormat() == QSGText::RichText);

delete textObject;
}
Expand Down Expand Up @@ -465,6 +465,24 @@ void tst_qsgtext::textFormat()
QVERIFY(textObject != 0);
QVERIFY(textObject->textFormat() == QSGText::RichText);

QSGTextPrivate *textPrivate = QSGTextPrivate::get(textObject);
QVERIFY(textPrivate != 0);
QVERIFY(textPrivate->richText == true);

delete textObject;
}
{
QDeclarativeComponent textComponent(&engine);
textComponent.setData("import QtQuick 2.0\nText { text: \"<b>Hello</b>\" }", QUrl::fromLocalFile(""));
QSGText *textObject = qobject_cast<QSGText*>(textComponent.create());

QVERIFY(textObject != 0);
QVERIFY(textObject->textFormat() == QSGText::AutoText);

QSGTextPrivate *textPrivate = QSGTextPrivate::get(textObject);
QVERIFY(textPrivate != 0);
QVERIFY(textPrivate->styledText == true);

delete textObject;
}
{
Expand Down

0 comments on commit 3fff5e6

Please sign in to comment.