From: Thomas McGuire Date: Wed, 5 Sep 2012 11:25:03 +0000 (+0200) Subject: Hide the video overlay when the QML element is hidden X-Git-Tag: upstream/5.2.95+rc1~198 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=bce8b5486d477d20132183110c5bb84b313a5c65;p=platform%2Fupstream%2Fqtmultimedia.git Hide the video overlay when the QML element is hidden An display invalid rect is used for invisible QML items. Change-Id: Ifb2a25f1c5387ab8cef1359ac6c3e2f90a42cd10 Reviewed-by: Dmytro Poplavskiy --- diff --git a/src/imports/multimedia/qdeclarativevideooutput_window.cpp b/src/imports/multimedia/qdeclarativevideooutput_window.cpp index d85a20f..50c4fd6 100644 --- a/src/imports/multimedia/qdeclarativevideooutput_window.cpp +++ b/src/imports/multimedia/qdeclarativevideooutput_window.cpp @@ -48,7 +48,8 @@ QT_BEGIN_NAMESPACE QDeclarativeVideoWindowBackend::QDeclarativeVideoWindowBackend(QDeclarativeVideoOutput *parent) - : QDeclarativeVideoBackend(parent) + : QDeclarativeVideoBackend(parent), + m_visible(true) { } @@ -76,11 +77,21 @@ bool QDeclarativeVideoWindowBackend::init(QMediaService *service) void QDeclarativeVideoWindowBackend::itemChange(QQuickItem::ItemChange change, const QQuickItem::ItemChangeData &changeData) { - if (change == QQuickItem::ItemSceneChange && m_videoWindowControl) { + if (!m_videoWindowControl) + return; + + switch (change) { + case QQuickItem::ItemVisibleHasChanged: + m_visible = changeData.boolValue; + updateGeometry(); + break; + case QQuickItem::ItemSceneChange: if (changeData.window) m_videoWindowControl->setWinId(changeData.window->winId()); else m_videoWindowControl->setWinId(0); + break; + default: break; } } @@ -115,7 +126,7 @@ void QDeclarativeVideoWindowBackend::updateGeometry() }; const QRectF canvasRect = q->mapRectToScene(QRectF(0, 0, q->width(), q->height())); - m_videoWindowControl->setDisplayRect(canvasRect.toAlignedRect()); + m_videoWindowControl->setDisplayRect(m_visible ? canvasRect.toAlignedRect() : QRect()); } QSGNode *QDeclarativeVideoWindowBackend::updatePaintNode(QSGNode *oldNode, diff --git a/src/imports/multimedia/qdeclarativevideooutput_window_p.h b/src/imports/multimedia/qdeclarativevideooutput_window_p.h index af2e686..c1c7d2f 100644 --- a/src/imports/multimedia/qdeclarativevideooutput_window_p.h +++ b/src/imports/multimedia/qdeclarativevideooutput_window_p.h @@ -65,6 +65,7 @@ public: private: QPointer m_videoWindowControl; + bool m_visible; }; QT_END_NAMESPACE diff --git a/src/plugins/blackberry/bbvideowindowcontrol.cpp b/src/plugins/blackberry/bbvideowindowcontrol.cpp index 6905619..3934c31 100644 --- a/src/plugins/blackberry/bbvideowindowcontrol.cpp +++ b/src/plugins/blackberry/bbvideowindowcontrol.cpp @@ -292,10 +292,13 @@ void BbVideoWindowControl::updateVideoPosition() if (m_window != 0) { const int position[2] = { topLeft.x(), topLeft.y() }; const int size[2] = { width, height }; + const int visible = m_displayRect.isValid(); if (screen_set_window_property_iv(m_window, SCREEN_PROPERTY_POSITION, position) != 0) perror("Setting video position failed"); if (screen_set_window_property_iv(m_window, SCREEN_PROPERTY_SIZE, size) != 0) perror("Setting video size failed"); + if (screen_set_window_property_iv(m_window, SCREEN_PROPERTY_VISIBLE, &visible) != 0) + perror("Setting video visibility failed"); } } }