summaryrefslogtreecommitdiffstats
path: root/src/multimedia/qml
diff options
context:
space:
mode:
authorAndrew den Exter <andrew.den-exter@nokia.com>2010-02-05 01:16:31 (GMT)
committerAndrew den Exter <andrew.den-exter@nokia.com>2010-02-05 01:16:31 (GMT)
commit1b9b3fc62da13adc667890a84c61cc873fb941c0 (patch)
tree3034c455575fc51fe3ae4096ac954848beafbd0a /src/multimedia/qml
parent5fae580d87add7fab16a9bda20bcc5e42df02879 (diff)
downloadQt-1b9b3fc62da13adc667890a84c61cc873fb941c0.zip
Qt-1b9b3fc62da13adc667890a84c61cc873fb941c0.tar.gz
Qt-1b9b3fc62da13adc667890a84c61cc873fb941c0.tar.bz2
Make the paused property of the QML media elements indepent of playing.
Diffstat (limited to 'src/multimedia/qml')
-rw-r--r--src/multimedia/qml/qmlaudio.cpp17
-rw-r--r--src/multimedia/qml/qmlgraphicsvideo.cpp15
-rw-r--r--src/multimedia/qml/qmlmediabase.cpp65
-rw-r--r--src/multimedia/qml/qmlmediabase_p.h1
4 files changed, 73 insertions, 25 deletions
diff --git a/src/multimedia/qml/qmlaudio.cpp b/src/multimedia/qml/qmlaudio.cpp
index adff49b..f56b6c3 100644
--- a/src/multimedia/qml/qmlaudio.cpp
+++ b/src/multimedia/qml/qmlaudio.cpp
@@ -86,8 +86,13 @@ QmlAudio::~QmlAudio()
*/
void QmlAudio::play()
-{
+{
m_playerControl->play();
+
+ if (m_paused) {
+ m_paused = false;
+ emit pausedChanged();
+ }
}
/*!
@@ -99,6 +104,11 @@ void QmlAudio::play()
void QmlAudio::pause()
{
m_playerControl->pause();
+
+ if (!m_paused && m_state == QMediaPlayer::PausedState) {
+ m_paused = true;
+ emit pausedChanged();
+ }
}
/*!
@@ -110,6 +120,11 @@ void QmlAudio::pause()
void QmlAudio::stop()
{
m_playerControl->stop();
+
+ if (m_paused) {
+ m_paused = false;
+ emit pausedChanged();
+ }
}
/*!
diff --git a/src/multimedia/qml/qmlgraphicsvideo.cpp b/src/multimedia/qml/qmlgraphicsvideo.cpp
index 784c7b6..2889793 100644
--- a/src/multimedia/qml/qmlgraphicsvideo.cpp
+++ b/src/multimedia/qml/qmlgraphicsvideo.cpp
@@ -338,6 +338,11 @@ void QmlGraphicsVideo::setFillMode(FillMode mode)
void QmlGraphicsVideo::play()
{
m_playerControl->play();
+
+ if (m_paused) {
+ m_paused = false;
+ emit pausedChanged();
+ }
}
/*!
@@ -349,6 +354,11 @@ void QmlGraphicsVideo::play()
void QmlGraphicsVideo::pause()
{
m_playerControl->pause();
+
+ if (!m_paused && m_state == QMediaPlayer::PausedState) {
+ m_paused = true;
+ emit pausedChanged();
+ }
}
/*!
@@ -360,6 +370,11 @@ void QmlGraphicsVideo::pause()
void QmlGraphicsVideo::stop()
{
m_playerControl->stop();
+
+ if (m_paused) {
+ m_paused = false;
+ emit pausedChanged();
+ }
}
void QmlGraphicsVideo::paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget *)
diff --git a/src/multimedia/qml/qmlmediabase.cpp b/src/multimedia/qml/qmlmediabase.cpp
index 17ec8a6..17be240 100644
--- a/src/multimedia/qml/qmlmediabase.cpp
+++ b/src/multimedia/qml/qmlmediabase.cpp
@@ -132,28 +132,33 @@ private:
void QmlMediaBase::_q_stateChanged(QMediaPlayer::State state)
{
if (state != m_state) {
- QMediaPlayer::State oldState = state;
+ QMediaPlayer::State oldState = m_state;
m_state = state;
- switch (state) {
- case QMediaPlayer::PlayingState:
- if (oldState == QMediaPlayer::StoppedState)
- emit started();
- else if (oldState == QMediaPlayer::PausedState)
- emit resumed();
- break;
- case QMediaPlayer::PausedState:
- emit paused();
- case QMediaPlayer::StoppedState:
+ if (state == QMediaPlayer::StoppedState) {
emit stopped();
- break;
- default:
- break;
+ emit playingChanged();
+ } else if (oldState == QMediaPlayer::StoppedState) {
+ emit started();
+ emit playingChanged();
+ } else if (oldState == QMediaPlayer::PausedState) {
+ m_paused = false;
+
+ emit resumed();
+ emit pausedChanged();
}
- emit playingChanged();
- emit pausedChanged();
+ if (state == m_state && state == QMediaPlayer::PausedState) {
+ bool wasPaused = m_paused;
+
+ m_paused = true;
+
+ emit paused();
+
+ if (!wasPaused)
+ emit pausedChanged();
+ }
if (m_state == QMediaPlayer::PlayingState
|| m_status == QMediaPlayer::BufferingMedia
@@ -218,6 +223,7 @@ QmlMediaBase::QmlMediaBase()
, m_state(QMediaPlayer::StoppedState)
, m_status(QMediaPlayer::NoMedia)
, m_error(QMediaPlayer::NoError)
+ , m_paused(false)
{
}
@@ -312,23 +318,34 @@ bool QmlMediaBase::isPlaying() const
void QmlMediaBase::setPlaying(bool playing)
{
- if (playing && m_state == QMediaPlayer::StoppedState)
- m_playerControl->play();
- else if (!playing)
+ if (playing && m_state == QMediaPlayer::StoppedState) {
+ if (m_paused)
+ m_playerControl->pause();
+ else
+ m_playerControl->play();
+ } else if (!playing) {
m_playerControl->stop();
+ }
}
bool QmlMediaBase::isPaused() const
{
- return m_state == QMediaPlayer::PausedState;
+ return m_paused;
}
void QmlMediaBase::setPaused(bool paused)
{
- if (paused && m_state == QMediaPlayer::PlayingState)
- m_playerControl->pause();
- if (!paused && m_state == QMediaPlayer::PausedState)
- m_playerControl->play();
+ if (m_paused != paused) {
+ if (paused && m_state == QMediaPlayer::PlayingState) {
+ m_playerControl->pause();
+ } else if (!paused && m_state == QMediaPlayer::PausedState) {
+ m_playerControl->play();
+ } else {
+ m_paused = paused;
+
+ emit pausedChanged();
+ }
+ }
}
int QmlMediaBase::duration() const
diff --git a/src/multimedia/qml/qmlmediabase_p.h b/src/multimedia/qml/qmlmediabase_p.h
index d6c0a00..873e4c3 100644
--- a/src/multimedia/qml/qmlmediabase_p.h
+++ b/src/multimedia/qml/qmlmediabase_p.h
@@ -145,6 +145,7 @@ protected:
QMediaPlayer::State m_state;
QMediaPlayer::MediaStatus m_status;
QMediaPlayer::Error m_error;
+ bool m_paused;
QString m_errorString;
friend class QmlMediaBaseAnimation;