diff options
author | Liang Qi <liang.qi@theqtcompany.com> | 2015-11-03 13:27:13 +0100 |
---|---|---|
committer | Liang Qi <liang.qi@theqtcompany.com> | 2015-11-03 13:27:13 +0100 |
commit | f2244103ff7a9b61fc7bcb7e920d8cc6b2f5f226 (patch) | |
tree | 8fe753743c46d4a652f582a7a2a49e5709eaa6e0 /src/quick/items/qquicktext.cpp | |
parent | 57430b2bdad32150e0ed8ceb6893430363ee6670 (diff) | |
parent | 164af37710e5721cbc7d79a0af20f2387181c59c (diff) |
Merge remote-tracking branch 'origin/5.6' into dev
Conflicts:
tools/qmlprofiler/qmlprofilerclient.cpp
Change-Id: I1de8832fefd0e45fea16ca072b6c7ae44fa376d4
Diffstat (limited to 'src/quick/items/qquicktext.cpp')
-rw-r--r-- | src/quick/items/qquicktext.cpp | 148 |
1 files changed, 1 insertions, 147 deletions
diff --git a/src/quick/items/qquicktext.cpp b/src/quick/items/qquicktext.cpp index b89cfe8c04..d32b194803 100644 --- a/src/quick/items/qquicktext.cpp +++ b/src/quick/items/qquicktext.cpp @@ -40,6 +40,7 @@ #include "qquicktextnode_p.h" #include "qquickimage_p_p.h" #include "qquicktextutil_p.h" +#include "qquicktextdocument_p.h" #include <QtQuick/private/qsgtexture_p.h> @@ -117,153 +118,6 @@ void QQuickTextPrivate::init() q->setFlag(QQuickItem::ItemHasContents); } -QQuickTextDocumentWithImageResources::QQuickTextDocumentWithImageResources(QQuickItem *parent) -: QTextDocument(parent), outstanding(0) -{ - setUndoRedoEnabled(false); - documentLayout()->registerHandler(QTextFormat::ImageObject, this); - connect(this, SIGNAL(baseUrlChanged(QUrl)), this, SLOT(reset())); -} - -QQuickTextDocumentWithImageResources::~QQuickTextDocumentWithImageResources() -{ - if (!m_resources.isEmpty()) - qDeleteAll(m_resources); -} - -QVariant QQuickTextDocumentWithImageResources::loadResource(int type, const QUrl &name) -{ - QQmlContext *context = qmlContext(parent()); - - if (type == QTextDocument::ImageResource) { - QQuickPixmap *p = loadPixmap(context, name); - return p->image(); - } - - return QTextDocument::loadResource(type, name); -} - -void QQuickTextDocumentWithImageResources::requestFinished() -{ - outstanding--; - if (outstanding == 0) { - markContentsDirty(0, characterCount()); - emit imagesLoaded(); - } -} - -QSizeF QQuickTextDocumentWithImageResources::intrinsicSize( - QTextDocument *, int, const QTextFormat &format) -{ - if (format.isImageFormat()) { - QTextImageFormat imageFormat = format.toImageFormat(); - - const int width = qRound(imageFormat.width()); - const bool hasWidth = imageFormat.hasProperty(QTextFormat::ImageWidth) && width > 0; - const int height = qRound(imageFormat.height()); - const bool hasHeight = imageFormat.hasProperty(QTextFormat::ImageHeight) && height > 0; - - QSizeF size(width, height); - if (!hasWidth || !hasHeight) { - QQmlContext *context = qmlContext(parent()); - QUrl url = baseUrl().resolved(QUrl(imageFormat.name())); - - QQuickPixmap *p = loadPixmap(context, url); - if (!p->isReady()) { - if (!hasWidth) - size.setWidth(16); - if (!hasHeight) - size.setHeight(16); - return size; - } - QSize implicitSize = p->implicitSize(); - - if (!hasWidth) { - if (!hasHeight) - size.setWidth(implicitSize.width()); - else - size.setWidth(qRound(height * (implicitSize.width() / (qreal) implicitSize.height()))); - } - if (!hasHeight) { - if (!hasWidth) - size.setHeight(implicitSize.height()); - else - size.setHeight(qRound(width * (implicitSize.height() / (qreal) implicitSize.width()))); - } - } - return size; - } - return QSizeF(); -} - -void QQuickTextDocumentWithImageResources::drawObject( - QPainter *, const QRectF &, QTextDocument *, int, const QTextFormat &) -{ -} - -QImage QQuickTextDocumentWithImageResources::image(const QTextImageFormat &format) -{ - QQmlContext *context = qmlContext(parent()); - QUrl url = baseUrl().resolved(QUrl(format.name())); - - QQuickPixmap *p = loadPixmap(context, url); - return p->image(); -} - -void QQuickTextDocumentWithImageResources::reset() -{ - clearResources(); - markContentsDirty(0, characterCount()); -} - -QQuickPixmap *QQuickTextDocumentWithImageResources::loadPixmap( - QQmlContext *context, const QUrl &url) -{ - - QHash<QUrl, QQuickPixmap *>::Iterator iter = m_resources.find(url); - - if (iter == m_resources.end()) { - QQuickPixmap *p = new QQuickPixmap(context->engine(), url); - iter = m_resources.insert(url, p); - - if (p->isLoading()) { - p->connectFinished(this, SLOT(requestFinished())); - outstanding++; - } - } - - QQuickPixmap *p = *iter; - if (p->isError()) { - if (!errors.contains(url)) { - errors.insert(url); - qmlInfo(parent()) << p->error(); - } - } - return p; -} - -void QQuickTextDocumentWithImageResources::clearResources() -{ - foreach (QQuickPixmap *pixmap, m_resources) - pixmap->clear(this); - qDeleteAll(m_resources); - m_resources.clear(); - outstanding = 0; -} - -void QQuickTextDocumentWithImageResources::setText(const QString &text) -{ - clearResources(); - -#ifndef QT_NO_TEXTHTMLPARSER - setHtml(text); -#else - setPlainText(text); -#endif -} - -QSet<QUrl> QQuickTextDocumentWithImageResources::errors; - QQuickTextPrivate::~QQuickTextPrivate() { delete elideLayout; |