diff options
Diffstat (limited to 'src/quick/items/qquickanchors.cpp')
-rw-r--r-- | src/quick/items/qquickanchors.cpp | 105 |
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); |