From 1b9b3fc62da13adc667890a84c61cc873fb941c0 Mon Sep 17 00:00:00 2001 From: Andrew den Exter Date: Fri, 5 Feb 2010 11:16:31 +1000 Subject: Make the paused property of the QML media elements indepent of playing. --- src/multimedia/qml/qmlaudio.cpp | 17 ++++++++- src/multimedia/qml/qmlgraphicsvideo.cpp | 15 ++++++++ src/multimedia/qml/qmlmediabase.cpp | 65 +++++++++++++++++++++------------ src/multimedia/qml/qmlmediabase_p.h | 1 + 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; -- cgit v0.12