diff options
author | Sona Kurazyan <sona.kurazyan@qt.io> | 2021-01-25 17:12:11 +0100 |
---|---|---|
committer | Sona Kurazyan <sona.kurazyan@qt.io> | 2021-01-27 15:16:20 +0100 |
commit | 3a5a404a5379cd9595d1cc61486aff11148f4302 (patch) | |
tree | 125c0b9206f8d1cc03931f06f7f6cccd6805f0e5 | |
parent | 67ced4da5ab6f9bb63303a0850457d7a526866d3 (diff) |
Port QMovie to the new property system
Task-number: QTBUG-85520
Task-number: QTBUG-85521
Change-Id: Ib936020260cf01a5221b63fb1eb0ccb23f5553a3
Reviewed-by: Ivan Solovev <ivan.solovev@qt.io>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
-rw-r--r-- | src/gui/image/qmovie.cpp | 21 | ||||
-rw-r--r-- | src/gui/image/qmovie.h | 6 | ||||
-rw-r--r-- | tests/auto/gui/image/qmovie/tst_qmovie.cpp | 33 |
3 files changed, 56 insertions, 4 deletions
diff --git a/src/gui/image/qmovie.cpp b/src/gui/image/qmovie.cpp index 26ab96d0a3..0e1cf4481e 100644 --- a/src/gui/image/qmovie.cpp +++ b/src/gui/image/qmovie.cpp @@ -186,6 +186,7 @@ #include "qbuffer.h" #include "qdir.h" #include "private/qobject_p.h" +#include "private/qproperty_p.h" #define QMOVIE_INVALID_DELAY -1 @@ -248,7 +249,10 @@ public: void _q_loadNextFrame(bool starting); QImageReader *reader = nullptr; - int speed = 100; + + void setSpeed(int percentSpeed) { q_func()->setSpeed(percentSpeed); } + Q_OBJECT_COMPAT_PROPERTY_WITH_ARGS(QMoviePrivate, int, speed, &QMoviePrivate::setSpeed, 100) + QMovie::MovieState movieState = QMovie::NotRunning; QRect frameRect; QPixmap currentPixmap; @@ -258,7 +262,8 @@ public: int nextDelay = 0; int playCounter = -1; qint64 initialDevicePos = 0; - QMovie::CacheMode cacheMode = QMovie::CacheNone; + Q_OBJECT_BINDABLE_PROPERTY_WITH_ARGS(QMoviePrivate, QMovie::CacheMode, cacheMode, + QMovie::CacheNone) bool haveReadAll = false; bool isFirstIteration = true; QMap<int, QFrameInfo> frameMap; @@ -933,6 +938,12 @@ int QMovie::speed() const return d->speed; } +QBindable<int> QMovie::bindableSpeed() +{ + Q_D(QMovie); + return &d->speed; +} + /*! Starts the movie. QMovie will enter \l Running state, and start emitting updated() and resized() as the movie progresses. @@ -1055,6 +1066,12 @@ void QMovie::setCacheMode(CacheMode cacheMode) d->cacheMode = cacheMode; } +QBindable<QMovie::CacheMode> QMovie::bindableCacheMode() +{ + Q_D(QMovie); + return &d->cacheMode; +} + QT_END_NAMESPACE #include "moc_qmovie.cpp" diff --git a/src/gui/image/qmovie.h b/src/gui/image/qmovie.h index e13c528894..e1452ed760 100644 --- a/src/gui/image/qmovie.h +++ b/src/gui/image/qmovie.h @@ -64,8 +64,8 @@ class Q_GUI_EXPORT QMovie : public QObject { Q_OBJECT Q_DECLARE_PRIVATE(QMovie) - Q_PROPERTY(int speed READ speed WRITE setSpeed) - Q_PROPERTY(CacheMode cacheMode READ cacheMode WRITE setCacheMode) + Q_PROPERTY(int speed READ speed WRITE setSpeed BINDABLE bindableSpeed) + Q_PROPERTY(CacheMode cacheMode READ cacheMode WRITE setCacheMode BINDABLE bindableCacheMode) public: enum MovieState { NotRunning, @@ -115,12 +115,14 @@ public: int currentFrameNumber() const; int speed() const; + QBindable<int> bindableSpeed(); QSize scaledSize(); void setScaledSize(const QSize &size); CacheMode cacheMode() const; void setCacheMode(CacheMode mode); + QBindable<CacheMode> bindableCacheMode(); Q_SIGNALS: void started(); diff --git a/tests/auto/gui/image/qmovie/tst_qmovie.cpp b/tests/auto/gui/image/qmovie/tst_qmovie.cpp index a54bf03fb2..c1abeccba5 100644 --- a/tests/auto/gui/image/qmovie/tst_qmovie.cpp +++ b/tests/auto/gui/image/qmovie/tst_qmovie.cpp @@ -64,6 +64,7 @@ private slots: void infiniteLoop(); #endif void emptyMovie(); + void bindings(); }; // Testing get/set functions @@ -230,5 +231,37 @@ void tst_QMovie::emptyMovie() QCOMPARE(movie.currentFrameNumber(), -1); } +void tst_QMovie::bindings() +{ + QMovie movie; + + // speed property + QCOMPARE(movie.speed(), 100); + QProperty<int> speed; + movie.bindableSpeed().setBinding(Qt::makePropertyBinding(speed)); + speed = 50; + QCOMPARE(movie.speed(), 50); + + QProperty<int> speedObserver; + speedObserver.setBinding([&] { return movie.speed(); }); + movie.setSpeed(75); + QCOMPARE(speedObserver, 75); + + // chacheMode property + QCOMPARE(movie.cacheMode(), QMovie::CacheNone); + QProperty<QMovie::CacheMode> cacheMode; + movie.bindableCacheMode().setBinding(Qt::makePropertyBinding(cacheMode)); + cacheMode = QMovie::CacheAll; + QCOMPARE(movie.cacheMode(), QMovie::CacheAll); + + movie.setCacheMode(QMovie::CacheNone); + + QProperty<QMovie::CacheMode> cacheModeObserver; + QCOMPARE(cacheModeObserver, QMovie::CacheNone); + cacheModeObserver.setBinding([&] { return movie.cacheMode(); }); + movie.setCacheMode(QMovie::CacheAll); + QCOMPARE(cacheModeObserver, QMovie::CacheAll); +} + QTEST_MAIN(tst_QMovie) #include "tst_qmovie.moc" |