summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJustin McPherson <justin.mcpherson@nokia.com>2010-02-25 07:28:27 (GMT)
committerJustin McPherson <justin.mcpherson@nokia.com>2010-02-25 07:28:27 (GMT)
commit75d61cbd7d2c72abb1fcf486c97bbb7429aea81b (patch)
tree53554843152f28dea7834e5f3f40f854f51af591 /src
parentbd7ef8002b008816f5233fdd40742a12e0861b82 (diff)
parentb469289a6ed067be92eb24239c59f5cd1f5f7956 (diff)
downloadQt-75d61cbd7d2c72abb1fcf486c97bbb7429aea81b.zip
Qt-75d61cbd7d2c72abb1fcf486c97bbb7429aea81b.tar.gz
Qt-75d61cbd7d2c72abb1fcf486c97bbb7429aea81b.tar.bz2
Merge branch 'master' of git@scm.dev.nokia.troll.no:qt/qt-qml
Diffstat (limited to 'src')
-rw-r--r--src/declarative/util/qdeclarativepropertychanges.cpp29
-rw-r--r--src/declarative/util/qdeclarativestateoperations.cpp23
2 files changed, 40 insertions, 12 deletions
diff --git a/src/declarative/util/qdeclarativepropertychanges.cpp b/src/declarative/util/qdeclarativepropertychanges.cpp
index 6c2e256..454fb06 100644
--- a/src/declarative/util/qdeclarativepropertychanges.cpp
+++ b/src/declarative/util/qdeclarativepropertychanges.cpp
@@ -60,7 +60,7 @@ QT_BEGIN_NAMESPACE
/*!
\qmlclass PropertyChanges QDeclarativePropertyChanges
- \since 4.7
+ \since 4.7
\brief The PropertyChanges element describes new property values for a state.
PropertyChanges provides a state change that modifies the properties of an item.
@@ -98,6 +98,33 @@ QT_BEGIN_NAMESPACE
}
\endqml
+ You can reset a property in a state change by assigning \c undefined. In the following
+ example we reset \c theText's width when we enter state1. This will give the text its
+ natural width (which is the whole string on one line).
+
+ \qml
+ import Qt 4.6
+
+ Rectangle {
+ width: 640
+ height: 480
+ Text {
+ id: theText
+ width: 50
+ wrap: true
+ text: "a text string that is longer than 50 pixels"
+ }
+
+ states: State {
+ name: "state1"
+ PropertyChanges {
+ target: theText
+ width: undefined
+ }
+ }
+ }
+ \endqml
+
Changes to an Item's parent or anchors should be done using the associated change elements
(ParentChange and AnchorChanges, respectively) rather than PropertyChanges.
diff --git a/src/declarative/util/qdeclarativestateoperations.cpp b/src/declarative/util/qdeclarativestateoperations.cpp
index 6001a84..98edf85 100644
--- a/src/declarative/util/qdeclarativestateoperations.cpp
+++ b/src/declarative/util/qdeclarativestateoperations.cpp
@@ -80,7 +80,7 @@ void QDeclarativeParentChangePrivate::doChange(QDeclarativeItem *targetParent, Q
//### for backwards direction, can we just restore original x, y, scale, rotation
Q_Q(QDeclarativeParentChange);
bool ok;
- const QTransform &transform = target->itemTransform(targetParent, &ok);
+ const QTransform &transform = target->parentItem()->itemTransform(targetParent, &ok);
if (transform.type() >= QTransform::TxShear || !ok) {
qmlInfo(q) << QDeclarativeParentChange::tr("Unable to preserve appearance under complex transform");
ok = false;
@@ -111,8 +111,9 @@ void QDeclarativeParentChangePrivate::doChange(QDeclarativeItem *targetParent, Q
}
}
- qreal xt = transform.dx();
- qreal yt = transform.dy();
+ const QPointF &point = transform.map(QPointF(target->x(),target->y()));
+ qreal x = point.x();
+ qreal y = point.y();
if (ok && target->transformOrigin() != QDeclarativeItem::TopLeft) {
qreal tempxt = target->transformOriginPoint().x();
qreal tempyt = target->transformOriginPoint().y();
@@ -121,18 +122,18 @@ void QDeclarativeParentChangePrivate::doChange(QDeclarativeItem *targetParent, Q
t.rotate(rotation);
t.scale(scale, scale);
t.translate(tempxt, tempyt);
- QPointF offset = t.map(QPointF(0,0));
- xt += offset.x();
- yt += offset.y();
+ const QPointF &offset = t.map(QPointF(0,0));
+ x += offset.x();
+ y += offset.y();
}
target->setParentItem(targetParent);
if (ok) {
- //qDebug() << xt << yt << rotation << scale;
- target->setX(xt);
- target->setY(yt);
- target->setRotation(rotation);
- target->setScale(scale);
+ //qDebug() << x << y << rotation << scale;
+ target->setX(x);
+ target->setY(y);
+ target->setRotation(target->rotation() + rotation);
+ target->setScale(target->scale() * scale);
}
} else if (target) {
target->setParentItem(targetParent);