extern Q_GUI_EXPORT bool qt_applefontsmoothing_enabled;
-class QQuickTextDocumentWithImageResources : public QTextDocument {
- Q_OBJECT
-
-public:
- QQuickTextDocumentWithImageResources(QQuickText *parent);
- virtual ~QQuickTextDocumentWithImageResources();
-
- void setText(const QString &);
- int resourcesLoading() const { return outstanding; }
-
-protected:
- QVariant loadResource(int type, const QUrl &name);
-
-private slots:
- void requestFinished();
-
-private:
- QHash<QUrl, QDeclarativePixmap *> m_resources;
-
- int outstanding;
- static QSet<QUrl> errors;
-};
-
DEFINE_BOOL_CONFIG_OPTION(qmlDisableDistanceField, QML_DISABLE_DISTANCEFIELD)
DEFINE_BOOL_CONFIG_OPTION(enableImageCache, QML_ENABLE_TEXT_IMAGE_CACHE);
q->setFlag(QQuickItem::ItemHasContents);
}
-QQuickTextDocumentWithImageResources::QQuickTextDocumentWithImageResources(QQuickText *parent)
+QQuickTextDocumentWithImageResources::QQuickTextDocumentWithImageResources(QQuickItem *parent)
: QTextDocument(parent), outstanding(0)
{
setUndoRedoEnabled(false);
{
outstanding--;
if (outstanding == 0) {
- QQuickText *textItem = static_cast<QQuickText*>(parent());
- QString text = textItem->text();
-#ifndef QT_NO_TEXTHTMLPARSER
- setHtml(text);
-#else
- setPlainText(text);
-#endif
- QQuickTextPrivate *d = QQuickTextPrivate::get(textItem);
- d->updateLayout();
+ markContentsDirty(0, characterCount());
+
+ if (QQuickText *item = qobject_cast<QQuickText *>(parent()))
+ QQuickTextPrivate::get(item)->updateLayout();
}
}
+void QQuickTextDocumentWithImageResources::clear()
+{
+ clearResources();
+
+ QTextDocument::clear();
+}
+
+void QQuickTextDocumentWithImageResources::clearResources()
+{
+ foreach (QDeclarativePixmap *pixmap, m_resources)
+ pixmap->clear(this);
+ qDeleteAll(m_resources);
+ m_resources.clear();
+ outstanding = 0;
+}
+
void QQuickTextDocumentWithImageResources::setText(const QString &text)
{
- if (!m_resources.isEmpty()) {
- qDeleteAll(m_resources);
- m_resources.clear();
- outstanding = 0;
- }
+ clearResources();
#ifndef QT_NO_TEXTHTMLPARSER
setHtml(text);
}
QT_END_NAMESPACE
-
-#include "qquicktext.moc"
// We mean it.
//
-#include "qquickitem.h"
+#include "qquicktext_p.h"
#include "qquickimplicitsizeitem_p_p.h"
#include <QtDeclarative/qdeclarative.h>
#endif
};
+class QDeclarativePixmap;
+class QQuickTextDocumentWithImageResources : public QTextDocument {
+ Q_OBJECT
+
+public:
+ QQuickTextDocumentWithImageResources(QQuickItem *parent);
+ virtual ~QQuickTextDocumentWithImageResources();
+
+ void setText(const QString &);
+ int resourcesLoading() const { return outstanding; }
+
+ void clearResources();
+
+ void clear();
+
+protected:
+ QVariant loadResource(int type, const QUrl &name);
+
+private slots:
+ void requestFinished();
+
+private:
+ QHash<QUrl, QDeclarativePixmap *> m_resources;
+
+ int outstanding;
+ static QSet<QUrl> errors;
+};
+
QT_END_NAMESPACE
#endif // QQUICKTEXT_P_P_H
#include "qquicktextedit_p.h"
#include "qquicktextedit_p_p.h"
+#include "qquicktext_p_p.h"
#include "qquickevents_p_p.h"
#include "qquickcanvas.h"
#include "qquicktextnode_p.h"
if (QQuickTextEdit::text() == text)
return;
+ d->document->clearResources();
d->richText = d->format == RichText || (d->format == AutoText && Qt::mightBeRichText(text));
if (d->richText) {
#ifndef QT_NO_TEXTHTMLPARSER
q->setFlag(QQuickItem::ItemAcceptsInputMethod);
q->setFlag(QQuickItem::ItemHasContents);
- control = new QTextControl(q);
+ document = new QQuickTextDocumentWithImageResources(q);
+
+ control = new QTextControl(document, q);
control->setIgnoreUnusedNavigationEvents(true);
control->setTextInteractionFlags(Qt::LinksAccessibleByMouse | Qt::TextSelectableByKeyboard | Qt::TextEditable);
control->setDragEnabled(false);
canPaste = control->canPaste();
#endif
- document = control->document();
document->setDefaultFont(font);
document->setDocumentMargin(textMargin);
document->setUndoRedoEnabled(false); // flush undo buffer.
QT_BEGIN_NAMESPACE
class QTextLayout;
-class QTextDocument;
+class QQuickTextDocumentWithImageResources;
class QTextControl;
class QQuickTextEditPrivate : public QQuickImplicitSizeItemPrivate
{
QDeclarativeComponent* cursorComponent;
QQuickItem* cursor;
QQuickTextEdit::TextFormat format;
- QTextDocument *document;
+ QQuickTextDocumentWithImageResources *document;
QTextControl *control;
QQuickTextEdit::WrapMode wrapMode;
QQuickTextEdit::SelectionMode mouseSelectionMode;