46void QQuickParentChangePrivate::doChange(QQuickItem *targetParent)
48 if (targetParent && target && target->parentItem()) {
49 Q_Q(QQuickParentChange);
51 const QTransform &transform = target->parentItem()->itemTransform(targetParent, &ok);
52 if (transform.type() >= QTransform::TxShear || !ok) {
53 qmlWarning(q) << QQuickParentChange::tr(
"Unable to preserve appearance under complex transform");
59 bool isRotate = (transform.type() == QTransform::TxRotate) || (transform.m11() < 0);
60 if (ok && !isRotate) {
61 if (transform.m11() == transform.m22())
62 scale = transform.m11();
64 qmlWarning(q) << QQuickParentChange::tr(
"Unable to preserve appearance under non-uniform scale");
67 }
else if (ok && isRotate) {
68 if (transform.m11() == transform.m22())
69 scale = qSqrt(transform.m11()*transform.m11() + transform.m12()*transform.m12());
71 qmlWarning(q) << QQuickParentChange::tr(
"Unable to preserve appearance under non-uniform scale");
76 rotation = qRadiansToDegrees(qAtan2(transform.m12() / scale, transform.m11() / scale));
78 qmlWarning(q) << QQuickParentChange::tr(
"Unable to preserve appearance under scale of 0");
83 const QPointF &point = transform.map(QPointF(target->x(),target->y()));
88 target->setParentItem(targetParent);
90 if (ok && target->transformOrigin() != QQuickItem::TopLeft) {
91 qreal tempxt = target->transformOriginPoint().x();
92 qreal tempyt = target->transformOriginPoint().y();
94 t.translate(-tempxt, -tempyt);
96 t.scale(scale, scale);
97 t.translate(tempxt, tempyt);
98 const QPointF &offset = t.map(QPointF(0,0));
105 target->setPosition(QPointF(x, y));
106 target->setRotation(target->rotation() + rotation);
107 target->setScale(target->scale() * scale);
110 target->setParentItem(targetParent);
306QQuickStateOperation::ActionList QQuickParentChange::actions()
308 Q_D(QQuickParentChange);
309 if (!d->target || !d->parent)
318 if (d->xString.isValid()) {
320 qreal x = d->xString.value().numberLiteral(&ok);
322 QQuickStateAction xa(d->target, QLatin1String(
"x"), x);
325 QQmlProperty property(d->target, QLatin1String(
"x"));
326 auto newBinding = QQmlAnyBinding::createFromScriptString(
327 property, d->xString.value(), d->target, qmlContext(
this));
328 QQuickStateAction xa;
329 xa.property = property;
330 xa.toBinding = newBinding;
331 xa.fromValue = xa.property.read();
332 xa.deletableToBinding =
true;
337 if (d->yString.isValid()) {
339 qreal y = d->yString.value().numberLiteral(&ok);
341 QQuickStateAction ya(d->target, QLatin1String(
"y"), y);
344 QQmlProperty property(d->target, QLatin1String(
"y"));
345 auto newBinding = QQmlAnyBinding::createFromScriptString(
346 property, d->yString.value(), d->target, qmlContext(
this));
347 QQuickStateAction ya;
348 ya.property = property;
349 ya.toBinding = newBinding;
350 ya.fromValue = ya.property.read();
351 ya.deletableToBinding =
true;
356 if (d->scaleString.isValid()) {
358 qreal scale = d->scaleString.value().numberLiteral(&ok);
360 QQuickStateAction sa(d->target, QLatin1String(
"scale"), scale);
363 QQmlProperty property(d->target, QLatin1String(
"scale"));
364 auto newBinding = QQmlAnyBinding::createFromScriptString(
365 property, d->scaleString.value(), d->target, qmlContext(
this));
366 QQuickStateAction sa;
367 sa.property = property;
368 sa.toBinding = newBinding;
369 sa.fromValue = sa.property.read();
370 sa.deletableToBinding =
true;
375 if (d->rotationString.isValid()) {
377 qreal rotation = d->rotationString.value().numberLiteral(&ok);
379 QQuickStateAction ra(d->target, QLatin1String(
"rotation"), rotation);
382 QQmlProperty property(d->target, QLatin1String(
"rotation"));
383 auto newBinding = QQmlAnyBinding::createFromScriptString(
384 property, d->rotationString.value(), d->target, qmlContext(
this));
385 QQuickStateAction ra;
386 ra.property = property;
387 ra.toBinding = newBinding;
388 ra.fromValue = ra.property.read();
389 ra.deletableToBinding =
true;
394 if (d->widthString.isValid()) {
396 qreal width = d->widthString.value().numberLiteral(&ok);
398 QQuickStateAction wa(d->target, QLatin1String(
"width"), width);
401 QQmlProperty property(d->target, QLatin1String(
"width"));
402 auto newBinding = QQmlAnyBinding::createFromScriptString(property, d->widthString, d->target, qmlContext(
this));
403 QQuickStateAction wa;
404 wa.property = property;
405 wa.toBinding = newBinding;
406 wa.fromValue = wa.property.read();
407 wa.deletableToBinding =
true;
412 if (d->heightString.isValid()) {
414 qreal height = d->heightString.value().numberLiteral(&ok);
416 QQuickStateAction ha(d->target, QLatin1String(
"height"), height);
419 QQmlProperty property(d->target, QLatin1String(
"height"));
420 auto newBinding = QQmlAnyBinding::createFromScriptString(property, d->heightString, d->target, qmlContext(
this));
421 QQuickStateAction ha;
422 ha.property = property;
423 ha.toBinding = newBinding;
424 ha.fromValue = ha.property.read();
425 ha.deletableToBinding =
true;
821QQuickAnchorChanges::ActionList QQuickAnchorChanges::actions()
823 Q_D(QQuickAnchorChanges);
825 d->leftBinding = d->rightBinding = d->hCenterBinding = d->topBinding
826 = d->bottomBinding = d->vCenterBinding = d->baselineBinding =
nullptr;
828 d->leftProp = QQmlProperty(d->target, QLatin1String(
"anchors.left"));
829 d->rightProp = QQmlProperty(d->target, QLatin1String(
"anchors.right"));
830 d->hCenterProp = QQmlProperty(d->target, QLatin1String(
"anchors.horizontalCenter"));
831 d->topProp = QQmlProperty(d->target, QLatin1String(
"anchors.top"));
832 d->bottomProp = QQmlProperty(d->target, QLatin1String(
"anchors.bottom"));
833 d->vCenterProp = QQmlProperty(d->target, QLatin1String(
"anchors.verticalCenter"));
834 d->baselineProp = QQmlProperty(d->target, QLatin1String(
"anchors.baseline"));
836 if (d->anchorSet->d_func()->usedAnchors & QQuickAnchors::LeftAnchor) {
837 d->leftBinding = QQmlBinding::create(&QQmlPropertyPrivate::get(d->leftProp)->core, d->anchorSet->d_func()->leftScript, d->target, qmlContext(
this));
838 d->leftBinding->setTarget(d->leftProp);
840 if (d->anchorSet->d_func()->usedAnchors & QQuickAnchors::RightAnchor) {
841 d->rightBinding = QQmlBinding::create(&QQmlPropertyPrivate::get(d->rightProp)->core, d->anchorSet->d_func()->rightScript, d->target, qmlContext(
this));
842 d->rightBinding->setTarget(d->rightProp);
844 if (d->anchorSet->d_func()->usedAnchors & QQuickAnchors::HCenterAnchor) {
845 d->hCenterBinding = QQmlBinding::create(&QQmlPropertyPrivate::get(d->hCenterProp)->core, d->anchorSet->d_func()->hCenterScript, d->target, qmlContext(
this));
846 d->hCenterBinding->setTarget(d->hCenterProp);
848 if (d->anchorSet->d_func()->usedAnchors & QQuickAnchors::TopAnchor) {
849 d->topBinding = QQmlBinding::create(&QQmlPropertyPrivate::get(d->topProp)->core, d->anchorSet->d_func()->topScript, d->target, qmlContext(
this));
850 d->topBinding->setTarget(d->topProp);
852 if (d->anchorSet->d_func()->usedAnchors & QQuickAnchors::BottomAnchor) {
853 d->bottomBinding = QQmlBinding::create(&QQmlPropertyPrivate::get(d->bottomProp)->core, d->anchorSet->d_func()->bottomScript, d->target, qmlContext(
this));
854 d->bottomBinding->setTarget(d->bottomProp);
856 if (d->anchorSet->d_func()->usedAnchors & QQuickAnchors::VCenterAnchor) {
857 d->vCenterBinding = QQmlBinding::create(&QQmlPropertyPrivate::get(d->vCenterProp)->core, d->anchorSet->d_func()->vCenterScript, d->target, qmlContext(
this));
858 d->vCenterBinding->setTarget(d->vCenterProp);
860 if (d->anchorSet->d_func()->usedAnchors & QQuickAnchors::BaselineAnchor) {
861 d->baselineBinding = QQmlBinding::create(&QQmlPropertyPrivate::get(d->baselineProp)->core, d->anchorSet->d_func()->baselineScript, d->target, qmlContext(
this));
862 d->baselineBinding->setTarget(d->baselineProp);
867 return ActionList() << a;
914void QQuickAnchorChanges::execute()
916 Q_D(QQuickAnchorChanges);
920 QQuickItemPrivate *targetPrivate = QQuickItemPrivate::get(d->target);
922 if (d->applyOrigLeft) {
923 if (!d->origLeftBinding)
924 targetPrivate->anchors()->resetLeft();
925 QQmlPropertyPrivate::setBinding(d->leftProp, d->origLeftBinding.data());
927 if (d->applyOrigRight) {
928 if (!d->origRightBinding)
929 targetPrivate->anchors()->resetRight();
930 QQmlPropertyPrivate::setBinding(d->rightProp, d->origRightBinding.data());
932 if (d->applyOrigHCenter) {
933 if (!d->origHCenterBinding)
934 targetPrivate->anchors()->resetHorizontalCenter();
935 QQmlPropertyPrivate::setBinding(d->hCenterProp, d->origHCenterBinding.data());
937 if (d->applyOrigTop) {
938 if (!d->origTopBinding)
939 targetPrivate->anchors()->resetTop();
940 QQmlPropertyPrivate::setBinding(d->topProp, d->origTopBinding.data());
942 if (d->applyOrigBottom) {
943 if (!d->origBottomBinding)
944 targetPrivate->anchors()->resetBottom();
945 QQmlPropertyPrivate::setBinding(d->bottomProp, d->origBottomBinding.data());
947 if (d->applyOrigVCenter) {
948 if (!d->origVCenterBinding)
949 targetPrivate->anchors()->resetVerticalCenter();
950 QQmlPropertyPrivate::setBinding(d->vCenterProp, d->origVCenterBinding.data());
952 if (d->applyOrigBaseline) {
953 if (!d->origBaselineBinding)
954 targetPrivate->anchors()->resetBaseline();
955 QQmlPropertyPrivate::setBinding(d->baselineProp, d->origBaselineBinding.data());
959 if (d->anchorSet->d_func()->resetAnchors & QQuickAnchors::LeftAnchor) {
960 targetPrivate->anchors()->resetLeft();
961 QQmlPropertyPrivate::removeBinding(d->leftProp);
963 if (d->anchorSet->d_func()->resetAnchors & QQuickAnchors::RightAnchor) {
964 targetPrivate->anchors()->resetRight();
965 QQmlPropertyPrivate::removeBinding(d->rightProp);
967 if (d->anchorSet->d_func()->resetAnchors & QQuickAnchors::HCenterAnchor) {
968 targetPrivate->anchors()->resetHorizontalCenter();
969 QQmlPropertyPrivate::removeBinding(d->hCenterProp);
971 if (d->anchorSet->d_func()->resetAnchors & QQuickAnchors::TopAnchor) {
972 targetPrivate->anchors()->resetTop();
973 QQmlPropertyPrivate::removeBinding(d->topProp);
975 if (d->anchorSet->d_func()->resetAnchors & QQuickAnchors::BottomAnchor) {
976 targetPrivate->anchors()->resetBottom();
977 QQmlPropertyPrivate::removeBinding(d->bottomProp);
979 if (d->anchorSet->d_func()->resetAnchors & QQuickAnchors::VCenterAnchor) {
980 targetPrivate->anchors()->resetVerticalCenter();
981 QQmlPropertyPrivate::removeBinding(d->vCenterProp);
983 if (d->anchorSet->d_func()->resetAnchors & QQuickAnchors::BaselineAnchor) {
984 targetPrivate->anchors()->resetBaseline();
985 QQmlPropertyPrivate::removeBinding(d->baselineProp);
990 QQmlPropertyPrivate::setBinding(d->leftBinding.data());
992 QQmlPropertyPrivate::setBinding(d->rightBinding.data());
993 if (d->hCenterBinding)
994 QQmlPropertyPrivate::setBinding(d->hCenterBinding.data());
996 QQmlPropertyPrivate::setBinding(d->topBinding.data());
997 if (d->bottomBinding)
998 QQmlPropertyPrivate::setBinding(d->bottomBinding.data());
999 if (d->vCenterBinding)
1000 QQmlPropertyPrivate::setBinding(d->vCenterBinding.data());
1001 if (d->baselineBinding)
1002 QQmlPropertyPrivate::setBinding(d->baselineBinding.data());
1010void QQuickAnchorChanges::reverse()
1012 Q_D(QQuickAnchorChanges);
1016 QQuickItemPrivate *targetPrivate = QQuickItemPrivate::get(d->target);
1018 if (d->leftBinding) {
1019 targetPrivate->anchors()->resetLeft();
1020 QQmlPropertyPrivate::removeBinding(d->leftBinding.data());
1022 if (d->rightBinding) {
1023 targetPrivate->anchors()->resetRight();
1024 QQmlPropertyPrivate::removeBinding(d->rightBinding.data());
1026 if (d->hCenterBinding) {
1027 targetPrivate->anchors()->resetHorizontalCenter();
1028 QQmlPropertyPrivate::removeBinding(d->hCenterBinding.data());
1030 if (d->topBinding) {
1031 targetPrivate->anchors()->resetTop();
1032 QQmlPropertyPrivate::removeBinding(d->topBinding.data());
1034 if (d->bottomBinding) {
1035 targetPrivate->anchors()->resetBottom();
1036 QQmlPropertyPrivate::removeBinding(d->bottomBinding.data());
1038 if (d->vCenterBinding) {
1039 targetPrivate->anchors()->resetVerticalCenter();
1040 QQmlPropertyPrivate::removeBinding(d->vCenterBinding.data());
1042 if (d->baselineBinding) {
1043 targetPrivate->anchors()->resetBaseline();
1044 QQmlPropertyPrivate::removeBinding(d->baselineBinding.data());
1048 if (d->origLeftBinding)
1049 QQmlPropertyPrivate::setBinding(d->leftProp, d->origLeftBinding.data());
1050 if (d->origRightBinding)
1051 QQmlPropertyPrivate::setBinding(d->rightProp, d->origRightBinding.data());
1052 if (d->origHCenterBinding)
1053 QQmlPropertyPrivate::setBinding(d->hCenterProp, d->origHCenterBinding.data());
1054 if (d->origTopBinding)
1055 QQmlPropertyPrivate::setBinding(d->topProp, d->origTopBinding.data());
1056 if (d->origBottomBinding)
1057 QQmlPropertyPrivate::setBinding(d->bottomProp, d->origBottomBinding.data());
1058 if (d->origVCenterBinding)
1059 QQmlPropertyPrivate::setBinding(d->vCenterProp, d->origVCenterBinding.data());
1060 if (d->origBaselineBinding)
1061 QQmlPropertyPrivate::setBinding(d->baselineProp, d->origBaselineBinding.data());
1064 QQuickAnchors::Anchors stateVAnchors = d->anchorSet->d_func()->usedAnchors & QQuickAnchors::Vertical_Mask;
1065 QQuickAnchors::Anchors origVAnchors = targetPrivate->anchors()->usedAnchors() & QQuickAnchors::Vertical_Mask;
1066 QQuickAnchors::Anchors resetVAnchors = d->anchorSet->d_func()->resetAnchors & QQuickAnchors::Vertical_Mask;
1067 QQuickAnchors::Anchors stateHAnchors = d->anchorSet->d_func()->usedAnchors & QQuickAnchors::Horizontal_Mask;
1068 QQuickAnchors::Anchors origHAnchors = targetPrivate->anchors()->usedAnchors() & QQuickAnchors::Horizontal_Mask;
1069 QQuickAnchors::Anchors resetHAnchors = d->anchorSet->d_func()->resetAnchors & QQuickAnchors::Horizontal_Mask;
1071 const QRectF oldGeometry(d->target->position(), d->target->size());
1072 bool stateSetWidth = (stateHAnchors &&
1073 stateHAnchors != QQuickAnchors::LeftAnchor &&
1074 stateHAnchors != QQuickAnchors::RightAnchor &&
1075 stateHAnchors != QQuickAnchors::HCenterAnchor);
1078 stateSetWidth |= ((stateHAnchors & QQuickAnchors::LeftAnchor)
1079 && (origHAnchors & QQuickAnchors::RightAnchor)
1080 && !(resetHAnchors & QQuickAnchors::RightAnchor))
1081 || ((stateHAnchors & QQuickAnchors::RightAnchor)
1082 && (origHAnchors & QQuickAnchors::LeftAnchor)
1083 && !(resetHAnchors & QQuickAnchors::LeftAnchor));
1084 bool origSetWidth = (origHAnchors &&
1085 origHAnchors != QQuickAnchors::LeftAnchor &&
1086 origHAnchors != QQuickAnchors::RightAnchor &&
1087 origHAnchors != QQuickAnchors::HCenterAnchor);
1088 if (d->origWidth.isValid() && stateSetWidth && !origSetWidth && !qt_is_nan(d->origWidth)) {
1089 targetPrivate->widthValidFlag =
true;
1090 if (targetPrivate->width != d->origWidth)
1091 targetPrivate->width.setValueBypassingBindings(d->origWidth);
1094 bool stateSetHeight = (stateVAnchors &&
1095 stateVAnchors != QQuickAnchors::TopAnchor &&
1096 stateVAnchors != QQuickAnchors::BottomAnchor &&
1097 stateVAnchors != QQuickAnchors::VCenterAnchor &&
1098 stateVAnchors != QQuickAnchors::BaselineAnchor);
1101 stateSetHeight |= ((stateVAnchors & QQuickAnchors::TopAnchor)
1102 && (origVAnchors & QQuickAnchors::BottomAnchor)
1103 && !(resetVAnchors & QQuickAnchors::BottomAnchor))
1104 || ((stateVAnchors & QQuickAnchors::BottomAnchor)
1105 && (origVAnchors & QQuickAnchors::TopAnchor)
1106 && !(resetVAnchors & QQuickAnchors::TopAnchor));
1107 bool origSetHeight = (origVAnchors &&
1108 origVAnchors != QQuickAnchors::TopAnchor &&
1109 origVAnchors != QQuickAnchors::BottomAnchor &&
1110 origVAnchors != QQuickAnchors::VCenterAnchor &&
1111 origVAnchors != QQuickAnchors::BaselineAnchor);
1112 if (d->origHeight.isValid() && stateSetHeight && !origSetHeight && !qt_is_nan(d->origHeight)) {
1113 targetPrivate->heightValidFlag =
true;
1114 if (targetPrivate->height != d->origHeight)
1115 targetPrivate->height.setValueBypassingBindings(d->origHeight);
1118 if (stateHAnchors && !origHAnchors && !qt_is_nan(d->origX) && d->origX != targetPrivate->x)
1119 targetPrivate->x.setValueBypassingBindings(d->origX);
1121 if (stateVAnchors && !origVAnchors && !qt_is_nan(d->origY) && d->origY != targetPrivate->y)
1122 targetPrivate->y.setValueBypassingBindings(d->origY);
1124 const QRectF newGeometry(d->target->position(), d->target->size());
1125 if (newGeometry != oldGeometry) {
1126 QQuickItemPrivate::DirtyType dirtyFlags {};
1127 if (newGeometry.topLeft() != oldGeometry.topLeft())
1128 dirtyFlags = QQuickItemPrivate::DirtyType(dirtyFlags | QQuickItemPrivate::Position);
1129 if (newGeometry.size() != oldGeometry.size())
1130 dirtyFlags = QQuickItemPrivate::DirtyType(dirtyFlags | QQuickItemPrivate::Size);
1131 targetPrivate->dirty(dirtyFlags);
1132 d->target->geometryChange(newGeometry, oldGeometry);
1141QList<QQuickStateAction> QQuickAnchorChanges::additionalActions()
const
1143 Q_D(
const QQuickAnchorChanges);
1144 QList<QQuickStateAction> extra;
1146 QQuickAnchors::Anchors combined = d->anchorSet->d_func()->usedAnchors | d->anchorSet->d_func()->resetAnchors;
1147 bool hChange = combined & QQuickAnchors::Horizontal_Mask;
1148 bool vChange = combined & QQuickAnchors::Vertical_Mask;
1151 QQuickStateAction a;
1152 if (hChange && d->fromX != d->toX) {
1153 a.property = QQmlProperty(d->target, QLatin1String(
"x"));
1157 if (vChange && d->fromY != d->toY) {
1158 a.property = QQmlProperty(d->target, QLatin1String(
"y"));
1162 if (hChange && d->fromWidth != d->toWidth) {
1163 a.property = QQmlProperty(d->target, QLatin1String(
"width"));
1164 a.toValue = d->toWidth;
1167 if (vChange && d->fromHeight != d->toHeight) {
1168 a.property = QQmlProperty(d->target, QLatin1String(
"height"));
1169 a.toValue = d->toHeight;
1182void QQuickAnchorChanges::saveOriginals()
1184 Q_D(QQuickAnchorChanges);
1188 d->origLeftBinding = QQmlPropertyPrivate::binding(d->leftProp);
1189 d->origRightBinding = QQmlPropertyPrivate::binding(d->rightProp);
1190 d->origHCenterBinding = QQmlPropertyPrivate::binding(d->hCenterProp);
1191 d->origTopBinding = QQmlPropertyPrivate::binding(d->topProp);
1192 d->origBottomBinding = QQmlPropertyPrivate::binding(d->bottomProp);
1193 d->origVCenterBinding = QQmlPropertyPrivate::binding(d->vCenterProp);
1194 d->origBaselineBinding = QQmlPropertyPrivate::binding(d->baselineProp);
1196 QQuickItemPrivate *targetPrivate = QQuickItemPrivate::get(d->target);
1197 if (targetPrivate->widthValid())
1198 d->origWidth = d->target->width();
1199 if (targetPrivate->heightValid())
1200 d->origHeight = d->target->height();
1201 d->origX = d->target->x();
1202 d->origY = d->target->y();
1204 d->applyOrigLeft = d->applyOrigRight = d->applyOrigHCenter = d->applyOrigTop
1205 = d->applyOrigBottom = d->applyOrigVCenter = d->applyOrigBaseline =
false;
1207 saveCurrentValues();
1210void QQuickAnchorChanges::copyOriginals(QQuickStateActionEvent *other)
1212 Q_D(QQuickAnchorChanges);
1213 QQuickAnchorChanges *ac =
static_cast<QQuickAnchorChanges*>(other);
1214 QQuickAnchorChangesPrivate *acp = ac->d_func();
1216 QQuickAnchors::Anchors combined = acp->anchorSet->d_func()->usedAnchors |
1217 acp->anchorSet->d_func()->resetAnchors;
1220 d->applyOrigLeft = (combined & QQuickAnchors::LeftAnchor);
1221 d->applyOrigRight = (combined & QQuickAnchors::RightAnchor);
1222 d->applyOrigHCenter = (combined & QQuickAnchors::HCenterAnchor);
1223 d->applyOrigTop = (combined & QQuickAnchors::TopAnchor);
1224 d->applyOrigBottom = (combined & QQuickAnchors::BottomAnchor);
1225 d->applyOrigVCenter = (combined & QQuickAnchors::VCenterAnchor);
1226 d->applyOrigBaseline = (combined & QQuickAnchors::BaselineAnchor);
1228 d->origLeftBinding = acp->origLeftBinding;
1229 d->origRightBinding = acp->origRightBinding;
1230 d->origHCenterBinding = acp->origHCenterBinding;
1231 d->origTopBinding = acp->origTopBinding;
1232 d->origBottomBinding = acp->origBottomBinding;
1233 d->origVCenterBinding = acp->origVCenterBinding;
1234 d->origBaselineBinding = acp->origBaselineBinding;
1236 d->origWidth = acp->origWidth;
1237 d->origHeight = acp->origHeight;
1238 d->origX = acp->origX;
1239 d->origY = acp->origY;
1243 acp->leftBinding =
nullptr;
1244 acp->rightBinding =
nullptr;
1245 acp->hCenterBinding =
nullptr;
1246 acp->topBinding =
nullptr;
1247 acp->bottomBinding =
nullptr;
1248 acp->vCenterBinding =
nullptr;
1249 acp->baselineBinding =
nullptr;
1250 acp->origLeftBinding =
nullptr;
1251 acp->origRightBinding =
nullptr;
1252 acp->origHCenterBinding =
nullptr;
1253 acp->origTopBinding =
nullptr;
1254 acp->origBottomBinding =
nullptr;
1255 acp->origVCenterBinding =
nullptr;
1256 acp->origBaselineBinding =
nullptr;
1258 saveCurrentValues();
1261void QQuickAnchorChanges::clearBindings()
1263 Q_D(QQuickAnchorChanges);
1268 d->fromX = d->target->x();
1269 d->fromY = d->target->y();
1270 d->fromWidth = d->target->width();
1271 d->fromHeight = d->target->height();
1273 QQuickItemPrivate *targetPrivate = QQuickItemPrivate::get(d->target);
1277 QQuickAnchors::Anchors combined = d->anchorSet->d_func()->resetAnchors |
1278 d->anchorSet->d_func()->usedAnchors;
1279 if (d->applyOrigLeft || (combined & QQuickAnchors::LeftAnchor)) {
1280 targetPrivate->anchors()->resetLeft();
1281 QQmlPropertyPrivate::removeBinding(d->leftProp);
1283 if (d->applyOrigRight || (combined & QQuickAnchors::RightAnchor)) {
1284 targetPrivate->anchors()->resetRight();
1285 QQmlPropertyPrivate::removeBinding(d->rightProp);
1287 if (d->applyOrigHCenter || (combined & QQuickAnchors::HCenterAnchor)) {
1288 targetPrivate->anchors()->resetHorizontalCenter();
1289 QQmlPropertyPrivate::removeBinding(d->hCenterProp);
1291 if (d->applyOrigTop || (combined & QQuickAnchors::TopAnchor)) {
1292 targetPrivate->anchors()->resetTop();
1293 QQmlPropertyPrivate::removeBinding(d->topProp);
1295 if (d->applyOrigBottom || (combined & QQuickAnchors::BottomAnchor)) {
1296 targetPrivate->anchors()->resetBottom();
1297 QQmlPropertyPrivate::removeBinding(d->bottomProp);
1299 if (d->applyOrigVCenter || (combined & QQuickAnchors::VCenterAnchor)) {
1300 targetPrivate->anchors()->resetVerticalCenter();
1301 QQmlPropertyPrivate::removeBinding(d->vCenterProp);
1303 if (d->applyOrigBaseline || (combined & QQuickAnchors::BaselineAnchor)) {
1304 targetPrivate->anchors()->resetBaseline();
1305 QQmlPropertyPrivate::removeBinding(d->baselineProp);
1320void QQuickAnchorChanges::rewind()
1322 Q_D(QQuickAnchorChanges);
1326 QQuickItemPrivate *targetPrivate = QQuickItemPrivate::get(d->target);
1327 const QRectF oldGeometry(d->target->position(), d->target->size());
1331 if (!qt_is_nan(d->rewindX) && d->rewindX != targetPrivate->x)
1332 targetPrivate->x.setValueBypassingBindings(d->rewindX);
1333 if (!qt_is_nan(d->rewindY) && d->rewindY != targetPrivate->y)
1334 targetPrivate->y.setValueBypassingBindings(d->rewindY);
1336 if (targetPrivate->widthValid() && !qt_is_nan(d->rewindWidth)) {
1337 targetPrivate->widthValidFlag =
true;
1338 if (d->rewindWidth != targetPrivate->width)
1339 targetPrivate->width.setValueBypassingBindings(d->rewindWidth);
1342 if (targetPrivate->heightValid() && !qt_is_nan(d->rewindHeight)) {
1343 targetPrivate->heightValidFlag =
true;
1344 if (d->rewindHeight != targetPrivate->height)
1345 targetPrivate->height.setValueBypassingBindings(d->rewindHeight);
1348 const QRectF newGeometry(d->target->position(), d->target->size());
1349 if (newGeometry != oldGeometry) {
1350 targetPrivate->dirty(QQuickItemPrivate::Position);
1351 d->target->geometryChange(newGeometry, oldGeometry);