diff options
author | J-P Nurmi <jpnurmi@theqtcompany.com> | 2015-10-28 13:21:57 +0100 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@theqtcompany.com> | 2015-10-29 04:46:57 +0000 |
commit | 983c206a70ab6a853c8721a6af46fcebca320a90 (patch) | |
tree | df92321e16732f34c9ad3cf3e2624641f45a0740 /src/quick/items/qquicktext.cpp | |
parent | 704af0bb6548057e469eec77bdc53a3378093787 (diff) |
Move QQuickTextDocumentWithImageResources out of qquicktext_p_p.h
QQuickTextDocumentWithImageResources was autotest-exported in b63185.
The problem is that the QQuickLabel in qtquickcontrols2 inherits
QQuickText, and therefore includes the private header. An autotest-
exported class with Q_OBJECT macro leads to a linking error:
qquickcontrol.obj : error LNK2019: unresolved external symbol "public: static struct TestNamespace::QMetaObject const TestNamespace::QQuickTextDocumentWithImageResources::staticMetaObject" (?staticMetaObject@QQuickTextDocumentWithImageResources@TestNamespace@@2UQMetaObject@2@B) referenced in function "public: static class TestNamespace::QString __cdecl TestNamespace::QQuickTextDocumentWithImageResources::tr(char const *,char const *,int)" (?tr@QQuickTextDocumentWithImageResources@TestNamespace@@SA?AVQString@2@PBD0H@Z)
qquicklabel.obj : error LNK2001: unresolved external symbol "public: static struct TestNamespace::QMetaObject const TestNamespace::QQuickTextDocumentWithImageResources::staticMetaObject" (?staticMetaObject@QQuickTextDocumentWithImageResources@TestNamespace@@2UQMetaObject@2@B)
..\..\lib\Qt5LabsTemplatesTestInfix.dll : fatal error LNK1120: 1 unresolved externals
Change-Id: I7e8731973c4ad67fca40f87bf009dc55336c3d6f
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
Diffstat (limited to 'src/quick/items/qquicktext.cpp')
-rw-r--r-- | src/quick/items/qquicktext.cpp | 144 |
1 files changed, 1 insertions, 143 deletions
diff --git a/src/quick/items/qquicktext.cpp b/src/quick/items/qquicktext.cpp index 3b5982c3d0..223219a3f9 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> @@ -113,149 +114,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) -{ - QVariant resource = QTextDocument::loadResource(type, name); - if (resource.isNull() && type == QTextDocument::ImageResource) { - QQmlContext *context = qmlContext(parent()); - QUrl url = baseUrl().resolved(name); - QQuickPixmap *p = loadPixmap(context, url); - resource = p->image(); - } - - return resource; -} - -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) { - QVariant res = resource(QTextDocument::ImageResource, QUrl(imageFormat.name())); - QImage image = res.value<QImage>(); - if (image.isNull()) { - if (!hasWidth) - size.setWidth(16); - if (!hasHeight) - size.setHeight(16); - return size; - } - QSize imgSize = image.size(); - - if (!hasWidth) { - if (!hasHeight) - size.setWidth(imgSize.width()); - else - size.setWidth(qRound(height * (imgSize.width() / (qreal) imgSize.height()))); - } - if (!hasHeight) { - if (!hasWidth) - size.setHeight(imgSize.height()); - else - size.setHeight(qRound(width * (imgSize.height() / (qreal) imgSize.width()))); - } - } - return size; - } - return QSizeF(); -} - -void QQuickTextDocumentWithImageResources::drawObject( - QPainter *, const QRectF &, QTextDocument *, int, const QTextFormat &) -{ -} - -QImage QQuickTextDocumentWithImageResources::image(const QTextImageFormat &format) -{ - QVariant res = resource(QTextDocument::ImageResource, QUrl(format.name())); - return res.value<QImage>(); -} - -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; |