diff options
author | Aaron Kennedy <aaron.kennedy@nokia.com> | 2009-12-21 02:01:35 (GMT) |
---|---|---|
committer | Aaron Kennedy <aaron.kennedy@nokia.com> | 2009-12-21 02:01:35 (GMT) |
commit | b0d54b07752e9e51b02eba4cb6066f91e71c3069 (patch) | |
tree | 7f36deb4076d3536b59ee3ae4718b1884c0703c4 /src/declarative | |
parent | 88e759680246f64bd7d1a7636099ac0565506453 (diff) | |
download | Qt-b0d54b07752e9e51b02eba4cb6066f91e71c3069.zip Qt-b0d54b07752e9e51b02eba4cb6066f91e71c3069.tar.gz Qt-b0d54b07752e9e51b02eba4cb6066f91e71c3069.tar.bz2 |
Optimization: don't use QTextControl in Text element
Diffstat (limited to 'src/declarative')
-rw-r--r-- | src/declarative/graphicsitems/qmlgraphicstext.cpp | 36 | ||||
-rw-r--r-- | src/declarative/graphicsitems/qmlgraphicstext_p_p.h | 4 |
2 files changed, 15 insertions, 25 deletions
diff --git a/src/declarative/graphicsitems/qmlgraphicstext.cpp b/src/declarative/graphicsitems/qmlgraphicstext.cpp index 52d68fd..459541e 100644 --- a/src/declarative/graphicsitems/qmlgraphicstext.cpp +++ b/src/declarative/graphicsitems/qmlgraphicstext.cpp @@ -50,10 +50,9 @@ #include <QTextCursor> #include <QGraphicsSceneMouseEvent> #include <QPainter> +#include <QAbstractTextDocumentLayout> #include <qmath.h> -#include <private/qtextcontrol_p.h> - QT_BEGIN_NAMESPACE QML_DEFINE_TYPE(Qt,4,6,Text,QmlGraphicsText) @@ -159,11 +158,8 @@ void QmlGraphicsText::setText(const QString &n) d->richText = d->format == RichText || (d->format == AutoText && Qt::mightBeRichText(n)); if (d->richText) { - if (!d->doc) - { - d->control = new QTextControl(this); - d->control->setTextInteractionFlags(Qt::TextBrowserInteraction); - d->doc = d->control->document(); + if (!d->doc) { + d->doc = new QTextDocument(this); d->doc->setDocumentMargin(0); } d->doc->setHtml(n); @@ -399,11 +395,8 @@ void QmlGraphicsText::setTextFormat(TextFormat format) d->updateSize(); d->markImgDirty(); } else if (!wasRich && d->richText) { - if (!d->doc) - { - d->control = new QTextControl(this); - d->control->setTextInteractionFlags(Qt::TextBrowserInteraction); - d->doc = d->control->document(); + if (!d->doc) { + d->doc = new QTextDocument(this); d->doc->setDocumentMargin(0); } d->doc->setHtml(d->text); @@ -643,19 +636,18 @@ QPixmap QmlGraphicsTextPrivate::richTextImage(bool drawStyle) img.fill(Qt::transparent); QPainter p(&img); + QAbstractTextDocumentLayout::PaintContext context; + if (drawStyle) { - QPalette pal = control->palette(); - pal.setColor(QPalette::Text, styleColor); - control->setPalette(pal); + context.palette.setColor(QPalette::Text, styleColor); + // ### Do we really want this? QTextOption colorOption; colorOption.setFlags(QTextOption::SuppressColors); doc->setDefaultTextOption(colorOption); } else { - QPalette pal = control->palette(); - pal.setColor(QPalette::Text, color); - control->setPalette(pal); + context.palette.setColor(QPalette::Text, color); } - control->drawContents(&p, QRectF(QPointF(0, 0), QSizeF(size))); + doc->documentLayout()->draw(&p, context); if (drawStyle) doc->setDefaultTextOption(QTextOption()); return img; @@ -790,11 +782,11 @@ void QmlGraphicsText::mousePressEvent(QGraphicsSceneMouseEvent *event) { Q_D(QmlGraphicsText); - if (!d->richText || !d->doc || d->control->anchorAt(event->pos()).isEmpty()) { + if (!d->richText || !d->doc || d->doc->documentLayout()->anchorAt(event->pos()).isEmpty()) { event->setAccepted(false); d->activeLink = QString(); } else { - d->activeLink = d->control->anchorAt(event->pos()); + d->activeLink = d->doc->documentLayout()->anchorAt(event->pos()); } // ### may malfunction if two of the same links are clicked & dragged onto each other) @@ -819,7 +811,7 @@ void QmlGraphicsText::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) Q_D(QmlGraphicsText); // ### confirm the link, and send a signal out - if (d->richText && d->doc && d->activeLink == d->control->anchorAt(event->pos())) + if (d->richText && d->doc && d->activeLink == d->doc->documentLayout()->anchorAt(event->pos())) emit linkActivated(d->activeLink); else event->setAccepted(false); diff --git a/src/declarative/graphicsitems/qmlgraphicstext_p_p.h b/src/declarative/graphicsitems/qmlgraphicstext_p_p.h index 7e77c69..79d1a4f 100644 --- a/src/declarative/graphicsitems/qmlgraphicstext_p_p.h +++ b/src/declarative/graphicsitems/qmlgraphicstext_p_p.h @@ -64,7 +64,6 @@ QT_BEGIN_NAMESPACE class QTextLayout; class QTextDocument; -class QTextControl; class QmlGraphicsTextPrivate : public QmlGraphicsItemPrivate { @@ -73,7 +72,7 @@ public: QmlGraphicsTextPrivate() : color((QRgb)0), style(QmlGraphicsText::Normal), imgDirty(true), hAlign(QmlGraphicsText::AlignLeft), vAlign(QmlGraphicsText::AlignTop), elideMode(QmlGraphicsText::ElideNone), - dirty(true), wrap(false), richText(false), singleline(false), control(0), doc(0), + dirty(true), wrap(false), richText(false), singleline(false), doc(0), format(QmlGraphicsText::AutoText) { } @@ -112,7 +111,6 @@ public: bool wrap:1; bool richText:1; bool singleline:1; - QTextControl *control; QTextDocument *doc; QTextLayout layout; QSize cachedLayoutSize; |