aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@theqtcompany.com>2015-06-09 11:02:12 +0200
committerSimon Hausmann <simon.hausmann@theqtcompany.com>2015-06-15 09:31:06 +0000
commitd845227aca013f9d3c0d63a394a5c27733f6d019 (patch)
tree7de60a41546af764d950891ee67ffb918b3aa476 /src
parent5b73877777b697c56d8a5f196aa256f67212e4f2 (diff)
QQuickPositioner: move paddings into extraData
Includes Column, Row, Grid and Flow. Task-number: QTBUG-46529 Change-Id: Ib49e4fa08d95a94b3eca9fc20865acb9281aaad1 Reviewed-by: Alan Alpert <aalpert@blackberry.com>
Diffstat (limited to 'src')
-rw-r--r--src/quick/items/qquickpositioners.cpp93
-rw-r--r--src/quick/items/qquickpositioners_p_p.h36
2 files changed, 74 insertions, 55 deletions
diff --git a/src/quick/items/qquickpositioners.cpp b/src/quick/items/qquickpositioners.cpp
index c2eb7a9ac3..de2596b679 100644
--- a/src/quick/items/qquickpositioners.cpp
+++ b/src/quick/items/qquickpositioners.cpp
@@ -128,7 +128,6 @@ void QQuickBasePositioner::PositionedItem::updatePadding(qreal lp, qreal tp, qre
bottomPadding = bp;
}
-
QQuickBasePositioner::QQuickBasePositioner(PositionerType at, QQuickItem *parent)
: QQuickImplicitSizeItem(*(new QQuickBasePositionerPrivate), parent)
{
@@ -515,24 +514,25 @@ void QQuickBasePositioner::updateAttachedProperties(QQuickPositionerAttached *sp
qreal QQuickBasePositioner::padding() const
{
Q_D(const QQuickBasePositioner);
- return d->padding;
+ return d->padding();
}
void QQuickBasePositioner::setPadding(qreal padding)
{
Q_D(QQuickBasePositioner);
- if (qFuzzyCompare(d->padding, padding))
+ if (qFuzzyCompare(d->padding(), padding))
return;
- d->padding = padding;
+
+ d->extra.value().padding = padding;
d->setPositioningDirty();
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();
}
@@ -544,9 +544,9 @@ void QQuickBasePositioner::resetPadding()
qreal QQuickBasePositioner::topPadding() const
{
Q_D(const QQuickBasePositioner);
- if (d->explicitTopPadding)
- return d->topPadding;
- return d->padding;
+ if (d->extra.isAllocated() && d->extra->explicitTopPadding)
+ return d->extra->topPadding;
+ return d->padding();
}
void QQuickBasePositioner::setTopPadding(qreal padding)
@@ -564,9 +564,9 @@ void QQuickBasePositioner::resetTopPadding()
qreal QQuickBasePositioner::leftPadding() const
{
Q_D(const QQuickBasePositioner);
- if (d->explicitLeftPadding)
- return d->leftPadding;
- return d->padding;
+ if (d->extra.isAllocated() && d->extra->explicitLeftPadding)
+ return d->extra->leftPadding;
+ return d->padding();
}
void QQuickBasePositioner::setLeftPadding(qreal padding)
@@ -584,9 +584,9 @@ void QQuickBasePositioner::resetLeftPadding()
qreal QQuickBasePositioner::rightPadding() const
{
Q_D(const QQuickBasePositioner);
- if (d->explicitRightPadding)
- return d->rightPadding;
- return d->padding;
+ if (d->extra.isAllocated() && d->extra->explicitRightPadding)
+ return d->extra->rightPadding;
+ return d->padding();
}
void QQuickBasePositioner::setRightPadding(qreal padding)
@@ -604,9 +604,9 @@ void QQuickBasePositioner::resetRightPadding()
qreal QQuickBasePositioner::bottomPadding() const
{
Q_D(const QQuickBasePositioner);
- if (d->explicitBottomPadding)
- return d->bottomPadding;
- return d->padding;
+ if (d->extra.isAllocated() && d->extra->explicitBottomPadding)
+ return d->extra->bottomPadding;
+ return d->padding();
}
void QQuickBasePositioner::setBottomPadding(qreal padding)
@@ -621,13 +621,28 @@ void QQuickBasePositioner::resetBottomPadding()
d->setBottomPadding(0, true);
}
+QQuickBasePositionerPrivate::ExtraData::ExtraData()
+ : padding(0)
+ , topPadding(0)
+ , leftPadding(0)
+ , rightPadding(0)
+ , bottomPadding(0)
+ , explicitTopPadding(false)
+ , explicitLeftPadding(false)
+ , explicitRightPadding(false)
+ , explicitBottomPadding(false)
+{
+}
+
void QQuickBasePositionerPrivate::setTopPadding(qreal value, bool reset)
{
Q_Q(QQuickBasePositioner);
- qreal tmp = q->topPadding();
- topPadding = value;
- explicitTopPadding = !reset;
- if ((!reset && !qFuzzyCompare(tmp, value)) || (reset && !qFuzzyCompare(tmp, padding))) {
+ qreal oldPadding = q->topPadding();
+ if (!reset || extra.isAllocated()) {
+ extra.value().topPadding = value;
+ extra.value().explicitTopPadding = !reset;
+ }
+ if ((!reset && !qFuzzyCompare(oldPadding, value)) || (reset && !qFuzzyCompare(oldPadding, padding()))) {
setPositioningDirty();
emit q->topPaddingChanged();
}
@@ -636,10 +651,12 @@ void QQuickBasePositionerPrivate::setTopPadding(qreal value, bool reset)
void QQuickBasePositionerPrivate::setLeftPadding(qreal value, bool reset)
{
Q_Q(QQuickBasePositioner);
- qreal tmp = q->leftPadding();
- leftPadding = value;
- explicitLeftPadding = !reset;
- if ((!reset && !qFuzzyCompare(tmp, value)) || (reset && !qFuzzyCompare(tmp, 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()))) {
setPositioningDirty();
emit q->leftPaddingChanged();
}
@@ -648,10 +665,12 @@ void QQuickBasePositionerPrivate::setLeftPadding(qreal value, bool reset)
void QQuickBasePositionerPrivate::setRightPadding(qreal value, bool reset)
{
Q_Q(QQuickBasePositioner);
- qreal tmp = q->rightPadding();
- rightPadding = value;
- explicitRightPadding = !reset;
- if ((!reset && !qFuzzyCompare(tmp, value)) || (reset && !qFuzzyCompare(tmp, 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()))) {
setPositioningDirty();
emit q->rightPaddingChanged();
}
@@ -660,10 +679,12 @@ void QQuickBasePositionerPrivate::setRightPadding(qreal value, bool reset)
void QQuickBasePositionerPrivate::setBottomPadding(qreal value, bool reset)
{
Q_Q(QQuickBasePositioner);
- qreal tmp = q->bottomPadding();
- bottomPadding = value;
- explicitBottomPadding = !reset;
- if ((!reset && !qFuzzyCompare(tmp, value)) || (reset && !qFuzzyCompare(tmp, 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()))) {
setPositioningDirty();
emit q->bottomPaddingChanged();
}
diff --git a/src/quick/items/qquickpositioners_p_p.h b/src/quick/items/qquickpositioners_p_p.h
index a58f79ac0a..6e1e15d4ef 100644
--- a/src/quick/items/qquickpositioners_p_p.h
+++ b/src/quick/items/qquickpositioners_p_p.h
@@ -51,6 +51,7 @@
#include <QtQuick/private/qquickstate_p.h>
#include <private/qquicktransitionmanager_p_p.h>
#include <private/qquickstatechangescript_p.h>
+#include <private/qlazilyallocated_p.h>
#include <QtCore/qobject.h>
#include <QtCore/qstring.h>
@@ -65,19 +66,25 @@ class QQuickBasePositionerPrivate : public QQuickImplicitSizeItemPrivate, public
Q_DECLARE_PUBLIC(QQuickBasePositioner)
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;
+
QQuickBasePositionerPrivate()
: spacing(0), type(QQuickBasePositioner::None)
, transitioner(0), positioningDirty(false)
, doingPositioning(false), anchorConflict(false), layoutDirection(Qt::LeftToRight)
- , padding(0)
- , topPadding(0)
- , leftPadding(0)
- , rightPadding(0)
- , bottomPadding(0)
- , explicitTopPadding(false)
- , explicitLeftPadding(false)
- , explicitRightPadding(false)
- , explicitBottomPadding(false)
{
}
@@ -108,16 +115,6 @@ public:
Qt::LayoutDirection layoutDirection;
- qreal padding;
- qreal topPadding;
- qreal leftPadding;
- qreal rightPadding;
- qreal bottomPadding;
- bool explicitTopPadding;
- bool explicitLeftPadding;
- bool explicitRightPadding;
- bool explicitBottomPadding;
-
void mirrorChange() Q_DECL_OVERRIDE {
effectiveLayoutDirectionChange();
}
@@ -170,6 +167,7 @@ public:
{
}
+ 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);