aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/items/qquickanchors.cpp
diff options
context:
space:
mode:
authorAndrew den Exter <andrew.den-exter@nokia.com>2012-06-29 17:06:38 +1000
committerQt by Nokia <qt-info@nokia.com>2012-07-06 05:24:45 +0200
commitaeac9840e4c46786e84ab7eb16a89db22d4ff81a (patch)
tree2aaae5a3dccfa9ee447f0896a659cc60caba5b86 /src/quick/items/qquickanchors.cpp
parentea9c14f3e1a42080be03d95b825a7ba8ed303bbc (diff)
Allow all explicit margins to override margins.
Task-number: QTBUG-24515 Change-Id: Ibfc657dec9fd0c8e71cf3686a04ea7b00ad72c11 Reviewed-by: Michael Brasser <michael.brasser@nokia.com>
Diffstat (limited to 'src/quick/items/qquickanchors.cpp')
-rw-r--r--src/quick/items/qquickanchors.cpp105
1 files changed, 95 insertions, 10 deletions
diff --git a/src/quick/items/qquickanchors.cpp b/src/quick/items/qquickanchors.cpp
index 0626c66fbb..9097cc421b 100644
--- a/src/quick/items/qquickanchors.cpp
+++ b/src/quick/items/qquickanchors.cpp
@@ -985,6 +985,7 @@ qreal QQuickAnchors::leftMargin() const
void QQuickAnchors::setLeftMargin(qreal offset)
{
Q_D(QQuickAnchors);
+ d->leftMarginExplicit = true;
if (d->leftMargin == offset)
return;
d->leftMargin = offset;
@@ -995,6 +996,20 @@ void QQuickAnchors::setLeftMargin(qreal offset)
emit leftMarginChanged();
}
+void QQuickAnchors::resetLeftMargin()
+{
+ Q_D(QQuickAnchors);
+ d->leftMarginExplicit = false;
+ if (d->leftMargin == d->margins)
+ return;
+ d->leftMargin = d->margins;
+ if (d->fill)
+ d->fillChanged();
+ else
+ d->updateHorizontalAnchors();
+ emit leftMarginChanged();
+}
+
qreal QQuickAnchors::rightMargin() const
{
Q_D(const QQuickAnchors);
@@ -1004,6 +1019,7 @@ qreal QQuickAnchors::rightMargin() const
void QQuickAnchors::setRightMargin(qreal offset)
{
Q_D(QQuickAnchors);
+ d->rightMarginExplicit = true;
if (d->rightMargin == offset)
return;
d->rightMargin = offset;
@@ -1014,6 +1030,20 @@ void QQuickAnchors::setRightMargin(qreal offset)
emit rightMarginChanged();
}
+void QQuickAnchors::resetRightMargin()
+{
+ Q_D(QQuickAnchors);
+ d->rightMarginExplicit = false;
+ if (d->rightMargin == d->margins)
+ return;
+ d->rightMargin = d->margins;
+ if (d->fill)
+ d->fillChanged();
+ else
+ d->updateHorizontalAnchors();
+ emit rightMarginChanged();
+}
+
qreal QQuickAnchors::margins() const
{
Q_D(const QQuickAnchors);
@@ -1025,18 +1055,43 @@ void QQuickAnchors::setMargins(qreal offset)
Q_D(QQuickAnchors);
if (d->margins == offset)
return;
- //###Is it significantly faster to set them directly so we can call fillChanged only once?
- if (!d->rightMargin || d->rightMargin == d->margins)
- setRightMargin(offset);
- if (!d->leftMargin || d->leftMargin == d->margins)
- setLeftMargin(offset);
- if (!d->topMargin || d->topMargin == d->margins)
- setTopMargin(offset);
- if (!d->bottomMargin || d->bottomMargin == d->margins)
- setBottomMargin(offset);
d->margins = offset;
- emit marginsChanged();
+ bool updateHorizontal = false;
+ bool updateVertical = false;
+
+ if (!d->rightMarginExplicit && d->rightMargin != offset) {
+ d->rightMargin = offset;
+ updateHorizontal = true;
+ emit rightMarginChanged();
+ }
+ if (!d->leftMarginExplicit && d->leftMargin != offset) {
+ d->leftMargin = offset;
+ updateHorizontal = true;
+ emit leftMarginChanged();
+ }
+ if (!d->topMarginExplicit && d->topMargin != offset) {
+ d->topMargin = offset;
+ updateVertical = true;
+ emit topMarginChanged();
+ }
+ if (!d->bottomMarginExplicit && d->bottomMargin != offset) {
+ d->bottomMargin = offset;
+ updateVertical = true;
+ emit bottomMarginChanged();
+ }
+
+ if (d->fill) {
+ if (updateHorizontal || updateVertical)
+ d->fillChanged();
+ } else {
+ if (updateHorizontal)
+ d->updateHorizontalAnchors();
+ if (updateVertical)
+ d->updateVerticalAnchors();
+ }
+
+ emit marginsChanged();
}
qreal QQuickAnchors::horizontalCenterOffset() const
@@ -1067,6 +1122,7 @@ qreal QQuickAnchors::topMargin() const
void QQuickAnchors::setTopMargin(qreal offset)
{
Q_D(QQuickAnchors);
+ d->topMarginExplicit = true;
if (d->topMargin == offset)
return;
d->topMargin = offset;
@@ -1077,6 +1133,20 @@ void QQuickAnchors::setTopMargin(qreal offset)
emit topMarginChanged();
}
+void QQuickAnchors::resetTopMargin()
+{
+ Q_D(QQuickAnchors);
+ d->topMarginExplicit = false;
+ if (d->topMargin == d->margins)
+ return;
+ d->topMargin = d->margins;
+ if (d->fill)
+ d->fillChanged();
+ else
+ d->updateVerticalAnchors();
+ emit topMarginChanged();
+}
+
qreal QQuickAnchors::bottomMargin() const
{
Q_D(const QQuickAnchors);
@@ -1086,6 +1156,7 @@ qreal QQuickAnchors::bottomMargin() const
void QQuickAnchors::setBottomMargin(qreal offset)
{
Q_D(QQuickAnchors);
+ d->bottomMarginExplicit = true;
if (d->bottomMargin == offset)
return;
d->bottomMargin = offset;
@@ -1096,6 +1167,20 @@ void QQuickAnchors::setBottomMargin(qreal offset)
emit bottomMarginChanged();
}
+void QQuickAnchors::resetBottomMargin()
+{
+ Q_D(QQuickAnchors);
+ d->bottomMarginExplicit = false;
+ if (d->bottomMargin == d->margins)
+ return;
+ d->bottomMargin = d->margins;
+ if (d->fill)
+ d->fillChanged();
+ else
+ d->updateVerticalAnchors();
+ emit bottomMarginChanged();
+}
+
qreal QQuickAnchors::verticalCenterOffset() const
{
Q_D(const QQuickAnchors);