diff options
Diffstat (limited to 'src/quick/items/qquickstateoperations.cpp')
| -rw-r--r-- | src/quick/items/qquickstateoperations.cpp | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/src/quick/items/qquickstateoperations.cpp b/src/quick/items/qquickstateoperations.cpp index 1c8bee7253..16127e5a35 100644 --- a/src/quick/items/qquickstateoperations.cpp +++ b/src/quick/items/qquickstateoperations.cpp @@ -1055,17 +1055,24 @@ void QQuickAnchorChanges::reverse() //restore any absolute geometry changed by the state's anchors QQuickAnchors::Anchors stateVAnchors = d->anchorSet->d_func()->usedAnchors & QQuickAnchors::Vertical_Mask; QQuickAnchors::Anchors origVAnchors = targetPrivate->anchors()->usedAnchors() & QQuickAnchors::Vertical_Mask; + QQuickAnchors::Anchors resetVAnchors = d->anchorSet->d_func()->resetAnchors & QQuickAnchors::Vertical_Mask; QQuickAnchors::Anchors stateHAnchors = d->anchorSet->d_func()->usedAnchors & QQuickAnchors::Horizontal_Mask; QQuickAnchors::Anchors origHAnchors = targetPrivate->anchors()->usedAnchors() & QQuickAnchors::Horizontal_Mask; + QQuickAnchors::Anchors resetHAnchors = d->anchorSet->d_func()->resetAnchors & QQuickAnchors::Horizontal_Mask; const QRectF oldGeometry(d->target->position(), d->target->size()); bool stateSetWidth = (stateHAnchors && stateHAnchors != QQuickAnchors::LeftAnchor && stateHAnchors != QQuickAnchors::RightAnchor && stateHAnchors != QQuickAnchors::HCenterAnchor); - // in case of an additive AnchorChange, we _did_ end up modifying the width - stateSetWidth |= ((stateHAnchors & QQuickAnchors::LeftAnchor) && (origHAnchors & QQuickAnchors::RightAnchor)) || - ((stateHAnchors & QQuickAnchors::RightAnchor) && (origHAnchors & QQuickAnchors::LeftAnchor)); + // in case of an additive AnchorChange, we _did_ end up modifying the width, unless opposite + // edge was set to undefined in state + stateSetWidth |= ((stateHAnchors & QQuickAnchors::LeftAnchor) + && (origHAnchors & QQuickAnchors::RightAnchor) + && !(resetHAnchors & QQuickAnchors::RightAnchor)) + || ((stateHAnchors & QQuickAnchors::RightAnchor) + && (origHAnchors & QQuickAnchors::LeftAnchor) + && !(resetHAnchors & QQuickAnchors::LeftAnchor)); bool origSetWidth = (origHAnchors && origHAnchors != QQuickAnchors::LeftAnchor && origHAnchors != QQuickAnchors::RightAnchor && @@ -1081,9 +1088,14 @@ void QQuickAnchorChanges::reverse() stateVAnchors != QQuickAnchors::BottomAnchor && stateVAnchors != QQuickAnchors::VCenterAnchor && stateVAnchors != QQuickAnchors::BaselineAnchor); - // in case of an additive AnchorChange, we _did_ end up modifying the height - stateSetHeight |= ((stateVAnchors & QQuickAnchors::TopAnchor) && (origVAnchors & QQuickAnchors::BottomAnchor)) || - ((stateVAnchors & QQuickAnchors::BottomAnchor) && (origVAnchors & QQuickAnchors::TopAnchor)); + // in case of an additive AnchorChange, we _did_ end up modifying the height, unless opposite + // edge was set to undefined in state + stateSetHeight |= ((stateVAnchors & QQuickAnchors::TopAnchor) + && (origVAnchors & QQuickAnchors::BottomAnchor) + && !(resetVAnchors & QQuickAnchors::BottomAnchor)) + || ((stateVAnchors & QQuickAnchors::BottomAnchor) + && (origVAnchors & QQuickAnchors::TopAnchor) + && !(resetVAnchors & QQuickAnchors::TopAnchor)); bool origSetHeight = (origVAnchors && origVAnchors != QQuickAnchors::TopAnchor && origVAnchors != QQuickAnchors::BottomAnchor && |
