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);
307QQuickStateOperation::ActionList QQuickParentChange::actions()
309 Q_D(QQuickParentChange);
310 if (!d->target || !d->parent)
319 if (d->xString.isValid()) {
321 qreal x = d->xString.value().numberLiteral(&ok);
323 QQuickStateAction xa(d->target, QLatin1String(
"x"), x);
326 QQmlProperty property(d->target, QLatin1String(
"x"));
327 auto newBinding = QQmlAnyBinding::createFromScriptString(
328 property, d->xString.value(), d->target, qmlContext(
this));
329 QQuickStateAction xa;
330 xa.property = property;
331 xa.toBinding = newBinding;
332 xa.fromValue = xa.property.read();
333 xa.deletableToBinding =
true;
338 if (d->yString.isValid()) {
340 qreal y = d->yString.value().numberLiteral(&ok);
342 QQuickStateAction ya(d->target, QLatin1String(
"y"), y);
345 QQmlProperty property(d->target, QLatin1String(
"y"));
346 auto newBinding = QQmlAnyBinding::createFromScriptString(
347 property, d->yString.value(), d->target, qmlContext(
this));
348 QQuickStateAction ya;
349 ya.property = property;
350 ya.toBinding = newBinding;
351 ya.fromValue = ya.property.read();
352 ya.deletableToBinding =
true;
357 if (d->scaleString.isValid()) {
359 qreal scale = d->scaleString.value().numberLiteral(&ok);
361 QQuickStateAction sa(d->target, QLatin1String(
"scale"), scale);
364 QQmlProperty property(d->target, QLatin1String(
"scale"));
365 auto newBinding = QQmlAnyBinding::createFromScriptString(
366 property, d->scaleString.value(), d->target, qmlContext(
this));
367 QQuickStateAction sa;
368 sa.property = property;
369 sa.toBinding = newBinding;
370 sa.fromValue = sa.property.read();
371 sa.deletableToBinding =
true;
376 if (d->rotationString.isValid()) {
378 qreal rotation = d->rotationString.value().numberLiteral(&ok);
380 QQuickStateAction ra(d->target, QLatin1String(
"rotation"), rotation);
383 QQmlProperty property(d->target, QLatin1String(
"rotation"));
384 auto newBinding = QQmlAnyBinding::createFromScriptString(
385 property, d->rotationString.value(), d->target, qmlContext(
this));
386 QQuickStateAction ra;
387 ra.property = property;
388 ra.toBinding = newBinding;
389 ra.fromValue = ra.property.read();
390 ra.deletableToBinding =
true;
395 if (d->widthString.isValid()) {
397 qreal width = d->widthString.value().numberLiteral(&ok);
399 QQuickStateAction wa(d->target, QLatin1String(
"width"), width);
402 QQmlProperty property(d->target, QLatin1String(
"width"));
403 auto newBinding = QQmlAnyBinding::createFromScriptString(property, d->widthString, d->target, qmlContext(
this));
404 QQuickStateAction wa;
405 wa.property = property;
406 wa.toBinding = newBinding;
407 wa.fromValue = wa.property.read();
408 wa.deletableToBinding =
true;
413 if (d->heightString.isValid()) {
415 qreal height = d->heightString.value().numberLiteral(&ok);
417 QQuickStateAction ha(d->target, QLatin1String(
"height"), height);
420 QQmlProperty property(d->target, QLatin1String(
"height"));
421 auto newBinding = QQmlAnyBinding::createFromScriptString(property, d->heightString, d->target, qmlContext(
this));
422 QQuickStateAction ha;
423 ha.property = property;
424 ha.toBinding = newBinding;
425 ha.fromValue = ha.property.read();
426 ha.deletableToBinding =
true;
823QQuickAnchorChanges::ActionList QQuickAnchorChanges::actions()
825 Q_D(QQuickAnchorChanges);
827 d->leftBinding = d->rightBinding = d->hCenterBinding = d->topBinding
828 = d->bottomBinding = d->vCenterBinding = d->baselineBinding =
nullptr;
830 d->leftProp = QQmlProperty(d->target, QLatin1String(
"anchors.left"));
831 d->rightProp = QQmlProperty(d->target, QLatin1String(
"anchors.right"));
832 d->hCenterProp = QQmlProperty(d->target, QLatin1String(
"anchors.horizontalCenter"));
833 d->topProp = QQmlProperty(d->target, QLatin1String(
"anchors.top"));
834 d->bottomProp = QQmlProperty(d->target, QLatin1String(
"anchors.bottom"));
835 d->vCenterProp = QQmlProperty(d->target, QLatin1String(
"anchors.verticalCenter"));
836 d->baselineProp = QQmlProperty(d->target, QLatin1String(
"anchors.baseline"));
838 if (d->anchorSet->d_func()->usedAnchors & QQuickAnchors::LeftAnchor) {
839 d->leftBinding = QQmlBinding::create(&QQmlPropertyPrivate::get(d->leftProp)->core, d->anchorSet->d_func()->leftScript, d->target, qmlContext(
this));
840 d->leftBinding->setTarget(d->leftProp);
842 if (d->anchorSet->d_func()->usedAnchors & QQuickAnchors::RightAnchor) {
843 d->rightBinding = QQmlBinding::create(&QQmlPropertyPrivate::get(d->rightProp)->core, d->anchorSet->d_func()->rightScript, d->target, qmlContext(
this));
844 d->rightBinding->setTarget(d->rightProp);
846 if (d->anchorSet->d_func()->usedAnchors & QQuickAnchors::HCenterAnchor) {
847 d->hCenterBinding = QQmlBinding::create(&QQmlPropertyPrivate::get(d->hCenterProp)->core, d->anchorSet->d_func()->hCenterScript, d->target, qmlContext(
this));
848 d->hCenterBinding->setTarget(d->hCenterProp);
850 if (d->anchorSet->d_func()->usedAnchors & QQuickAnchors::TopAnchor) {
851 d->topBinding = QQmlBinding::create(&QQmlPropertyPrivate::get(d->topProp)->core, d->anchorSet->d_func()->topScript, d->target, qmlContext(
this));
852 d->topBinding->setTarget(d->topProp);
854 if (d->anchorSet->d_func()->usedAnchors & QQuickAnchors::BottomAnchor) {
855 d->bottomBinding = QQmlBinding::create(&QQmlPropertyPrivate::get(d->bottomProp)->core, d->anchorSet->d_func()->bottomScript, d->target, qmlContext(
this));
856 d->bottomBinding->setTarget(d->bottomProp);
858 if (d->anchorSet->d_func()->usedAnchors & QQuickAnchors::VCenterAnchor) {
859 d->vCenterBinding = QQmlBinding::create(&QQmlPropertyPrivate::get(d->vCenterProp)->core, d->anchorSet->d_func()->vCenterScript, d->target, qmlContext(
this));
860 d->vCenterBinding->setTarget(d->vCenterProp);
862 if (d->anchorSet->d_func()->usedAnchors & QQuickAnchors::BaselineAnchor) {
863 d->baselineBinding = QQmlBinding::create(&QQmlPropertyPrivate::get(d->baselineProp)->core, d->anchorSet->d_func()->baselineScript, d->target, qmlContext(
this));
864 d->baselineBinding->setTarget(d->baselineProp);
869 return ActionList() << a;
916void QQuickAnchorChanges::execute()
918 Q_D(QQuickAnchorChanges);
922 QQuickItemPrivate *targetPrivate = QQuickItemPrivate::get(d->target);
924 if (d->applyOrigLeft) {
925 if (!d->origLeftBinding)
926 targetPrivate->anchors()->resetLeft();
927 QQmlPropertyPrivate::setBinding(d->leftProp, d->origLeftBinding.data());
929 if (d->applyOrigRight) {
930 if (!d->origRightBinding)
931 targetPrivate->anchors()->resetRight();
932 QQmlPropertyPrivate::setBinding(d->rightProp, d->origRightBinding.data());
934 if (d->applyOrigHCenter) {
935 if (!d->origHCenterBinding)
936 targetPrivate->anchors()->resetHorizontalCenter();
937 QQmlPropertyPrivate::setBinding(d->hCenterProp, d->origHCenterBinding.data());
939 if (d->applyOrigTop) {
940 if (!d->origTopBinding)
941 targetPrivate->anchors()->resetTop();
942 QQmlPropertyPrivate::setBinding(d->topProp, d->origTopBinding.data());
944 if (d->applyOrigBottom) {
945 if (!d->origBottomBinding)
946 targetPrivate->anchors()->resetBottom();
947 QQmlPropertyPrivate::setBinding(d->bottomProp, d->origBottomBinding.data());
949 if (d->applyOrigVCenter) {
950 if (!d->origVCenterBinding)
951 targetPrivate->anchors()->resetVerticalCenter();
952 QQmlPropertyPrivate::setBinding(d->vCenterProp, d->origVCenterBinding.data());
954 if (d->applyOrigBaseline) {
955 if (!d->origBaselineBinding)
956 targetPrivate->anchors()->resetBaseline();
957 QQmlPropertyPrivate::setBinding(d->baselineProp, d->origBaselineBinding.data());
961 if (d->anchorSet->d_func()->resetAnchors & QQuickAnchors::LeftAnchor) {
962 targetPrivate->anchors()->resetLeft();
963 QQmlPropertyPrivate::removeBinding(d->leftProp);
965 if (d->anchorSet->d_func()->resetAnchors & QQuickAnchors::RightAnchor) {
966 targetPrivate->anchors()->resetRight();
967 QQmlPropertyPrivate::removeBinding(d->rightProp);
969 if (d->anchorSet->d_func()->resetAnchors & QQuickAnchors::HCenterAnchor) {
970 targetPrivate->anchors()->resetHorizontalCenter();
971 QQmlPropertyPrivate::removeBinding(d->hCenterProp);
973 if (d->anchorSet->d_func()->resetAnchors & QQuickAnchors::TopAnchor) {
974 targetPrivate->anchors()->resetTop();
975 QQmlPropertyPrivate::removeBinding(d->topProp);
977 if (d->anchorSet->d_func()->resetAnchors & QQuickAnchors::BottomAnchor) {
978 targetPrivate->anchors()->resetBottom();
979 QQmlPropertyPrivate::removeBinding(d->bottomProp);
981 if (d->anchorSet->d_func()->resetAnchors & QQuickAnchors::VCenterAnchor) {
982 targetPrivate->anchors()->resetVerticalCenter();
983 QQmlPropertyPrivate::removeBinding(d->vCenterProp);
985 if (d->anchorSet->d_func()->resetAnchors & QQuickAnchors::BaselineAnchor) {
986 targetPrivate->anchors()->resetBaseline();
987 QQmlPropertyPrivate::removeBinding(d->baselineProp);
992 QQmlPropertyPrivate::setBinding(d->leftBinding.data());
994 QQmlPropertyPrivate::setBinding(d->rightBinding.data());
995 if (d->hCenterBinding)
996 QQmlPropertyPrivate::setBinding(d->hCenterBinding.data());
998 QQmlPropertyPrivate::setBinding(d->topBinding.data());
999 if (d->bottomBinding)
1000 QQmlPropertyPrivate::setBinding(d->bottomBinding.data());
1001 if (d->vCenterBinding)
1002 QQmlPropertyPrivate::setBinding(d->vCenterBinding.data());
1003 if (d->baselineBinding)
1004 QQmlPropertyPrivate::setBinding(d->baselineBinding.data());
1012void QQuickAnchorChanges::reverse()
1014 Q_D(QQuickAnchorChanges);
1018 QQuickItemPrivate *targetPrivate = QQuickItemPrivate::get(d->target);
1020 if (d->leftBinding) {
1021 targetPrivate->anchors()->resetLeft();
1022 QQmlPropertyPrivate::removeBinding(d->leftBinding.data());
1024 if (d->rightBinding) {
1025 targetPrivate->anchors()->resetRight();
1026 QQmlPropertyPrivate::removeBinding(d->rightBinding.data());
1028 if (d->hCenterBinding) {
1029 targetPrivate->anchors()->resetHorizontalCenter();
1030 QQmlPropertyPrivate::removeBinding(d->hCenterBinding.data());
1032 if (d->topBinding) {
1033 targetPrivate->anchors()->resetTop();
1034 QQmlPropertyPrivate::removeBinding(d->topBinding.data());
1036 if (d->bottomBinding) {
1037 targetPrivate->anchors()->resetBottom();
1038 QQmlPropertyPrivate::removeBinding(d->bottomBinding.data());
1040 if (d->vCenterBinding) {
1041 targetPrivate->anchors()->resetVerticalCenter();
1042 QQmlPropertyPrivate::removeBinding(d->vCenterBinding.data());
1044 if (d->baselineBinding) {
1045 targetPrivate->anchors()->resetBaseline();
1046 QQmlPropertyPrivate::removeBinding(d->baselineBinding.data());
1050 if (d->origLeftBinding)
1051 QQmlPropertyPrivate::setBinding(d->leftProp, d->origLeftBinding.data());
1052 if (d->origRightBinding)
1053 QQmlPropertyPrivate::setBinding(d->rightProp, d->origRightBinding.data());
1054 if (d->origHCenterBinding)
1055 QQmlPropertyPrivate::setBinding(d->hCenterProp, d->origHCenterBinding.data());
1056 if (d->origTopBinding)
1057 QQmlPropertyPrivate::setBinding(d->topProp, d->origTopBinding.data());
1058 if (d->origBottomBinding)
1059 QQmlPropertyPrivate::setBinding(d->bottomProp, d->origBottomBinding.data());
1060 if (d->origVCenterBinding)
1061 QQmlPropertyPrivate::setBinding(d->vCenterProp, d->origVCenterBinding.data());
1062 if (d->origBaselineBinding)
1063 QQmlPropertyPrivate::setBinding(d->baselineProp, d->origBaselineBinding.data());
1066 QQuickAnchors::Anchors stateVAnchors = d->anchorSet->d_func()->usedAnchors & QQuickAnchors::Vertical_Mask;
1067 QQuickAnchors::Anchors origVAnchors = targetPrivate->anchors()->usedAnchors() & QQuickAnchors::Vertical_Mask;
1068 QQuickAnchors::Anchors resetVAnchors = d->anchorSet->d_func()->resetAnchors & QQuickAnchors::Vertical_Mask;
1069 QQuickAnchors::Anchors stateHAnchors = d->anchorSet->d_func()->usedAnchors & QQuickAnchors::Horizontal_Mask;
1070 QQuickAnchors::Anchors origHAnchors = targetPrivate->anchors()->usedAnchors() & QQuickAnchors::Horizontal_Mask;
1071 QQuickAnchors::Anchors resetHAnchors = d->anchorSet->d_func()->resetAnchors & QQuickAnchors::Horizontal_Mask;
1073 const QRectF oldGeometry(d->target->position(), d->target->size());
1074 bool stateSetWidth = (stateHAnchors &&
1075 stateHAnchors != QQuickAnchors::LeftAnchor &&
1076 stateHAnchors != QQuickAnchors::RightAnchor &&
1077 stateHAnchors != QQuickAnchors::HCenterAnchor);
1080 stateSetWidth |= ((stateHAnchors & QQuickAnchors::LeftAnchor)
1081 && (origHAnchors & QQuickAnchors::RightAnchor)
1082 && !(resetHAnchors & QQuickAnchors::RightAnchor))
1083 || ((stateHAnchors & QQuickAnchors::RightAnchor)
1084 && (origHAnchors & QQuickAnchors::LeftAnchor)
1085 && !(resetHAnchors & QQuickAnchors::LeftAnchor));
1086 bool origSetWidth = (origHAnchors &&
1087 origHAnchors != QQuickAnchors::LeftAnchor &&
1088 origHAnchors != QQuickAnchors::RightAnchor &&
1089 origHAnchors != QQuickAnchors::HCenterAnchor);
1090 if (d->origWidth.isValid() && stateSetWidth && !origSetWidth && !qt_is_nan(d->origWidth)) {
1091 targetPrivate->widthValidFlag =
true;
1092 if (targetPrivate->width != d->origWidth)
1093 targetPrivate->width.setValueBypassingBindings(d->origWidth);
1096 bool stateSetHeight = (stateVAnchors &&
1097 stateVAnchors != QQuickAnchors::TopAnchor &&
1098 stateVAnchors != QQuickAnchors::BottomAnchor &&
1099 stateVAnchors != QQuickAnchors::VCenterAnchor &&
1100 stateVAnchors != QQuickAnchors::BaselineAnchor);
1103 stateSetHeight |= ((stateVAnchors & QQuickAnchors::TopAnchor)
1104 && (origVAnchors & QQuickAnchors::BottomAnchor)
1105 && !(resetVAnchors & QQuickAnchors::BottomAnchor))
1106 || ((stateVAnchors & QQuickAnchors::BottomAnchor)
1107 && (origVAnchors & QQuickAnchors::TopAnchor)
1108 && !(resetVAnchors & QQuickAnchors::TopAnchor));
1109 bool origSetHeight = (origVAnchors &&
1110 origVAnchors != QQuickAnchors::TopAnchor &&
1111 origVAnchors != QQuickAnchors::BottomAnchor &&
1112 origVAnchors != QQuickAnchors::VCenterAnchor &&
1113 origVAnchors != QQuickAnchors::BaselineAnchor);
1114 if (d->origHeight.isValid() && stateSetHeight && !origSetHeight && !qt_is_nan(d->origHeight)) {
1115 targetPrivate->heightValidFlag =
true;
1116 if (targetPrivate->height != d->origHeight)
1117 targetPrivate->height.setValueBypassingBindings(d->origHeight);
1120 if (stateHAnchors && !origHAnchors && !qt_is_nan(d->origX) && d->origX != targetPrivate->x)
1121 targetPrivate->x.setValueBypassingBindings(d->origX);
1123 if (stateVAnchors && !origVAnchors && !qt_is_nan(d->origY) && d->origY != targetPrivate->y)
1124 targetPrivate->y.setValueBypassingBindings(d->origY);
1126 const QRectF newGeometry(d->target->position(), d->target->size());
1127 if (newGeometry != oldGeometry) {
1128 QQuickItemPrivate::DirtyType dirtyFlags {};
1129 if (newGeometry.topLeft() != oldGeometry.topLeft())
1130 dirtyFlags = QQuickItemPrivate::DirtyType(dirtyFlags | QQuickItemPrivate::Position);
1131 if (newGeometry.size() != oldGeometry.size())
1132 dirtyFlags = QQuickItemPrivate::DirtyType(dirtyFlags | QQuickItemPrivate::Size);
1133 targetPrivate->dirty(dirtyFlags);
1134 d->target->geometryChange(newGeometry, oldGeometry);
1143QList<QQuickStateAction> QQuickAnchorChanges::additionalActions()
const
1145 Q_D(
const QQuickAnchorChanges);
1146 QList<QQuickStateAction> extra;
1148 QQuickAnchors::Anchors combined = d->anchorSet->d_func()->usedAnchors | d->anchorSet->d_func()->resetAnchors;
1149 bool hChange = combined & QQuickAnchors::Horizontal_Mask;
1150 bool vChange = combined & QQuickAnchors::Vertical_Mask;
1153 QQuickStateAction a;
1154 if (hChange && d->fromX != d->toX) {
1155 a.property = QQmlProperty(d->target, QLatin1String(
"x"));
1159 if (vChange && d->fromY != d->toY) {
1160 a.property = QQmlProperty(d->target, QLatin1String(
"y"));
1164 if (hChange && d->fromWidth != d->toWidth) {
1165 a.property = QQmlProperty(d->target, QLatin1String(
"width"));
1166 a.toValue = d->toWidth;
1169 if (vChange && d->fromHeight != d->toHeight) {
1170 a.property = QQmlProperty(d->target, QLatin1String(
"height"));
1171 a.toValue = d->toHeight;
1184void QQuickAnchorChanges::saveOriginals()
1186 Q_D(QQuickAnchorChanges);
1190 d->origLeftBinding = QQmlPropertyPrivate::binding(d->leftProp);
1191 d->origRightBinding = QQmlPropertyPrivate::binding(d->rightProp);
1192 d->origHCenterBinding = QQmlPropertyPrivate::binding(d->hCenterProp);
1193 d->origTopBinding = QQmlPropertyPrivate::binding(d->topProp);
1194 d->origBottomBinding = QQmlPropertyPrivate::binding(d->bottomProp);
1195 d->origVCenterBinding = QQmlPropertyPrivate::binding(d->vCenterProp);
1196 d->origBaselineBinding = QQmlPropertyPrivate::binding(d->baselineProp);
1198 QQuickItemPrivate *targetPrivate = QQuickItemPrivate::get(d->target);
1199 if (targetPrivate->widthValid())
1200 d->origWidth = d->target->width();
1201 if (targetPrivate->heightValid())
1202 d->origHeight = d->target->height();
1203 d->origX = d->target->x();
1204 d->origY = d->target->y();
1206 d->applyOrigLeft = d->applyOrigRight = d->applyOrigHCenter = d->applyOrigTop
1207 = d->applyOrigBottom = d->applyOrigVCenter = d->applyOrigBaseline =
false;
1209 saveCurrentValues();
1212void QQuickAnchorChanges::copyOriginals(QQuickStateActionEvent *other)
1214 Q_D(QQuickAnchorChanges);
1215 QQuickAnchorChanges *ac =
static_cast<QQuickAnchorChanges*>(other);
1216 QQuickAnchorChangesPrivate *acp = ac->d_func();
1218 QQuickAnchors::Anchors combined = acp->anchorSet->d_func()->usedAnchors |
1219 acp->anchorSet->d_func()->resetAnchors;
1222 d->applyOrigLeft = (combined & QQuickAnchors::LeftAnchor);
1223 d->applyOrigRight = (combined & QQuickAnchors::RightAnchor);
1224 d->applyOrigHCenter = (combined & QQuickAnchors::HCenterAnchor);
1225 d->applyOrigTop = (combined & QQuickAnchors::TopAnchor);
1226 d->applyOrigBottom = (combined & QQuickAnchors::BottomAnchor);
1227 d->applyOrigVCenter = (combined & QQuickAnchors::VCenterAnchor);
1228 d->applyOrigBaseline = (combined & QQuickAnchors::BaselineAnchor);
1230 d->origLeftBinding = acp->origLeftBinding;
1231 d->origRightBinding = acp->origRightBinding;
1232 d->origHCenterBinding = acp->origHCenterBinding;
1233 d->origTopBinding = acp->origTopBinding;
1234 d->origBottomBinding = acp->origBottomBinding;
1235 d->origVCenterBinding = acp->origVCenterBinding;
1236 d->origBaselineBinding = acp->origBaselineBinding;
1238 d->origWidth = acp->origWidth;
1239 d->origHeight = acp->origHeight;
1240 d->origX = acp->origX;
1241 d->origY = acp->origY;
1245 acp->leftBinding =
nullptr;
1246 acp->rightBinding =
nullptr;
1247 acp->hCenterBinding =
nullptr;
1248 acp->topBinding =
nullptr;
1249 acp->bottomBinding =
nullptr;
1250 acp->vCenterBinding =
nullptr;
1251 acp->baselineBinding =
nullptr;
1252 acp->origLeftBinding =
nullptr;
1253 acp->origRightBinding =
nullptr;
1254 acp->origHCenterBinding =
nullptr;
1255 acp->origTopBinding =
nullptr;
1256 acp->origBottomBinding =
nullptr;
1257 acp->origVCenterBinding =
nullptr;
1258 acp->origBaselineBinding =
nullptr;
1260 saveCurrentValues();
1263void QQuickAnchorChanges::clearBindings()
1265 Q_D(QQuickAnchorChanges);
1270 d->fromX = d->target->x();
1271 d->fromY = d->target->y();
1272 d->fromWidth = d->target->width();
1273 d->fromHeight = d->target->height();
1275 QQuickItemPrivate *targetPrivate = QQuickItemPrivate::get(d->target);
1279 QQuickAnchors::Anchors combined = d->anchorSet->d_func()->resetAnchors |
1280 d->anchorSet->d_func()->usedAnchors;
1281 if (d->applyOrigLeft || (combined & QQuickAnchors::LeftAnchor)) {
1282 targetPrivate->anchors()->resetLeft();
1283 QQmlPropertyPrivate::removeBinding(d->leftProp);
1285 if (d->applyOrigRight || (combined & QQuickAnchors::RightAnchor)) {
1286 targetPrivate->anchors()->resetRight();
1287 QQmlPropertyPrivate::removeBinding(d->rightProp);
1289 if (d->applyOrigHCenter || (combined & QQuickAnchors::HCenterAnchor)) {
1290 targetPrivate->anchors()->resetHorizontalCenter();
1291 QQmlPropertyPrivate::removeBinding(d->hCenterProp);
1293 if (d->applyOrigTop || (combined & QQuickAnchors::TopAnchor)) {
1294 targetPrivate->anchors()->resetTop();
1295 QQmlPropertyPrivate::removeBinding(d->topProp);
1297 if (d->applyOrigBottom || (combined & QQuickAnchors::BottomAnchor)) {
1298 targetPrivate->anchors()->resetBottom();
1299 QQmlPropertyPrivate::removeBinding(d->bottomProp);
1301 if (d->applyOrigVCenter || (combined & QQuickAnchors::VCenterAnchor)) {
1302 targetPrivate->anchors()->resetVerticalCenter();
1303 QQmlPropertyPrivate::removeBinding(d->vCenterProp);
1305 if (d->applyOrigBaseline || (combined & QQuickAnchors::BaselineAnchor)) {
1306 targetPrivate->anchors()->resetBaseline();
1307 QQmlPropertyPrivate::removeBinding(d->baselineProp);
1322void QQuickAnchorChanges::rewind()
1324 Q_D(QQuickAnchorChanges);
1328 QQuickItemPrivate *targetPrivate = QQuickItemPrivate::get(d->target);
1329 const QRectF oldGeometry(d->target->position(), d->target->size());
1333 if (!qt_is_nan(d->rewindX) && d->rewindX != targetPrivate->x)
1334 targetPrivate->x.setValueBypassingBindings(d->rewindX);
1335 if (!qt_is_nan(d->rewindY) && d->rewindY != targetPrivate->y)
1336 targetPrivate->y.setValueBypassingBindings(d->rewindY);
1338 if (targetPrivate->widthValid() && !qt_is_nan(d->rewindWidth)) {
1339 targetPrivate->widthValidFlag =
true;
1340 if (d->rewindWidth != targetPrivate->width)
1341 targetPrivate->width.setValueBypassingBindings(d->rewindWidth);
1344 if (targetPrivate->heightValid() && !qt_is_nan(d->rewindHeight)) {
1345 targetPrivate->heightValidFlag =
true;
1346 if (d->rewindHeight != targetPrivate->height)
1347 targetPrivate->height.setValueBypassingBindings(d->rewindHeight);
1350 const QRectF newGeometry(d->target->position(), d->target->size());
1351 if (newGeometry != oldGeometry) {
1352 targetPrivate->dirty(QQuickItemPrivate::Position);
1353 d->target->geometryChange(newGeometry, oldGeometry);