[vlc-devel] [PATCH 02/14] qt: notity VideoSurface position to the VideoSurfaceProvider

Pierre Lamot pierre at videolabs.io
Thu Oct 22 15:14:14 CEST 2020


---
 modules/gui/qt/maininterface/videosurface.cpp | 46 +++++++++++++++++--
 modules/gui/qt/maininterface/videosurface.hpp |  5 ++
 2 files changed, 46 insertions(+), 5 deletions(-)

diff --git a/modules/gui/qt/maininterface/videosurface.cpp b/modules/gui/qt/maininterface/videosurface.cpp
index de74872145..aa746d5890 100644
--- a/modules/gui/qt/maininterface/videosurface.cpp
+++ b/modules/gui/qt/maininterface/videosurface.cpp
@@ -118,6 +118,7 @@ void VideoSurfaceProvider::onKeyPressed(int key, Qt::KeyboardModifiers modifiers
 
 void VideoSurfaceProvider::onSurfaceSizeChanged(QSizeF size)
 {
+    emit surfaceSizeChanged(size);
     QMutexLocker lock(&m_voutlock);
     if (m_voutWindow)
         vout_window_ReportSize(m_voutWindow, size.width(), size.height());
@@ -132,6 +133,8 @@ VideoSurface::VideoSurface(QQuickItem* parent)
     setFlag(ItemAcceptsInputMethod, true);
     setFlag(ItemHasContents, true);
 
+    connect(this, &QQuickItem::xChanged, this, &VideoSurface::onSurfacePositionChanged);
+    connect(this, &QQuickItem::yChanged, this, &VideoSurface::onSurfacePositionChanged);
     connect(this, &QQuickItem::widthChanged, this, &VideoSurface::onSurfaceSizeChanged);
     connect(this, &QQuickItem::heightChanged, this, &VideoSurface::onSurfaceSizeChanged);
     connect(this, &QQuickItem::enabledChanged, this, &VideoSurface::onSurfaceSizeChanged);
@@ -281,22 +284,55 @@ QSGNode*VideoSurface::updatePaintNode(QSGNode* oldNode, QQuickItem::UpdatePaintN
         connect(this, &VideoSurface::mouseWheeled, m_provider, &VideoSurfaceProvider::onMouseWheeled);
         connect(this, &VideoSurface::keyPressed, m_provider, &VideoSurfaceProvider::onKeyPressed);
         connect(this, &VideoSurface::surfaceSizeChanged, m_provider, &VideoSurfaceProvider::onSurfaceSizeChanged);
+        connect(this, &VideoSurface::surfacePositionChanged, m_provider, &VideoSurfaceProvider::surfacePositionChanged);
 
         connect(m_provider, &VideoSurfaceProvider::hasVideoEmbedChanged, this, &VideoSurface::onProviderVideoChanged);
 
-        onSurfaceSizeChanged();
+        updatePositionAndSize();
     }
     return node;
 }
 
 void VideoSurface::onProviderVideoChanged(bool hasVideo)
 {
-    if (hasVideo)
-        emit surfaceSizeChanged(size() * this->window()->effectiveDevicePixelRatio());
+    if (!hasVideo)
+        return;
+    updatePositionAndSize();
 }
 
 void VideoSurface::onSurfaceSizeChanged()
 {
-    if (isEnabled())
-        emit surfaceSizeChanged(size() * this->window()->effectiveDevicePixelRatio());
+    if (!isEnabled())
+        return;
+    QQuickWindow* window = this->window();
+    if (!window)
+        return;
+    emit surfaceSizeChanged(size() * window->effectiveDevicePixelRatio());
+}
+
+void VideoSurface::onSurfacePositionChanged()
+{
+    if (!isEnabled())
+        return;
+
+    QPointF scenePosition = this->mapToScene(QPointF(0,0));
+    QQuickWindow* window = this->window();
+    if (!window)
+        return;
+    qreal dpr = this->window()->effectiveDevicePixelRatio();
+    emit surfacePositionChanged(scenePosition * dpr);
+}
+
+void VideoSurface::updatePositionAndSize()
+{
+    if (!isEnabled())
+        return;
+
+    QQuickWindow* window = this->window();
+    if (!window)
+        return;
+    qreal dpr = this->window()->effectiveDevicePixelRatio();
+    emit surfaceSizeChanged(size() * dpr);
+    QPointF scenePosition = this->mapToScene(QPointF(0, 0));
+    emit surfacePositionChanged(scenePosition * dpr);
 }
diff --git a/modules/gui/qt/maininterface/videosurface.hpp b/modules/gui/qt/maininterface/videosurface.hpp
index a3b70daa5a..d4570af5b7 100644
--- a/modules/gui/qt/maininterface/videosurface.hpp
+++ b/modules/gui/qt/maininterface/videosurface.hpp
@@ -43,6 +43,8 @@ signals:
     void ctxChanged(QmlMainContext*);
     bool videoEnabledChanged(bool);
     bool hasVideoEmbedChanged(bool);
+    void surfacePositionChanged(QPointF position);
+    void surfaceSizeChanged(QSizeF size);
 
 public slots:
     void onWindowClosed();
@@ -101,6 +103,7 @@ signals:
     void ctxChanged(QmlMainContext*);
     void sourceSizeChanged(QSize);
     void surfaceSizeChanged(QSizeF);
+    void surfacePositionChanged(QPointF);
 
     void mousePressed( int vlcButton );
     void mouseReleased( int vlcButton );
@@ -112,6 +115,8 @@ signals:
 protected slots:
     void onProviderVideoChanged(bool);
     void onSurfaceSizeChanged();
+    void onSurfacePositionChanged();
+    void updatePositionAndSize();
 
 private:
     QmlMainContext* m_mainCtx = nullptr;
-- 
2.25.1



More information about the vlc-devel mailing list