diff options
author | Glenn Watson <glenn.watson@nokia.com> | 2012-07-02 09:10:49 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-07-04 03:31:04 +0200 |
commit | f18b66ac6cfc734d217ec9d44876774f25e5d900 (patch) | |
tree | 7d8dffc65886f87a88c76d1ec29adca00d23b167 /tests/auto/qml/qqmlvaluetypes/testtypes.h | |
parent | ac9b09d4299bae22f6aa4b5423092167761d1c8d (diff) |
Make Behaviors work correctly with value types.
When a value type is referenced by sub-component a grouped
property is built. This code path did not handle behaviors being
declared on the entire value type. Add support for value interceptors
in this code path. Also issue an additional write to the value
type property before calling the interceptor on components
that are not being intercepted, so that the other
sub-components don't get stale values during write back.
Task-number: QTBUG-22625
Change-Id: I3365f422dfa1ab2e536e19575efcceceffb85e10
Reviewed-by: Michael Brasser <michael.brasser@nokia.com>
Diffstat (limited to 'tests/auto/qml/qqmlvaluetypes/testtypes.h')
-rw-r--r-- | tests/auto/qml/qqmlvaluetypes/testtypes.h | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/tests/auto/qml/qqmlvaluetypes/testtypes.h b/tests/auto/qml/qqmlvaluetypes/testtypes.h index 813c58567f..f4ad151cdf 100644 --- a/tests/auto/qml/qqmlvaluetypes/testtypes.h +++ b/tests/auto/qml/qqmlvaluetypes/testtypes.h @@ -214,6 +214,66 @@ private: QQmlProperty prop; }; +// This test interceptor deliberately swizzles RGBA -> ABGR +class MyColorInterceptor : public QObject, public QQmlPropertyValueInterceptor +{ + Q_OBJECT + Q_INTERFACES(QQmlPropertyValueInterceptor) +public: + virtual void setTarget(const QQmlProperty &p) { prop = p; } + virtual void write(const QVariant &v) + { + QColor c = v.value<QColor>(); + + int r, g, b, a; + c.getRgb(&r, &g, &b, &a); + c.setRgb(a, b, g, r); + + QQmlPropertyPrivate::write(prop, c, QQmlPropertyPrivate::BypassInterceptor); + } + +private: + QQmlProperty prop; +}; + +class MyFloatSetInterceptor : public QObject, public QQmlPropertyValueInterceptor +{ + Q_OBJECT + Q_INTERFACES(QQmlPropertyValueInterceptor) +public: + virtual void setTarget(const QQmlProperty &p) { prop = p; } + virtual void write(const QVariant &) + { + QQmlPropertyPrivate::write(prop, 0.0f, QQmlPropertyPrivate::BypassInterceptor); + } + +private: + QQmlProperty prop; +}; + +class MyFloatIgnoreInterceptor : public QObject, public QQmlPropertyValueInterceptor +{ + Q_OBJECT + Q_INTERFACES(QQmlPropertyValueInterceptor) +public: + virtual void setTarget(const QQmlProperty &) {} + virtual void write(const QVariant &) {} +}; + +class MyColorObject : public QObject +{ + Q_OBJECT + + Q_PROPERTY(QColor color READ color WRITE setColor) + +public: + MyColorObject() {} + + QColor m_color; + QColor color() const { return m_color; } + void setColor(const QColor &v) { m_color = v; } +}; + void registerTypes(); #endif // TESTTYPES_H |