diff options
author | Shawn Rutledge <shawn.rutledge@qt.io> | 2018-12-21 23:38:46 +0100 |
---|---|---|
committer | Shawn Rutledge <shawn.rutledge@qt.io> | 2019-05-09 18:04:59 +0000 |
commit | 0eb10519c263187f54ffad5c6d521d88736f2680 (patch) | |
tree | 3ece9378eb1cfca9e9f7baa8e4bf9e21342cab76 /src | |
parent | dafdc9d701b0b3a33e3eac0a723d80717a02f4f8 (diff) |
Add Markdown support to Text
"Markers" (only checkboxes so far) are a new feature too.
Change-Id: I5a0ea337ec6cf8bdadf3b4729caaa579e8b625b5
Reviewed-by: Gatis Paeglis <gatis.paeglis@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/quick/items/qquicktext.cpp | 16 | ||||
-rw-r--r-- | src/quick/items/qquicktext_p.h | 1 | ||||
-rw-r--r-- | src/quick/items/qquicktext_p_p.h | 1 | ||||
-rw-r--r-- | src/quick/items/qquicktextdocument.cpp | 8 | ||||
-rw-r--r-- | src/quick/items/qquicktextdocument_p.h | 3 | ||||
-rw-r--r-- | src/quick/items/qquicktextnodeengine.cpp | 11 |
6 files changed, 36 insertions, 4 deletions
diff --git a/src/quick/items/qquicktext.cpp b/src/quick/items/qquicktext.cpp index 6d343a91ce..ae849aeb4b 100644 --- a/src/quick/items/qquicktext.cpp +++ b/src/quick/items/qquicktext.cpp @@ -1653,13 +1653,17 @@ void QQuickText::setText(const QString &n) if (d->text == n) return; - d->richText = d->format == RichText; + d->markdownText = d->format == MarkdownText; + d->richText = d->format == RichText || d->markdownText; d->styledText = d->format == StyledText || (d->format == AutoText && Qt::mightBeRichText(n)); d->text = n; if (isComponentComplete()) { if (d->richText) { d->ensureDoc(); - d->extra->doc->setText(n); + if (d->markdownText) + d->extra->doc->setMarkdownText(n); + else + d->extra->doc->setText(n); d->rightToLeftText = d->extra->doc->toPlainText().isRightToLeft(); } else { d->clearFormats(); @@ -2146,7 +2150,8 @@ void QQuickText::setTextFormat(TextFormat format) return; d->format = format; bool wasRich = d->richText; - d->richText = format == RichText; + d->markdownText = format == MarkdownText; + d->richText = format == RichText || d->markdownText; d->styledText = format == StyledText || (format == AutoText && Qt::mightBeRichText(d->text)); if (isComponentComplete()) { @@ -2687,7 +2692,10 @@ void QQuickText::componentComplete() if (d->updateOnComponentComplete) { if (d->richText) { d->ensureDoc(); - d->extra->doc->setText(d->text); + if (d->markdownText) + d->extra->doc->setMarkdownText(d->text); + else + d->extra->doc->setText(d->text); d->rightToLeftText = d->extra->doc->toPlainText().isRightToLeft(); } else { d->rightToLeftText = d->text.isRightToLeft(); diff --git a/src/quick/items/qquicktext_p.h b/src/quick/items/qquicktext_p.h index 1af60051fb..45f387cb12 100644 --- a/src/quick/items/qquicktext_p.h +++ b/src/quick/items/qquicktext_p.h @@ -121,6 +121,7 @@ public: Q_ENUM(TextStyle) enum TextFormat { PlainText = Qt::PlainText, RichText = Qt::RichText, + MarkdownText = Qt::MarkdownText, AutoText = Qt::AutoText, StyledText = 4 }; Q_ENUM(TextFormat) diff --git a/src/quick/items/qquicktext_p_p.h b/src/quick/items/qquicktext_p_p.h index efa45e0958..c01998b100 100644 --- a/src/quick/items/qquicktext_p_p.h +++ b/src/quick/items/qquicktext_p_p.h @@ -161,6 +161,7 @@ public: bool updateOnComponentComplete:1; bool richText:1; bool styledText:1; + bool markdownText:1; bool widthExceeded:1; bool heightExceeded:1; bool internalWidthUpdate:1; diff --git a/src/quick/items/qquicktextdocument.cpp b/src/quick/items/qquicktextdocument.cpp index 06ac5804c4..021bbca0f6 100644 --- a/src/quick/items/qquicktextdocument.cpp +++ b/src/quick/items/qquicktextdocument.cpp @@ -237,6 +237,14 @@ void QQuickTextDocumentWithImageResources::setText(const QString &text) #endif } +#if QT_CONFIG(textmarkdownreader) +void QQuickTextDocumentWithImageResources::setMarkdownText(const QString &text) +{ + clearResources(); + QTextDocument::setMarkdown(text); +} +#endif + QSet<QUrl> QQuickTextDocumentWithImageResources::errors; QT_END_NAMESPACE diff --git a/src/quick/items/qquicktextdocument_p.h b/src/quick/items/qquicktextdocument_p.h index 1218b12b89..9c5152d442 100644 --- a/src/quick/items/qquicktextdocument_p.h +++ b/src/quick/items/qquicktextdocument_p.h @@ -73,6 +73,9 @@ public: virtual ~QQuickTextDocumentWithImageResources(); void setText(const QString &); +#if QT_CONFIG(textmarkdownreader) + void setMarkdownText(const QString &); +#endif int resourcesLoading() const { return outstanding; } QSizeF intrinsicSize(QTextDocument *doc, int posInDocument, const QTextFormat &format) override; diff --git a/src/quick/items/qquicktextnodeengine.cpp b/src/quick/items/qquicktextnodeengine.cpp index a1b5eb1faf..32478ba375 100644 --- a/src/quick/items/qquicktextnodeengine.cpp +++ b/src/quick/items/qquicktextnodeengine.cpp @@ -1011,6 +1011,17 @@ void QQuickTextNodeEngine::addTextBlock(QTextDocument *textDocument, const QText break; }; + switch (block.blockFormat().marker()) { + case QTextBlockFormat::Checked: + listItemBullet = QChar(0x2612); // Checked checkbox + break; + case QTextBlockFormat::Unchecked: + listItemBullet = QChar(0x2610); // Unchecked checkbox + break; + case QTextBlockFormat::NoMarker: + break; + } + QSizeF size(fontMetrics.horizontalAdvance(listItemBullet), fontMetrics.height()); qreal xoff = fontMetrics.horizontalAdvance(QLatin1Char(' ')); if (block.textDirection() == Qt::LeftToRight) |