From b0d54b07752e9e51b02eba4cb6066f91e71c3069 Mon Sep 17 00:00:00 2001 From: Aaron Kennedy Date: Mon, 21 Dec 2009 12:01:35 +1000 Subject: Optimization: don't use QTextControl in Text element --- src/declarative/graphicsitems/qmlgraphicstext.cpp | 36 +++++++++------------- .../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 #include #include +#include #include -#include - 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; -- cgit v0.12