diff options
-rw-r--r-- | src/quick/items/qquicktextedit.cpp | 98 | ||||
-rw-r--r-- | src/quick/items/qquicktextedit_p_p.h | 29 |
2 files changed, 74 insertions, 53 deletions
diff --git a/src/quick/items/qquicktextedit.cpp b/src/quick/items/qquicktextedit.cpp index 6f4b26266d..44d0a7b0bf 100644 --- a/src/quick/items/qquicktextedit.cpp +++ b/src/quick/items/qquicktextedit.cpp @@ -703,9 +703,11 @@ void QQuickTextEditPrivate::setTopPadding(qreal value, bool reset) { Q_Q(QQuickTextEdit); qreal oldPadding = q->topPadding(); - topPadding = value; - explicitTopPadding = !reset; - if ((!reset && !qFuzzyCompare(oldPadding, value)) || (reset && !qFuzzyCompare(oldPadding, padding))) { + if (!reset || extra.isAllocated()) { + extra.value().topPadding = value; + extra.value().explicitTopPadding = !reset; + } + if ((!reset && !qFuzzyCompare(oldPadding, value)) || (reset && !qFuzzyCompare(oldPadding, padding()))) { q->updateSize(); emit q->topPaddingChanged(); } @@ -714,42 +716,40 @@ void QQuickTextEditPrivate::setTopPadding(qreal value, bool reset) void QQuickTextEditPrivate::setLeftPadding(qreal value, bool reset) { Q_Q(QQuickTextEdit); - qreal oldPadding = q->topPadding(); - leftPadding = value; - explicitLeftPadding = !reset; - if ((!reset && !qFuzzyCompare(oldPadding, value)) || (reset && !qFuzzyCompare(oldPadding, padding))) { + qreal oldPadding = q->leftPadding(); + if (!reset || extra.isAllocated()) { + extra.value().leftPadding = value; + extra.value().explicitLeftPadding = !reset; + } + if ((!reset && !qFuzzyCompare(oldPadding, value)) || (reset && !qFuzzyCompare(oldPadding, padding()))) { q->updateSize(); emit q->leftPaddingChanged(); - if (q->isComponentComplete()) { - updateType = QQuickTextEditPrivate::UpdatePaintNode; - q->update(); - } } } void QQuickTextEditPrivate::setRightPadding(qreal value, bool reset) { Q_Q(QQuickTextEdit); - qreal oldPadding = q->topPadding(); - rightPadding = value; - explicitRightPadding = !reset; - if ((!reset && !qFuzzyCompare(oldPadding, value)) || (reset && !qFuzzyCompare(oldPadding, padding))) { + qreal oldPadding = q->rightPadding(); + if (!reset || extra.isAllocated()) { + extra.value().rightPadding = value; + extra.value().explicitRightPadding = !reset; + } + if ((!reset && !qFuzzyCompare(oldPadding, value)) || (reset && !qFuzzyCompare(oldPadding, padding()))) { q->updateSize(); emit q->rightPaddingChanged(); - if (q->isComponentComplete()) { - updateType = QQuickTextEditPrivate::UpdatePaintNode; - q->update(); - } } } void QQuickTextEditPrivate::setBottomPadding(qreal value, bool reset) { Q_Q(QQuickTextEdit); - qreal oldPadding = q->topPadding(); - bottomPadding = value; - explicitBottomPadding = !reset; - if ((!reset && !qFuzzyCompare(oldPadding, value)) || (reset && !qFuzzyCompare(oldPadding, padding))) { + qreal oldPadding = q->bottomPadding(); + if (!reset || extra.isAllocated()) { + extra.value().bottomPadding = value; + extra.value().explicitBottomPadding = !reset; + } + if ((!reset && !qFuzzyCompare(oldPadding, value)) || (reset && !qFuzzyCompare(oldPadding, padding()))) { q->updateSize(); emit q->bottomPaddingChanged(); } @@ -2094,6 +2094,19 @@ bool QQuickTextEdit::isInputMethodComposing() const #endif // QT_NO_IM } +QQuickTextEditPrivate::ExtraData::ExtraData() + : padding(0) + , topPadding(0) + , leftPadding(0) + , rightPadding(0) + , bottomPadding(0) + , explicitTopPadding(false) + , explicitLeftPadding(false) + , explicitRightPadding(false) + , explicitBottomPadding(false) +{ +} + void QQuickTextEditPrivate::init() { Q_Q(QQuickTextEdit); @@ -2786,28 +2799,29 @@ QString QQuickTextEdit::linkAt(qreal x, qreal y) const qreal QQuickTextEdit::padding() const { Q_D(const QQuickTextEdit); - return d->padding; + return d->padding(); } void QQuickTextEdit::setPadding(qreal padding) { Q_D(QQuickTextEdit); - if (qFuzzyCompare(d->padding, padding)) + if (qFuzzyCompare(d->padding(), padding)) return; - d->padding = padding; + + d->extra.value().padding = padding; updateSize(); if (isComponentComplete()) { d->updateType = QQuickTextEditPrivate::UpdatePaintNode; update(); } emit paddingChanged(); - if (!d->explicitTopPadding) + if (!d->extra.isAllocated() || !d->extra->explicitTopPadding) emit topPaddingChanged(); - if (!d->explicitLeftPadding) + if (!d->extra.isAllocated() || !d->extra->explicitLeftPadding) emit leftPaddingChanged(); - if (!d->explicitRightPadding) + if (!d->extra.isAllocated() || !d->extra->explicitRightPadding) emit rightPaddingChanged(); - if (!d->explicitBottomPadding) + if (!d->extra.isAllocated() || !d->extra->explicitBottomPadding) emit bottomPaddingChanged(); } @@ -2819,9 +2833,9 @@ void QQuickTextEdit::resetPadding() qreal QQuickTextEdit::topPadding() const { Q_D(const QQuickTextEdit); - if (d->explicitTopPadding) - return d->topPadding; - return d->padding; + if (d->extra.isAllocated() && d->extra->explicitTopPadding) + return d->extra->topPadding; + return d->padding(); } void QQuickTextEdit::setTopPadding(qreal padding) @@ -2839,9 +2853,9 @@ void QQuickTextEdit::resetTopPadding() qreal QQuickTextEdit::leftPadding() const { Q_D(const QQuickTextEdit); - if (d->explicitLeftPadding) - return d->leftPadding; - return d->padding; + if (d->extra.isAllocated() && d->extra->explicitLeftPadding) + return d->extra->leftPadding; + return d->padding(); } void QQuickTextEdit::setLeftPadding(qreal padding) @@ -2859,9 +2873,9 @@ void QQuickTextEdit::resetLeftPadding() qreal QQuickTextEdit::rightPadding() const { Q_D(const QQuickTextEdit); - if (d->explicitRightPadding) - return d->rightPadding; - return d->padding; + if (d->extra.isAllocated() && d->extra->explicitRightPadding) + return d->extra->rightPadding; + return d->padding(); } void QQuickTextEdit::setRightPadding(qreal padding) @@ -2879,9 +2893,9 @@ void QQuickTextEdit::resetRightPadding() qreal QQuickTextEdit::bottomPadding() const { Q_D(const QQuickTextEdit); - if (d->explicitBottomPadding) - return d->bottomPadding; - return d->padding; + if (d->extra.isAllocated() && d->extra->explicitBottomPadding) + return d->extra->bottomPadding; + return d->padding(); } void QQuickTextEdit::setBottomPadding(qreal padding) diff --git a/src/quick/items/qquicktextedit_p_p.h b/src/quick/items/qquicktextedit_p_p.h index a6e6faeaa1..5e030479c3 100644 --- a/src/quick/items/qquicktextedit_p_p.h +++ b/src/quick/items/qquicktextedit_p_p.h @@ -51,6 +51,7 @@ #include <QtQml/qqml.h> #include <QtCore/qlist.h> +#include <private/qlazilyallocated_p.h> QT_BEGIN_NAMESPACE class QTextLayout; @@ -82,11 +83,25 @@ public: }; typedef QList<Node*>::iterator TextNodeIterator; + struct ExtraData { + ExtraData(); + + qreal padding; + qreal topPadding; + qreal leftPadding; + qreal rightPadding; + qreal bottomPadding; + bool explicitTopPadding : 1; + bool explicitLeftPadding : 1; + bool explicitRightPadding : 1; + bool explicitBottomPadding : 1; + }; + QLazilyAllocated<ExtraData> extra; + QQuickTextEditPrivate() : color(QRgb(0xFF000000)), selectionColor(QRgb(0xFF000080)), selectedTextColor(QRgb(0xFFFFFFFF)) - , textMargin(0.0), xoff(0), yoff(0), padding(0), topPadding(0), leftPadding(0), rightPadding(0), bottomPadding(0) - , explicitTopPadding(false), explicitLeftPadding(false), explicitRightPadding(false), explicitBottomPadding(false) + , textMargin(0.0), xoff(0), yoff(0) , font(sourceFont), cursorComponent(0), cursorItem(0), document(0), control(0) , quickDocument(0), lastSelectionStart(0), lastSelectionEnd(0), lineCount(0) , hAlign(QQuickTextEdit::AlignLeft), vAlign(QQuickTextEdit::AlignTop) @@ -134,6 +149,7 @@ public: Qt::InputMethodHints effectiveInputMethodHints() const; #endif + inline qreal padding() const { return extra.isAllocated() ? extra->padding : 0.0; } void setTopPadding(qreal value, bool reset = false); void setLeftPadding(qreal value, bool reset = false); void setRightPadding(qreal value, bool reset = false); @@ -148,15 +164,6 @@ public: qreal textMargin; qreal xoff; qreal yoff; - qreal padding; - qreal topPadding; - qreal leftPadding; - qreal rightPadding; - qreal bottomPadding; - bool explicitTopPadding; - bool explicitLeftPadding; - bool explicitRightPadding; - bool explicitBottomPadding; QString text; QUrl baseUrl; |