7#include <private/qquickstate_p_p.h>
9#include <QtQml/qqmlinfo.h>
11#include <QtCore/qmath.h>
12#include <QtCore/qpointer.h>
31 std::unique_ptr<StateSnapshot>
orig;
32 std::unique_ptr<StateSnapshot>
rewind;
34 QQmlNullableValue<QQmlScriptString>
xString;
35 QQmlNullableValue<QQmlScriptString>
yString;
52 qmlWarning(
q) << QQuickParentChange::tr(
"Unable to preserve appearance under complex transform");
59 if (
ok && !isRotate) {
63 qmlWarning(
q) << QQuickParentChange::tr(
"Unable to preserve appearance under non-uniform scale");
66 }
else if (
ok && isRotate) {
70 qmlWarning(
q) << QQuickParentChange::tr(
"Unable to preserve appearance under non-uniform scale");
77 qmlWarning(
q) << QQuickParentChange::tr(
"Unable to preserve appearance under scale of 0");
87 target->setParentItem(targetParent);
109 target->setParentItem(targetParent);
162 return d->xString.value();
174 return d->xString.isValid();
180 return d->yString.value();
192 return d->yString.isValid();
198 return d->widthString.value();
210 return d->widthString.isValid();
216 return d->heightString.value();
228 return d->heightString.isValid();
234 return d->scaleString.value();
246 return d->scaleString.isValid();
252 return d->rotationString.value();
264 return d->rotationString.isValid();
270 return d->orig ?
d->orig->parent :
nullptr;
308 if (!
d->target || !
d->parent)
317 if (
d->xString.isValid()) {
329 xa.toBinding = newBinding;
330 xa.fromValue = xa.property.read();
331 xa.deletableToBinding =
true;
336 if (
d->yString.isValid()) {
348 ya.toBinding = newBinding;
349 ya.fromValue = ya.property.read();
350 ya.deletableToBinding =
true;
355 if (
d->scaleString.isValid()) {
367 sa.toBinding = newBinding;
368 sa.fromValue = sa.property.read();
369 sa.deletableToBinding =
true;
374 if (
d->rotationString.isValid()) {
386 ra.toBinding = newBinding;
387 ra.fromValue =
ra.property.read();
388 ra.deletableToBinding =
true;
393 if (
d->widthString.isValid()) {
404 wa.toBinding = newBinding;
405 wa.fromValue = wa.property.read();
406 wa.deletableToBinding =
true;
411 if (
d->heightString.isValid()) {
422 ha.toBinding = newBinding;
423 ha.fromValue = ha.property.read();
424 ha.deletableToBinding =
true;
438 *
d->orig = *
d->rewind;
444 d->doChange(
d->parent);
460 target->setSize(
QSizeF(snapshot->width, snapshot->height));
462 target->setScale(snapshot->scale);
463 target->setRotation(snapshot->rotation);
464 target->setParentItem(snapshot->parent);
465 if (snapshot->stackBefore)
466 target->stackBefore(snapshot->stackBefore);
473 d->reverseRewindHelper(
d->orig);
487 return (
d->target == otherPC->object());
500 d->rewind->x =
d->target->x();
501 d->rewind->y =
d->target->y();
502 d->rewind->scale =
d->target->scale();
503 d->rewind->width =
d->target->width();
504 d->rewind->height =
d->target->height();
505 d->rewind->rotation =
d->target->rotation();
507 d->rewind->parent =
d->target->parentItem();
508 d->rewind->stackBefore =
nullptr;
510 if (!
d->rewind->parent)
513 QList<QQuickItem *>
children =
d->rewind->parent->childItems();
525 d->reverseRewindHelper(
d->rewind);
612 return d->bottomScript;
619 d->bottomScript = edge;
634 return d->vCenterScript;
641 d->vCenterScript = edge;
656 return d->baselineScript;
663 d->baselineScript = edge;
678 return d->leftScript;
685 d->leftScript = edge;
700 return d->rightScript;
707 d->rightScript = edge;
722 return d->hCenterScript;
729 d->hCenterScript = edge;
824 d->leftBinding =
d->rightBinding =
d->hCenterBinding =
d->topBinding
825 =
d->bottomBinding =
d->vCenterBinding =
d->baselineBinding =
nullptr;
837 d->leftBinding->setTarget(
d->leftProp);
841 d->rightBinding->setTarget(
d->rightProp);
845 d->hCenterBinding->setTarget(
d->hCenterProp);
849 d->topBinding->setTarget(
d->topProp);
853 d->bottomBinding->setTarget(
d->bottomProp);
857 d->vCenterBinding->setTarget(
d->vCenterProp);
861 d->baselineBinding->setTarget(
d->baselineProp);
921 if (
d->applyOrigLeft) {
922 if (!
d->origLeftBinding)
923 targetPrivate->anchors()->resetLeft();
926 if (
d->applyOrigRight) {
927 if (!
d->origRightBinding)
928 targetPrivate->anchors()->resetRight();
931 if (
d->applyOrigHCenter) {
932 if (!
d->origHCenterBinding)
933 targetPrivate->anchors()->resetHorizontalCenter();
936 if (
d->applyOrigTop) {
937 if (!
d->origTopBinding)
938 targetPrivate->anchors()->resetTop();
941 if (
d->applyOrigBottom) {
942 if (!
d->origBottomBinding)
943 targetPrivate->anchors()->resetBottom();
946 if (
d->applyOrigVCenter) {
947 if (!
d->origVCenterBinding)
948 targetPrivate->anchors()->resetVerticalCenter();
951 if (
d->applyOrigBaseline) {
952 if (!
d->origBaselineBinding)
953 targetPrivate->anchors()->resetBaseline();
959 targetPrivate->anchors()->resetLeft();
963 targetPrivate->anchors()->resetRight();
967 targetPrivate->anchors()->resetHorizontalCenter();
971 targetPrivate->anchors()->resetTop();
975 targetPrivate->anchors()->resetBottom();
979 targetPrivate->anchors()->resetVerticalCenter();
983 targetPrivate->anchors()->resetBaseline();
992 if (
d->hCenterBinding)
996 if (
d->bottomBinding)
998 if (
d->vCenterBinding)
1000 if (
d->baselineBinding)
1017 if (
d->leftBinding) {
1018 targetPrivate->anchors()->resetLeft();
1021 if (
d->rightBinding) {
1022 targetPrivate->anchors()->resetRight();
1025 if (
d->hCenterBinding) {
1026 targetPrivate->anchors()->resetHorizontalCenter();
1029 if (
d->topBinding) {
1030 targetPrivate->anchors()->resetTop();
1033 if (
d->bottomBinding) {
1034 targetPrivate->anchors()->resetBottom();
1037 if (
d->vCenterBinding) {
1038 targetPrivate->anchors()->resetVerticalCenter();
1041 if (
d->baselineBinding) {
1042 targetPrivate->anchors()->resetBaseline();
1047 if (
d->origLeftBinding)
1049 if (
d->origRightBinding)
1051 if (
d->origHCenterBinding)
1053 if (
d->origTopBinding)
1055 if (
d->origBottomBinding)
1057 if (
d->origVCenterBinding)
1059 if (
d->origBaselineBinding)
1068 const QRectF oldGeometry(
d->target->position(),
d->target->size());
1069 bool stateSetWidth = (stateHAnchors &&
1076 bool origSetWidth = (origHAnchors &&
1080 if (
d->origWidth.isValid() && stateSetWidth && !origSetWidth && !
qt_is_nan(
d->origWidth)) {
1081 targetPrivate->widthValidFlag =
true;
1082 if (targetPrivate->width !=
d->origWidth)
1083 targetPrivate->width.setValueBypassingBindings(
d->origWidth);
1086 bool stateSetHeight = (stateVAnchors &&
1094 bool origSetHeight = (origVAnchors &&
1099 if (
d->origHeight.isValid() && stateSetHeight && !origSetHeight && !
qt_is_nan(
d->origHeight)) {
1100 targetPrivate->heightValidFlag =
true;
1101 if (targetPrivate->height !=
d->origHeight)
1102 targetPrivate->height.setValueBypassingBindings(
d->origHeight);
1105 if (stateHAnchors && !origHAnchors && !
qt_is_nan(
d->origX) &&
d->origX != targetPrivate->x)
1106 targetPrivate->x.setValueBypassingBindings(
d->origX);
1108 if (stateVAnchors && !origVAnchors && !
qt_is_nan(
d->origY) &&
d->origY != targetPrivate->y)
1109 targetPrivate->y.setValueBypassingBindings(
d->origY);
1111 const QRectF newGeometry(
d->target->position(),
d->target->size());
1112 if (newGeometry != oldGeometry) {
1116 if (newGeometry.
size() != oldGeometry.
size())
1118 targetPrivate->dirty(dirtyFlags);
1119 d->target->geometryChange(newGeometry, oldGeometry);
1131 QList<QQuickStateAction> extra;
1133 QQuickAnchors::Anchors combined =
d->anchorSet->d_func()->usedAnchors |
d->anchorSet->d_func()->resetAnchors;
1139 if (hChange &&
d->fromX !=
d->toX) {
1144 if (vChange &&
d->fromY !=
d->toY) {
1149 if (hChange &&
d->fromWidth !=
d->toWidth) {
1151 a.toValue =
d->toWidth;
1154 if (vChange &&
d->fromHeight !=
d->toHeight) {
1156 a.toValue =
d->toHeight;
1184 if (targetPrivate->widthValid())
1185 d->origWidth =
d->target->width();
1186 if (targetPrivate->heightValid())
1187 d->origHeight =
d->target->height();
1188 d->origX =
d->target->x();
1189 d->origY =
d->target->y();
1191 d->applyOrigLeft =
d->applyOrigRight =
d->applyOrigHCenter =
d->applyOrigTop
1192 =
d->applyOrigBottom =
d->applyOrigVCenter =
d->applyOrigBaseline =
false;
1204 acp->anchorSet->d_func()->resetAnchors;
1215 d->origLeftBinding = acp->origLeftBinding;
1216 d->origRightBinding = acp->origRightBinding;
1217 d->origHCenterBinding = acp->origHCenterBinding;
1218 d->origTopBinding = acp->origTopBinding;
1219 d->origBottomBinding = acp->origBottomBinding;
1220 d->origVCenterBinding = acp->origVCenterBinding;
1221 d->origBaselineBinding = acp->origBaselineBinding;
1223 d->origWidth = acp->origWidth;
1224 d->origHeight = acp->origHeight;
1225 d->origX = acp->origX;
1226 d->origY = acp->origY;
1230 acp->leftBinding =
nullptr;
1231 acp->rightBinding =
nullptr;
1232 acp->hCenterBinding =
nullptr;
1233 acp->topBinding =
nullptr;
1234 acp->bottomBinding =
nullptr;
1235 acp->vCenterBinding =
nullptr;
1236 acp->baselineBinding =
nullptr;
1237 acp->origLeftBinding =
nullptr;
1238 acp->origRightBinding =
nullptr;
1239 acp->origHCenterBinding =
nullptr;
1240 acp->origTopBinding =
nullptr;
1241 acp->origBottomBinding =
nullptr;
1242 acp->origVCenterBinding =
nullptr;
1243 acp->origBaselineBinding =
nullptr;
1255 d->fromX =
d->target->x();
1256 d->fromY =
d->target->y();
1257 d->fromWidth =
d->target->width();
1258 d->fromHeight =
d->target->height();
1264 QQuickAnchors::Anchors combined =
d->anchorSet->d_func()->resetAnchors |
1265 d->anchorSet->d_func()->usedAnchors;
1267 targetPrivate->anchors()->resetLeft();
1271 targetPrivate->anchors()->resetRight();
1275 targetPrivate->anchors()->resetHorizontalCenter();
1279 targetPrivate->anchors()->resetTop();
1283 targetPrivate->anchors()->resetBottom();
1287 targetPrivate->anchors()->resetVerticalCenter();
1291 targetPrivate->anchors()->resetBaseline();
1314 const QRectF oldGeometry(
d->target->position(),
d->target->size());
1318 if (!
qt_is_nan(
d->rewindX) &&
d->rewindX != targetPrivate->x)
1319 targetPrivate->x.setValueBypassingBindings(
d->rewindX);
1320 if (!
qt_is_nan(
d->rewindY) &&
d->rewindY != targetPrivate->y)
1321 targetPrivate->y.setValueBypassingBindings(
d->rewindY);
1323 if (targetPrivate->widthValid() && !
qt_is_nan(
d->rewindWidth)) {
1324 targetPrivate->widthValidFlag =
true;
1325 if (
d->rewindWidth != targetPrivate->width)
1326 targetPrivate->width.setValueBypassingBindings(
d->rewindWidth);
1329 if (targetPrivate->heightValid() && !
qt_is_nan(
d->rewindHeight)) {
1330 targetPrivate->heightValidFlag =
true;
1331 if (
d->rewindHeight != targetPrivate->height)
1332 targetPrivate->height.setValueBypassingBindings(
d->rewindHeight);
1335 const QRectF newGeometry(
d->target->position(),
d->target->size());
1336 if (newGeometry != oldGeometry) {
1338 d->target->geometryChange(newGeometry, oldGeometry);
1349 d->rewindLeft = targetPrivate->anchors()->left();
1350 d->rewindRight = targetPrivate->anchors()->right();
1351 d->rewindHCenter = targetPrivate->anchors()->horizontalCenter();
1352 d->rewindTop = targetPrivate->anchors()->top();
1353 d->rewindBottom = targetPrivate->anchors()->bottom();
1354 d->rewindVCenter = targetPrivate->anchors()->verticalCenter();
1355 d->rewindBaseline = targetPrivate->anchors()->baseline();
1357 d->rewindX =
d->target->x();
1358 d->rewindY =
d->target->y();
1359 d->rewindWidth =
d->target->width();
1360 d->rewindHeight =
d->target->height();
1369 d->toX =
d->target->x();
1370 d->toY =
d->target->y();
1371 d->toWidth =
d->target->width();
1372 d->toHeight =
d->target->height();
1377#include <moc_qquickstateoperations_p.cpp>
qsizetype size() const noexcept
const_reference at(qsizetype i) const noexcept
T value(qsizetype i) const
const QObjectList & children() const
Returns a list of child objects.
\inmodule QtCore\reentrant
constexpr qreal x() const noexcept
Returns the x coordinate of this point.
constexpr qreal y() const noexcept
Returns the y coordinate of this point.
static QQmlAnyBinding createFromScriptString(const QQmlProperty &prop, const QQmlScriptString &script, QObject *obj, QQmlContext *ctxt)
static QQmlBinding * create(const QQmlPropertyData *, const QQmlScriptString &, QObject *, QQmlContext *)
static void setBinding(QQmlAbstractBinding *binding, BindingFlags flags=None, QQmlPropertyData::WriteFlags writeFlags=QQmlPropertyData::DontRemoveBinding)
static void removeBinding(const QQmlProperty &that)
static QQmlPropertyPrivate * get(const QQmlProperty &p)
static QQmlAbstractBinding * binding(QObject *, QQmlPropertyIndex index)
The QQmlProperty class abstracts accessing properties on objects created from QML.
The QQmlScriptString class encapsulates a script and its context.
qreal numberLiteral(bool *ok) const
If the content of the QQmlScriptString is a number literal, returns that number and sets ok to true.
bool isUndefinedLiteral() const
Returns whether the content of the QQmlScriptString is the undefined literal.
QQmlBinding::Ptr baselineBinding
QQmlAbstractBinding::Ptr origLeftBinding
QQuickAnchorChangesPrivate()
QQmlBinding::Ptr leftBinding
QQmlAbstractBinding::Ptr origBottomBinding
QQuickAnchorLine rewindTop
QQmlAbstractBinding::Ptr origTopBinding
QQuickAnchorSet * anchorSet
QQmlBinding::Ptr bottomBinding
QQmlNullableValue< qreal > origWidth
QQuickAnchorLine rewindLeft
QQmlAbstractBinding::Ptr origHCenterBinding
QQmlBinding::Ptr vCenterBinding
QQmlNullableValue< qreal > origHeight
~QQuickAnchorChangesPrivate()
QQuickAnchorLine rewindBaseline
QQmlProperty baselineProp
QQuickAnchorLine rewindHCenter
QQuickAnchorLine rewindBottom
QQmlBinding::Ptr hCenterBinding
QQmlAbstractBinding::Ptr origRightBinding
QQuickAnchorLine rewindVCenter
QQmlBinding::Ptr rightBinding
QQuickAnchorLine rewindRight
QQmlAbstractBinding::Ptr origVCenterBinding
QQmlBinding::Ptr topBinding
QQmlAbstractBinding::Ptr origBaselineBinding
QQuickAnchorChanges(QObject *parent=nullptr)
void saveCurrentValues() override
void setObject(QQuickItem *)
bool changesBindings() override
QList< QQuickStateAction > additionalActions() const
void saveOriginals() override
void copyOriginals(QQuickStateActionEvent *) override
ActionList actions() override
void execute() override
\qmlpropertygroup QtQuick::AnchorChanges::anchors \qmlproperty AnchorLine QtQuick::AnchorChanges::anc...
void clearBindings() override
bool isReversable() override
EventType type() const override
QQuickItem * object() const
\qmlproperty Item QtQuick::AnchorChanges::target This property holds the \l Item for which the anchor...
bool mayOverride(QQuickStateActionEvent *other) override
void saveTargetValues() override
QQuickAnchorSet * anchors
QQuickAnchors::Anchors usedAnchors
QQuickAnchors::Anchors resetAnchors
QQmlScriptString rightScript
QQmlScriptString leftScript
QQmlScriptString topScript
QQmlScriptString bottomScript
QQmlScriptString vCenterScript
QQmlScriptString baselineScript
QQmlScriptString hCenterScript
QQmlScriptString baseline
QQuickAnchors::Anchors usedAnchors() const
QQuickAnchorSet(QObject *parent=nullptr)
QQmlScriptString verticalCenter
QQmlScriptString horizontalCenter
virtual ~QQuickAnchorSet()
void setBottom(const QQmlScriptString &edge)
void setLeft(const QQmlScriptString &edge)
void setTop(const QQmlScriptString &edge)
void resetVerticalCenter()
void resetHorizontalCenter()
void setHorizontalCenter(const QQmlScriptString &edge)
void setVerticalCenter(const QQmlScriptString &edge)
void setBaseline(const QQmlScriptString &edge)
void setRight(const QQmlScriptString &edge)
static QQuickItemPrivate * get(QQuickItem *item)
The QQuickItem class provides the most basic of all visual items in \l {Qt Quick}.
QQmlNullableValue< QQmlScriptString > xString
QQmlNullableValue< QQmlScriptString > rotationString
void reverseRewindHelper(const std::unique_ptr< StateSnapshot > &snapshot)
QQmlNullableValue< QQmlScriptString > scaleString
void doChange(QQuickItem *targetParent)
std::unique_ptr< StateSnapshot > orig
QQmlNullableValue< QQmlScriptString > widthString
std::unique_ptr< StateSnapshot > rewind
QQmlNullableValue< QQmlScriptString > yString
QPointer< QQuickItem > parent
QQmlNullableValue< QQmlScriptString > heightString
void setObject(QQuickItem *)
void setRotation(const QQmlScriptString &rotation)
void saveCurrentValues() override
EventType type() const override
void saveOriginals() override
ActionList actions() override
void setX(const QQmlScriptString &x)
QQuickItem * object() const
\qmlproperty Item QtQuick::ParentChange::target This property holds the item to be reparented
void setY(const QQmlScriptString &y)
void setHeight(const QQmlScriptString &height)
QQmlScriptString rotation
bool mayOverride(QQuickStateActionEvent *other) override
QQuickParentChange(QObject *parent=nullptr)
\qmltype ParentChange \instantiates QQuickParentChange \inqmlmodule QtQuick
void setWidth(const QQmlScriptString &width)
bool rotationIsSet() const
void setScale(const QQmlScriptString &scale)
void setParent(QQuickItem *)
bool isReversable() override
QQuickItem * originalParent() const
QQuickStateActionEvent * event
QList< QQuickStateAction > ActionList
\inmodule QtCore\reentrant
constexpr QPointF topLeft() const noexcept
Returns the position of the rectangle's top-left corner.
constexpr QSizeF size() const noexcept
Returns the size of the rectangle.
Combined button and popup list for selecting options.
qfloat16 qSqrt(qfloat16 f)
constexpr float qRadiansToDegrees(float radians)
static Q_DECL_CONST_FUNCTION bool qt_is_nan(double d)
GLint GLint GLint GLint GLint x
[0]
GLint GLsizei GLsizei height
GLboolean GLboolean GLboolean GLboolean a
[7]
GLenum GLuint GLintptr offset
GLuint GLenum GLenum transform
GLdouble GLdouble GLdouble GLdouble q
GLenum GLenum GLenum GLenum GLenum scale
QQmlContext * qmlContext(const QObject *obj)
Q_QML_EXPORT QQmlInfo qmlWarning(const QObject *me)
QPointer< QQuickItem > stackBefore
QPointer< QQuickItem > parent