diff options
author | Liang Qi <liang.qi@theqtcompany.com> | 2015-06-08 13:59:09 +0200 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@theqtcompany.com> | 2015-06-15 09:31:01 +0000 |
commit | 2cb853c429db2fb5cdb54e9033ca48ee6e9c9478 (patch) | |
tree | 4de3993af82edb08d0939a6745f878bbdd1de06c /src/quick/items | |
parent | 9eb4b013f9ceea1d667ddc47ee58a55a4efa5070 (diff) |
QQuickTextInput: move paddings into extraData
Task-number: QTBUG-46529
Change-Id: Ifa072dccdf2dc8c52c6865d13ccf1930c92ec51d
Reviewed-by: Alan Alpert <aalpert@blackberry.com>
Diffstat (limited to 'src/quick/items')
-rw-r--r-- | src/quick/items/qquicktextinput.cpp | 84 | ||||
-rw-r--r-- | src/quick/items/qquicktextinput_p_p.h | 36 |
2 files changed, 70 insertions, 50 deletions
diff --git a/src/quick/items/qquicktextinput.cpp b/src/quick/items/qquicktextinput.cpp index 8a8d96dd76..cb5df32976 100644 --- a/src/quick/items/qquicktextinput.cpp +++ b/src/quick/items/qquicktextinput.cpp @@ -2492,6 +2492,19 @@ bool QQuickTextInput::isInputMethodComposing() const #endif } +QQuickTextInputPrivate::ExtraData::ExtraData() + : padding(0) + , topPadding(0) + , leftPadding(0) + , rightPadding(0) + , bottomPadding(0) + , explicitTopPadding(false) + , explicitLeftPadding(false) + , explicitRightPadding(false) + , explicitBottomPadding(false) +{ +} + void QQuickTextInputPrivate::init() { Q_Q(QQuickTextInput); @@ -2714,9 +2727,11 @@ void QQuickTextInputPrivate::setTopPadding(qreal value, bool reset) { Q_Q(QQuickTextInput); 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()))) { updateLayout(); emit q->topPaddingChanged(); } @@ -2726,9 +2741,11 @@ void QQuickTextInputPrivate::setLeftPadding(qreal value, bool reset) { Q_Q(QQuickTextInput); qreal oldPadding = q->leftPadding(); - leftPadding = value; - explicitLeftPadding = !reset; - if ((!reset && !qFuzzyCompare(oldPadding, value)) || (reset && !qFuzzyCompare(oldPadding, padding))) { + if (!reset || extra.isAllocated()) { + extra.value().leftPadding = value; + extra.value().explicitLeftPadding = !reset; + } + if ((!reset && !qFuzzyCompare(oldPadding, value)) || (reset && !qFuzzyCompare(oldPadding, padding()))) { updateLayout(); emit q->leftPaddingChanged(); } @@ -2738,9 +2755,11 @@ void QQuickTextInputPrivate::setRightPadding(qreal value, bool reset) { Q_Q(QQuickTextInput); qreal oldPadding = q->rightPadding(); - rightPadding = value; - explicitRightPadding = !reset; - if ((!reset && !qFuzzyCompare(oldPadding, value)) || (reset && !qFuzzyCompare(oldPadding, padding))) { + if (!reset || extra.isAllocated()) { + extra.value().rightPadding = value; + extra.value().explicitRightPadding = !reset; + } + if ((!reset && !qFuzzyCompare(oldPadding, value)) || (reset && !qFuzzyCompare(oldPadding, padding()))) { updateLayout(); emit q->rightPaddingChanged(); } @@ -2750,9 +2769,11 @@ void QQuickTextInputPrivate::setBottomPadding(qreal value, bool reset) { Q_Q(QQuickTextInput); qreal oldPadding = q->bottomPadding(); - bottomPadding = value; - explicitBottomPadding = !reset; - if ((!reset && !qFuzzyCompare(oldPadding, value)) || (reset && !qFuzzyCompare(oldPadding, padding))) { + if (!reset || extra.isAllocated()) { + extra.value().bottomPadding = value; + extra.value().explicitBottomPadding = !reset; + } + if ((!reset && !qFuzzyCompare(oldPadding, value)) || (reset && !qFuzzyCompare(oldPadding, padding()))) { updateLayout(); emit q->bottomPaddingChanged(); } @@ -4405,24 +4426,25 @@ void QQuickTextInput::ensureVisible(int position) qreal QQuickTextInput::padding() const { Q_D(const QQuickTextInput); - return d->padding; + return d->padding(); } void QQuickTextInput::setPadding(qreal padding) { Q_D(QQuickTextInput); - if (qFuzzyCompare(d->padding, padding)) + if (qFuzzyCompare(d->padding(), padding)) return; - d->padding = padding; + + d->extra.value().padding = padding; d->updateLayout(); 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(); } @@ -4434,9 +4456,9 @@ void QQuickTextInput::resetPadding() qreal QQuickTextInput::topPadding() const { Q_D(const QQuickTextInput); - if (d->explicitTopPadding) - return d->topPadding; - return d->padding; + if (d->extra.isAllocated() && d->extra->explicitTopPadding) + return d->extra->topPadding; + return d->padding(); } void QQuickTextInput::setTopPadding(qreal padding) @@ -4454,9 +4476,9 @@ void QQuickTextInput::resetTopPadding() qreal QQuickTextInput::leftPadding() const { Q_D(const QQuickTextInput); - if (d->explicitLeftPadding) - return d->leftPadding; - return d->padding; + if (d->extra.isAllocated() && d->extra->explicitLeftPadding) + return d->extra->leftPadding; + return d->padding(); } void QQuickTextInput::setLeftPadding(qreal padding) @@ -4474,9 +4496,9 @@ void QQuickTextInput::resetLeftPadding() qreal QQuickTextInput::rightPadding() const { Q_D(const QQuickTextInput); - if (d->explicitRightPadding) - return d->rightPadding; - return d->padding; + if (d->extra.isAllocated() && d->extra->explicitRightPadding) + return d->extra->rightPadding; + return d->padding(); } void QQuickTextInput::setRightPadding(qreal padding) @@ -4494,9 +4516,9 @@ void QQuickTextInput::resetRightPadding() qreal QQuickTextInput::bottomPadding() const { Q_D(const QQuickTextInput); - if (d->explicitBottomPadding) - return d->bottomPadding; - return d->padding; + if (d->extra.isAllocated() && d->extra->explicitBottomPadding) + return d->extra->bottomPadding; + return d->padding(); } void QQuickTextInput::setBottomPadding(qreal padding) diff --git a/src/quick/items/qquicktextinput_p_p.h b/src/quick/items/qquicktextinput_p_p.h index 25ee2e79ce..387eb2934c 100644 --- a/src/quick/items/qquicktextinput_p_p.h +++ b/src/quick/items/qquicktextinput_p_p.h @@ -47,6 +47,7 @@ #include <QtGui/qpalette.h> #include <QtGui/qtextlayout.h> #include <QtGui/qstylehints.h> +#include <private/qlazilyallocated_p.h> #include "qplatformdefs.h" @@ -71,18 +72,24 @@ public: typedef QQuickTextInput Public; + 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; + QQuickTextInputPrivate() : hscroll(0) , vscroll(0) - , padding(0) - , topPadding(0) - , leftPadding(0) - , rightPadding(0) - , bottomPadding(0) - , explicitTopPadding(false) - , explicitLeftPadding(false) - , explicitRightPadding(false) - , explicitBottomPadding(false) , cursorItem(0) , textNode(0) , m_maskData(0) @@ -198,16 +205,6 @@ public: qreal hscroll; qreal vscroll; - qreal padding; - qreal topPadding; - qreal leftPadding; - qreal rightPadding; - qreal bottomPadding; - bool explicitTopPadding; - bool explicitLeftPadding; - bool explicitRightPadding; - bool explicitBottomPadding; - QTextLayout m_textLayout; QString m_text; QString m_inputMask; @@ -439,6 +436,7 @@ public: qreal getImplicitWidth() const Q_DECL_OVERRIDE; + 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); |