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>
bb10
Sona Kurazyan 2021-01-25 17:12:11 +01:00
parent 67ced4da5a
commit 3a5a404a53
3 changed files with 56 additions and 4 deletions

View File

@ -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"

View File

@ -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();

View File

@ -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"