45void QQuickParentChangePrivate::doChange(QQuickItem *targetParent)
47 if (targetParent && target && target->parentItem()) {
48 Q_Q(QQuickParentChange);
50 const QTransform &transform = target->parentItem()->itemTransform(targetParent, &ok);
51 if (transform.type() >= QTransform::TxShear || !ok) {
52 qmlWarning(q) << QQuickParentChange::tr(
"Unable to preserve appearance under complex transform");
58 bool isRotate = (transform.type() == QTransform::TxRotate) || (transform.m11() < 0);
59 if (ok && !isRotate) {
60 if (transform.m11() == transform.m22())
61 scale = transform.m11();
63 qmlWarning(q) << QQuickParentChange::tr(
"Unable to preserve appearance under non-uniform scale");
66 }
else if (ok && isRotate) {
67 if (transform.m11() == transform.m22())
68 scale = qSqrt(transform.m11()*transform.m11() + transform.m12()*transform.m12());
70 qmlWarning(q) << QQuickParentChange::tr(
"Unable to preserve appearance under non-uniform scale");
75 rotation = qRadiansToDegrees(qAtan2(transform.m12() / scale, transform.m11() / scale));
77 qmlWarning(q) << QQuickParentChange::tr(
"Unable to preserve appearance under scale of 0");
82 const QPointF &point = transform.map(QPointF(target->x(),target->y()));
87 target->setParentItem(targetParent);
89 if (ok && target->transformOrigin() != QQuickItem::TopLeft) {
90 qreal tempxt = target->transformOriginPoint().x();
91 qreal tempyt = target->transformOriginPoint().y();
93 t.translate(-tempxt, -tempyt);
95 t.scale(scale, scale);
96 t.translate(tempxt, tempyt);
97 const QPointF &offset = t.map(QPointF(0,0));
104 target->setPosition(QPointF(x, y));
105 target->setRotation(target->rotation() + rotation);
106 target->setScale(target->scale() * scale);
109 target->setParentItem(targetParent);
305QQuickStateOperation::ActionList QQuickParentChange::actions()
307 Q_D(QQuickParentChange);
308 if (!d->target || !d->parent)
317 if (d->xString.isValid()) {
319 qreal x = d->xString.value().numberLiteral(&ok);
321 QQuickStateAction xa(d->target, QLatin1String(
"x"), x);
324 QQmlProperty property(d->target, QLatin1String(
"x"));
325 auto newBinding = QQmlAnyBinding::createFromScriptString(
326 property, d->xString.value(), d->target, qmlContext(
this));
327 QQuickStateAction xa;
328 xa.property = property;
329 xa.toBinding = newBinding;
330 xa.fromValue = xa.property.read();
331 xa.deletableToBinding =
true;
336 if (d->yString.isValid()) {
338 qreal y = d->yString.value().numberLiteral(&ok);
340 QQuickStateAction ya(d->target, QLatin1String(
"y"), y);
343 QQmlProperty property(d->target, QLatin1String(
"y"));
344 auto newBinding = QQmlAnyBinding::createFromScriptString(
345 property, d->yString.value(), d->target, qmlContext(
this));
346 QQuickStateAction ya;
347 ya.property = property;
348 ya.toBinding = newBinding;
349 ya.fromValue = ya.property.read();
350 ya.deletableToBinding =
true;
355 if (d->scaleString.isValid()) {
357 qreal scale = d->scaleString.value().numberLiteral(&ok);
359 QQuickStateAction sa(d->target, QLatin1String(
"scale"), scale);
362 QQmlProperty property(d->target, QLatin1String(
"scale"));
363 auto newBinding = QQmlAnyBinding::createFromScriptString(
364 property, d->scaleString.value(), d->target, qmlContext(
this));
365 QQuickStateAction sa;
366 sa.property = property;
367 sa.toBinding = newBinding;
368 sa.fromValue = sa.property.read();
369 sa.deletableToBinding =
true;
374 if (d->rotationString.isValid()) {
376 qreal rotation = d->rotationString.value().numberLiteral(&ok);
378 QQuickStateAction ra(d->target, QLatin1String(
"rotation"), rotation);
381 QQmlProperty property(d->target, QLatin1String(
"rotation"));
382 auto newBinding = QQmlAnyBinding::createFromScriptString(
383 property, d->rotationString.value(), d->target, qmlContext(
this));
384 QQuickStateAction ra;
385 ra.property = property;
386 ra.toBinding = newBinding;
387 ra.fromValue = ra.property.read();
388 ra.deletableToBinding =
true;
393 if (d->widthString.isValid()) {
395 qreal width = d->widthString.value().numberLiteral(&ok);
397 QQuickStateAction wa(d->target, QLatin1String(
"width"), width);
400 QQmlProperty property(d->target, QLatin1String(
"width"));
401 auto newBinding = QQmlAnyBinding::createFromScriptString(property, d->widthString, d->target, qmlContext(
this));
402 QQuickStateAction wa;
403 wa.property = property;
404 wa.toBinding = newBinding;
405 wa.fromValue = wa.property.read();
406 wa.deletableToBinding =
true;
411 if (d->heightString.isValid()) {
413 qreal height = d->heightString.value().numberLiteral(&ok);
415 QQuickStateAction ha(d->target, QLatin1String(
"height"), height);
418 QQmlProperty property(d->target, QLatin1String(
"height"));
419 auto newBinding = QQmlAnyBinding::createFromScriptString(property, d->heightString, d->target, qmlContext(
this));
420 QQuickStateAction ha;
421 ha.property = property;
422 ha.toBinding = newBinding;
423 ha.fromValue = ha.property.read();
424 ha.deletableToBinding =
true;
820QQuickAnchorChanges::ActionList QQuickAnchorChanges::actions()
822 Q_D(QQuickAnchorChanges);
824 d->leftBinding = d->rightBinding = d->hCenterBinding = d->topBinding
825 = d->bottomBinding = d->vCenterBinding = d->baselineBinding =
nullptr;
827 d->leftProp = QQmlProperty(d->target, QLatin1String(
"anchors.left"));
828 d->rightProp = QQmlProperty(d->target, QLatin1String(
"anchors.right"));
829 d->hCenterProp = QQmlProperty(d->target, QLatin1String(
"anchors.horizontalCenter"));
830 d->topProp = QQmlProperty(d->target, QLatin1String(
"anchors.top"));
831 d->bottomProp = QQmlProperty(d->target, QLatin1String(
"anchors.bottom"));
832 d->vCenterProp = QQmlProperty(d->target, QLatin1String(
"anchors.verticalCenter"));
833 d->baselineProp = QQmlProperty(d->target, QLatin1String(
"anchors.baseline"));
835 if (d->anchorSet->d_func()->usedAnchors & QQuickAnchors::LeftAnchor) {
836 d->leftBinding = QQmlBinding::create(&QQmlPropertyPrivate::get(d->leftProp)->core, d->anchorSet->d_func()->leftScript, d->target, qmlContext(
this));
837 d->leftBinding->setTarget(d->leftProp);
839 if (d->anchorSet->d_func()->usedAnchors & QQuickAnchors::RightAnchor) {
840 d->rightBinding = QQmlBinding::create(&QQmlPropertyPrivate::get(d->rightProp)->core, d->anchorSet->d_func()->rightScript, d->target, qmlContext(
this));
841 d->rightBinding->setTarget(d->rightProp);
843 if (d->anchorSet->d_func()->usedAnchors & QQuickAnchors::HCenterAnchor) {
844 d->hCenterBinding = QQmlBinding::create(&QQmlPropertyPrivate::get(d->hCenterProp)->core, d->anchorSet->d_func()->hCenterScript, d->target, qmlContext(
this));
845 d->hCenterBinding->setTarget(d->hCenterProp);
847 if (d->anchorSet->d_func()->usedAnchors & QQuickAnchors::TopAnchor) {
848 d->topBinding = QQmlBinding::create(&QQmlPropertyPrivate::get(d->topProp)->core, d->anchorSet->d_func()->topScript, d->target, qmlContext(
this));
849 d->topBinding->setTarget(d->topProp);
851 if (d->anchorSet->d_func()->usedAnchors & QQuickAnchors::BottomAnchor) {
852 d->bottomBinding = QQmlBinding::create(&QQmlPropertyPrivate::get(d->bottomProp)->core, d->anchorSet->d_func()->bottomScript, d->target, qmlContext(
this));
853 d->bottomBinding->setTarget(d->bottomProp);
855 if (d->anchorSet->d_func()->usedAnchors & QQuickAnchors::VCenterAnchor) {
856 d->vCenterBinding = QQmlBinding::create(&QQmlPropertyPrivate::get(d->vCenterProp)->core, d->anchorSet->d_func()->vCenterScript, d->target, qmlContext(
this));
857 d->vCenterBinding->setTarget(d->vCenterProp);
859 if (d->anchorSet->d_func()->usedAnchors & QQuickAnchors::BaselineAnchor) {
860 d->baselineBinding = QQmlBinding::create(&QQmlPropertyPrivate::get(d->baselineProp)->core, d->anchorSet->d_func()->baselineScript, d->target, qmlContext(
this));
861 d->baselineBinding->setTarget(d->baselineProp);
866 return ActionList() << a;
913void QQuickAnchorChanges::execute()
915 Q_D(QQuickAnchorChanges);
919 QQuickItemPrivate *targetPrivate = QQuickItemPrivate::get(d->target);
921 if (d->applyOrigLeft) {
922 if (!d->origLeftBinding)
923 targetPrivate->anchors()->resetLeft();
924 QQmlPropertyPrivate::setBinding(d->leftProp, d->origLeftBinding.data());
926 if (d->applyOrigRight) {
927 if (!d->origRightBinding)
928 targetPrivate->anchors()->resetRight();
929 QQmlPropertyPrivate::setBinding(d->rightProp, d->origRightBinding.data());
931 if (d->applyOrigHCenter) {
932 if (!d->origHCenterBinding)
933 targetPrivate->anchors()->resetHorizontalCenter();
934 QQmlPropertyPrivate::setBinding(d->hCenterProp, d->origHCenterBinding.data());
936 if (d->applyOrigTop) {
937 if (!d->origTopBinding)
938 targetPrivate->anchors()->resetTop();
939 QQmlPropertyPrivate::setBinding(d->topProp, d->origTopBinding.data());
941 if (d->applyOrigBottom) {
942 if (!d->origBottomBinding)
943 targetPrivate->anchors()->resetBottom();
944 QQmlPropertyPrivate::setBinding(d->bottomProp, d->origBottomBinding.data());
946 if (d->applyOrigVCenter) {
947 if (!d->origVCenterBinding)
948 targetPrivate->anchors()->resetVerticalCenter();
949 QQmlPropertyPrivate::setBinding(d->vCenterProp, d->origVCenterBinding.data());
951 if (d->applyOrigBaseline) {
952 if (!d->origBaselineBinding)
953 targetPrivate->anchors()->resetBaseline();
954 QQmlPropertyPrivate::setBinding(d->baselineProp, d->origBaselineBinding.data());
958 if (d->anchorSet->d_func()->resetAnchors & QQuickAnchors::LeftAnchor) {
959 targetPrivate->anchors()->resetLeft();
960 QQmlPropertyPrivate::removeBinding(d->leftProp);
962 if (d->anchorSet->d_func()->resetAnchors & QQuickAnchors::RightAnchor) {
963 targetPrivate->anchors()->resetRight();
964 QQmlPropertyPrivate::removeBinding(d->rightProp);
966 if (d->anchorSet->d_func()->resetAnchors & QQuickAnchors::HCenterAnchor) {
967 targetPrivate->anchors()->resetHorizontalCenter();
968 QQmlPropertyPrivate::removeBinding(d->hCenterProp);
970 if (d->anchorSet->d_func()->resetAnchors & QQuickAnchors::TopAnchor) {
971 targetPrivate->anchors()->resetTop();
972 QQmlPropertyPrivate::removeBinding(d->topProp);
974 if (d->anchorSet->d_func()->resetAnchors & QQuickAnchors::BottomAnchor) {
975 targetPrivate->anchors()->resetBottom();
976 QQmlPropertyPrivate::removeBinding(d->bottomProp);
978 if (d->anchorSet->d_func()->resetAnchors & QQuickAnchors::VCenterAnchor) {
979 targetPrivate->anchors()->resetVerticalCenter();
980 QQmlPropertyPrivate::removeBinding(d->vCenterProp);
982 if (d->anchorSet->d_func()->resetAnchors & QQuickAnchors::BaselineAnchor) {
983 targetPrivate->anchors()->resetBaseline();
984 QQmlPropertyPrivate::removeBinding(d->baselineProp);
989 QQmlPropertyPrivate::setBinding(d->leftBinding.data());
991 QQmlPropertyPrivate::setBinding(d->rightBinding.data());
992 if (d->hCenterBinding)
993 QQmlPropertyPrivate::setBinding(d->hCenterBinding.data());
995 QQmlPropertyPrivate::setBinding(d->topBinding.data());
996 if (d->bottomBinding)
997 QQmlPropertyPrivate::setBinding(d->bottomBinding.data());
998 if (d->vCenterBinding)
999 QQmlPropertyPrivate::setBinding(d->vCenterBinding.data());
1000 if (d->baselineBinding)
1001 QQmlPropertyPrivate::setBinding(d->baselineBinding.data());
1009void QQuickAnchorChanges::reverse()
1011 Q_D(QQuickAnchorChanges);
1015 QQuickItemPrivate *targetPrivate = QQuickItemPrivate::get(d->target);
1017 if (d->leftBinding) {
1018 targetPrivate->anchors()->resetLeft();
1019 QQmlPropertyPrivate::removeBinding(d->leftBinding.data());
1021 if (d->rightBinding) {
1022 targetPrivate->anchors()->resetRight();
1023 QQmlPropertyPrivate::removeBinding(d->rightBinding.data());
1025 if (d->hCenterBinding) {
1026 targetPrivate->anchors()->resetHorizontalCenter();
1027 QQmlPropertyPrivate::removeBinding(d->hCenterBinding.data());
1029 if (d->topBinding) {
1030 targetPrivate->anchors()->resetTop();
1031 QQmlPropertyPrivate::removeBinding(d->topBinding.data());
1033 if (d->bottomBinding) {
1034 targetPrivate->anchors()->resetBottom();
1035 QQmlPropertyPrivate::removeBinding(d->bottomBinding.data());
1037 if (d->vCenterBinding) {
1038 targetPrivate->anchors()->resetVerticalCenter();
1039 QQmlPropertyPrivate::removeBinding(d->vCenterBinding.data());
1041 if (d->baselineBinding) {
1042 targetPrivate->anchors()->resetBaseline();
1043 QQmlPropertyPrivate::removeBinding(d->baselineBinding.data());
1047 if (d->origLeftBinding)
1048 QQmlPropertyPrivate::setBinding(d->leftProp, d->origLeftBinding.data());
1049 if (d->origRightBinding)
1050 QQmlPropertyPrivate::setBinding(d->rightProp, d->origRightBinding.data());
1051 if (d->origHCenterBinding)
1052 QQmlPropertyPrivate::setBinding(d->hCenterProp, d->origHCenterBinding.data());
1053 if (d->origTopBinding)
1054 QQmlPropertyPrivate::setBinding(d->topProp, d->origTopBinding.data());
1055 if (d->origBottomBinding)
1056 QQmlPropertyPrivate::setBinding(d->bottomProp, d->origBottomBinding.data());
1057 if (d->origVCenterBinding)
1058 QQmlPropertyPrivate::setBinding(d->vCenterProp, d->origVCenterBinding.data());
1059 if (d->origBaselineBinding)
1060 QQmlPropertyPrivate::setBinding(d->baselineProp, d->origBaselineBinding.data());
1063 QQuickAnchors::Anchors stateVAnchors = d->anchorSet->d_func()->usedAnchors & QQuickAnchors::Vertical_Mask;
1064 QQuickAnchors::Anchors origVAnchors = targetPrivate->anchors()->usedAnchors() & QQuickAnchors::Vertical_Mask;
1065 QQuickAnchors::Anchors resetVAnchors = d->anchorSet->d_func()->resetAnchors & QQuickAnchors::Vertical_Mask;
1066 QQuickAnchors::Anchors stateHAnchors = d->anchorSet->d_func()->usedAnchors & QQuickAnchors::Horizontal_Mask;
1067 QQuickAnchors::Anchors origHAnchors = targetPrivate->anchors()->usedAnchors() & QQuickAnchors::Horizontal_Mask;
1068 QQuickAnchors::Anchors resetHAnchors = d->anchorSet->d_func()->resetAnchors & QQuickAnchors::Horizontal_Mask;
1070 const QRectF oldGeometry(d->target->position(), d->target->size());
1071 bool stateSetWidth = (stateHAnchors &&
1072 stateHAnchors != QQuickAnchors::LeftAnchor &&
1073 stateHAnchors != QQuickAnchors::RightAnchor &&
1074 stateHAnchors != QQuickAnchors::HCenterAnchor);
1077 stateSetWidth |= ((stateHAnchors & QQuickAnchors::LeftAnchor)
1078 && (origHAnchors & QQuickAnchors::RightAnchor)
1079 && !(resetHAnchors & QQuickAnchors::RightAnchor))
1080 || ((stateHAnchors & QQuickAnchors::RightAnchor)
1081 && (origHAnchors & QQuickAnchors::LeftAnchor)
1082 && !(resetHAnchors & QQuickAnchors::LeftAnchor));
1083 bool origSetWidth = (origHAnchors &&
1084 origHAnchors != QQuickAnchors::LeftAnchor &&
1085 origHAnchors != QQuickAnchors::RightAnchor &&
1086 origHAnchors != QQuickAnchors::HCenterAnchor);
1087 if (d->origWidth.isValid() && stateSetWidth && !origSetWidth && !qt_is_nan(d->origWidth)) {
1088 targetPrivate->widthValidFlag =
true;
1089 if (targetPrivate->width != d->origWidth)
1090 targetPrivate->width.setValueBypassingBindings(d->origWidth);
1093 bool stateSetHeight = (stateVAnchors &&
1094 stateVAnchors != QQuickAnchors::TopAnchor &&
1095 stateVAnchors != QQuickAnchors::BottomAnchor &&
1096 stateVAnchors != QQuickAnchors::VCenterAnchor &&
1097 stateVAnchors != QQuickAnchors::BaselineAnchor);
1100 stateSetHeight |= ((stateVAnchors & QQuickAnchors::TopAnchor)
1101 && (origVAnchors & QQuickAnchors::BottomAnchor)
1102 && !(resetVAnchors & QQuickAnchors::BottomAnchor))
1103 || ((stateVAnchors & QQuickAnchors::BottomAnchor)
1104 && (origVAnchors & QQuickAnchors::TopAnchor)
1105 && !(resetVAnchors & QQuickAnchors::TopAnchor));
1106 bool origSetHeight = (origVAnchors &&
1107 origVAnchors != QQuickAnchors::TopAnchor &&
1108 origVAnchors != QQuickAnchors::BottomAnchor &&
1109 origVAnchors != QQuickAnchors::VCenterAnchor &&
1110 origVAnchors != QQuickAnchors::BaselineAnchor);
1111 if (d->origHeight.isValid() && stateSetHeight && !origSetHeight && !qt_is_nan(d->origHeight)) {
1112 targetPrivate->heightValidFlag =
true;
1113 if (targetPrivate->height != d->origHeight)
1114 targetPrivate->height.setValueBypassingBindings(d->origHeight);
1117 if (stateHAnchors && !origHAnchors && !qt_is_nan(d->origX) && d->origX != targetPrivate->x)
1118 targetPrivate->x.setValueBypassingBindings(d->origX);
1120 if (stateVAnchors && !origVAnchors && !qt_is_nan(d->origY) && d->origY != targetPrivate->y)
1121 targetPrivate->y.setValueBypassingBindings(d->origY);
1123 const QRectF newGeometry(d->target->position(), d->target->size());
1124 if (newGeometry != oldGeometry) {
1125 QQuickItemPrivate::DirtyType dirtyFlags {};
1126 if (newGeometry.topLeft() != oldGeometry.topLeft())
1127 dirtyFlags = QQuickItemPrivate::DirtyType(dirtyFlags | QQuickItemPrivate::Position);
1128 if (newGeometry.size() != oldGeometry.size())
1129 dirtyFlags = QQuickItemPrivate::DirtyType(dirtyFlags | QQuickItemPrivate::Size);
1130 targetPrivate->dirty(dirtyFlags);
1131 d->target->geometryChange(newGeometry, oldGeometry);
1140QList<QQuickStateAction> QQuickAnchorChanges::additionalActions()
const
1142 Q_D(
const QQuickAnchorChanges);
1143 QList<QQuickStateAction> extra;
1145 QQuickAnchors::Anchors combined = d->anchorSet->d_func()->usedAnchors | d->anchorSet->d_func()->resetAnchors;
1146 bool hChange = combined & QQuickAnchors::Horizontal_Mask;
1147 bool vChange = combined & QQuickAnchors::Vertical_Mask;
1150 QQuickStateAction a;
1151 if (hChange && d->fromX != d->toX) {
1152 a.property = QQmlProperty(d->target, QLatin1String(
"x"));
1156 if (vChange && d->fromY != d->toY) {
1157 a.property = QQmlProperty(d->target, QLatin1String(
"y"));
1161 if (hChange && d->fromWidth != d->toWidth) {
1162 a.property = QQmlProperty(d->target, QLatin1String(
"width"));
1163 a.toValue = d->toWidth;
1166 if (vChange && d->fromHeight != d->toHeight) {
1167 a.property = QQmlProperty(d->target, QLatin1String(
"height"));
1168 a.toValue = d->toHeight;
1181void QQuickAnchorChanges::saveOriginals()
1183 Q_D(QQuickAnchorChanges);
1187 d->origLeftBinding = QQmlPropertyPrivate::binding(d->leftProp);
1188 d->origRightBinding = QQmlPropertyPrivate::binding(d->rightProp);
1189 d->origHCenterBinding = QQmlPropertyPrivate::binding(d->hCenterProp);
1190 d->origTopBinding = QQmlPropertyPrivate::binding(d->topProp);
1191 d->origBottomBinding = QQmlPropertyPrivate::binding(d->bottomProp);
1192 d->origVCenterBinding = QQmlPropertyPrivate::binding(d->vCenterProp);
1193 d->origBaselineBinding = QQmlPropertyPrivate::binding(d->baselineProp);
1195 QQuickItemPrivate *targetPrivate = QQuickItemPrivate::get(d->target);
1196 if (targetPrivate->widthValid())
1197 d->origWidth = d->target->width();
1198 if (targetPrivate->heightValid())
1199 d->origHeight = d->target->height();
1200 d->origX = d->target->x();
1201 d->origY = d->target->y();
1203 d->applyOrigLeft = d->applyOrigRight = d->applyOrigHCenter = d->applyOrigTop
1204 = d->applyOrigBottom = d->applyOrigVCenter = d->applyOrigBaseline =
false;
1206 saveCurrentValues();
1209void QQuickAnchorChanges::copyOriginals(QQuickStateActionEvent *other)
1211 Q_D(QQuickAnchorChanges);
1212 QQuickAnchorChanges *ac =
static_cast<QQuickAnchorChanges*>(other);
1213 QQuickAnchorChangesPrivate *acp = ac->d_func();
1215 QQuickAnchors::Anchors combined = acp->anchorSet->d_func()->usedAnchors |
1216 acp->anchorSet->d_func()->resetAnchors;
1219 d->applyOrigLeft = (combined & QQuickAnchors::LeftAnchor);
1220 d->applyOrigRight = (combined & QQuickAnchors::RightAnchor);
1221 d->applyOrigHCenter = (combined & QQuickAnchors::HCenterAnchor);
1222 d->applyOrigTop = (combined & QQuickAnchors::TopAnchor);
1223 d->applyOrigBottom = (combined & QQuickAnchors::BottomAnchor);
1224 d->applyOrigVCenter = (combined & QQuickAnchors::VCenterAnchor);
1225 d->applyOrigBaseline = (combined & QQuickAnchors::BaselineAnchor);
1227 d->origLeftBinding = acp->origLeftBinding;
1228 d->origRightBinding = acp->origRightBinding;
1229 d->origHCenterBinding = acp->origHCenterBinding;
1230 d->origTopBinding = acp->origTopBinding;
1231 d->origBottomBinding = acp->origBottomBinding;
1232 d->origVCenterBinding = acp->origVCenterBinding;
1233 d->origBaselineBinding = acp->origBaselineBinding;
1235 d->origWidth = acp->origWidth;
1236 d->origHeight = acp->origHeight;
1237 d->origX = acp->origX;
1238 d->origY = acp->origY;
1242 acp->leftBinding =
nullptr;
1243 acp->rightBinding =
nullptr;
1244 acp->hCenterBinding =
nullptr;
1245 acp->topBinding =
nullptr;
1246 acp->bottomBinding =
nullptr;
1247 acp->vCenterBinding =
nullptr;
1248 acp->baselineBinding =
nullptr;
1249 acp->origLeftBinding =
nullptr;
1250 acp->origRightBinding =
nullptr;
1251 acp->origHCenterBinding =
nullptr;
1252 acp->origTopBinding =
nullptr;
1253 acp->origBottomBinding =
nullptr;
1254 acp->origVCenterBinding =
nullptr;
1255 acp->origBaselineBinding =
nullptr;
1257 saveCurrentValues();
1260void QQuickAnchorChanges::clearBindings()
1262 Q_D(QQuickAnchorChanges);
1267 d->fromX = d->target->x();
1268 d->fromY = d->target->y();
1269 d->fromWidth = d->target->width();
1270 d->fromHeight = d->target->height();
1272 QQuickItemPrivate *targetPrivate = QQuickItemPrivate::get(d->target);
1276 QQuickAnchors::Anchors combined = d->anchorSet->d_func()->resetAnchors |
1277 d->anchorSet->d_func()->usedAnchors;
1278 if (d->applyOrigLeft || (combined & QQuickAnchors::LeftAnchor)) {
1279 targetPrivate->anchors()->resetLeft();
1280 QQmlPropertyPrivate::removeBinding(d->leftProp);
1282 if (d->applyOrigRight || (combined & QQuickAnchors::RightAnchor)) {
1283 targetPrivate->anchors()->resetRight();
1284 QQmlPropertyPrivate::removeBinding(d->rightProp);
1286 if (d->applyOrigHCenter || (combined & QQuickAnchors::HCenterAnchor)) {
1287 targetPrivate->anchors()->resetHorizontalCenter();
1288 QQmlPropertyPrivate::removeBinding(d->hCenterProp);
1290 if (d->applyOrigTop || (combined & QQuickAnchors::TopAnchor)) {
1291 targetPrivate->anchors()->resetTop();
1292 QQmlPropertyPrivate::removeBinding(d->topProp);
1294 if (d->applyOrigBottom || (combined & QQuickAnchors::BottomAnchor)) {
1295 targetPrivate->anchors()->resetBottom();
1296 QQmlPropertyPrivate::removeBinding(d->bottomProp);
1298 if (d->applyOrigVCenter || (combined & QQuickAnchors::VCenterAnchor)) {
1299 targetPrivate->anchors()->resetVerticalCenter();
1300 QQmlPropertyPrivate::removeBinding(d->vCenterProp);
1302 if (d->applyOrigBaseline || (combined & QQuickAnchors::BaselineAnchor)) {
1303 targetPrivate->anchors()->resetBaseline();
1304 QQmlPropertyPrivate::removeBinding(d->baselineProp);
1319void QQuickAnchorChanges::rewind()
1321 Q_D(QQuickAnchorChanges);
1325 QQuickItemPrivate *targetPrivate = QQuickItemPrivate::get(d->target);
1326 const QRectF oldGeometry(d->target->position(), d->target->size());
1330 if (!qt_is_nan(d->rewindX) && d->rewindX != targetPrivate->x)
1331 targetPrivate->x.setValueBypassingBindings(d->rewindX);
1332 if (!qt_is_nan(d->rewindY) && d->rewindY != targetPrivate->y)
1333 targetPrivate->y.setValueBypassingBindings(d->rewindY);
1335 if (targetPrivate->widthValid() && !qt_is_nan(d->rewindWidth)) {
1336 targetPrivate->widthValidFlag =
true;
1337 if (d->rewindWidth != targetPrivate->width)
1338 targetPrivate->width.setValueBypassingBindings(d->rewindWidth);
1341 if (targetPrivate->heightValid() && !qt_is_nan(d->rewindHeight)) {
1342 targetPrivate->heightValidFlag =
true;
1343 if (d->rewindHeight != targetPrivate->height)
1344 targetPrivate->height.setValueBypassingBindings(d->rewindHeight);
1347 const QRectF newGeometry(d->target->position(), d->target->size());
1348 if (newGeometry != oldGeometry) {
1349 targetPrivate->dirty(QQuickItemPrivate::Position);
1350 d->target->geometryChange(newGeometry, oldGeometry);