summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas McGuire <thomas.mcguire.qnx@kdab.com>2012-09-05 13:25:03 +0200
committerQt by Nokia <qt-info@nokia.com>2012-09-06 14:56:34 +0200
commitbce8b5486d477d20132183110c5bb84b313a5c65 (patch)
tree93c30d17db5dbd1fa321ce75d5f4a3a8670c0939
parent06302999da91d6e32ddf9c65171994e375f739ed (diff)
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 <dmytro.poplavskiy@gmail.com>
-rw-r--r--src/imports/multimedia/qdeclarativevideooutput_window.cpp17
-rw-r--r--src/imports/multimedia/qdeclarativevideooutput_window_p.h1
-rw-r--r--src/plugins/blackberry/bbvideowindowcontrol.cpp3
3 files changed, 18 insertions, 3 deletions
diff --git a/src/imports/multimedia/qdeclarativevideooutput_window.cpp b/src/imports/multimedia/qdeclarativevideooutput_window.cpp
index d85a20f54..50c4fd6d1 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 af2e686f1..c1c7d2fa2 100644
--- a/src/imports/multimedia/qdeclarativevideooutput_window_p.h
+++ b/src/imports/multimedia/qdeclarativevideooutput_window_p.h
@@ -65,6 +65,7 @@ public:
private:
QPointer<QVideoWindowControl> m_videoWindowControl;
+ bool m_visible;
};
QT_END_NAMESPACE
diff --git a/src/plugins/blackberry/bbvideowindowcontrol.cpp b/src/plugins/blackberry/bbvideowindowcontrol.cpp
index 690561914..3934c31b5 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");
}
}
}