[vlc-devel] [PATCH 3/3] Qt: constrain the position of the FSC within the screen bounds

Ludovic Fauvet etix at videolan.org
Wed Dec 21 14:58:38 CET 2011


---
 modules/gui/qt4/components/controller.cpp |   30 +++++++++++++++++-----------
 modules/gui/qt4/components/controller.hpp |    2 +-
 2 files changed, 19 insertions(+), 13 deletions(-)

diff --git a/modules/gui/qt4/components/controller.cpp b/modules/gui/qt4/components/controller.cpp
index 3d1bd78..39975e4 100644
--- a/modules/gui/qt4/components/controller.cpp
+++ b/modules/gui/qt4/components/controller.cpp
@@ -707,8 +707,8 @@ FullscreenControllerWidget::FullscreenControllerWidget( intf_thread_t *_p_i, QWi
                            : AbstractController( _p_i, _parent )
 {
     RTL_UNAFFECTED_WIDGET
-    i_mouse_last_x      = -1;
-    i_mouse_last_y      = -1;
+    i_mouse_pos_x      = -1;
+    i_mouse_pos_y      = -1;
     b_mouse_over        = false;
     i_mouse_last_move_x = -1;
     i_mouse_last_move_y = -1;
@@ -970,16 +970,22 @@ void FullscreenControllerWidget::mouseMoveEvent( QMouseEvent *event )
 {
     if( event->buttons() == Qt::LeftButton )
     {
-        if( i_mouse_last_x == -1 || i_mouse_last_y == -1 )
+        if( i_mouse_pos_x == -1 || i_mouse_pos_y == -1 )
             return;
 
-        int i_moveX = event->globalX() - i_mouse_last_x;
-        int i_moveY = event->globalY() - i_mouse_last_y;
+        int i_targetX = event->globalX() - i_mouse_pos_x;
+        int i_targetY = event->globalY() - i_mouse_pos_y;
 
-        move( x() + i_moveX, y() + i_moveY );
+        QRect screen = QApplication::desktop()->screenGeometry( targetScreen() );
+        QRect pos = geometry();
 
-        i_mouse_last_x = event->globalX();
-        i_mouse_last_y = event->globalY();
+        pos.moveTo( i_targetX, i_targetY );
+        if( screen.top()    > pos.top()    )  i_targetY = screen.top();
+        if( screen.bottom() < pos.bottom() )  i_targetY = screen.bottom() - pos.height();
+        if( screen.left()   > pos.left()   )  i_targetX = screen.left();
+        if( screen.right()  < pos.right()  )  i_targetX = screen.right() - pos.width();
+
+        move( i_targetX, i_targetY );
     }
 }
 
@@ -990,16 +996,16 @@ void FullscreenControllerWidget::mouseMoveEvent( QMouseEvent *event )
 void FullscreenControllerWidget::mousePressEvent( QMouseEvent *event )
 {
     if( isWideFSC ) return;
-    i_mouse_last_x = event->globalX();
-    i_mouse_last_y = event->globalY();
+    i_mouse_pos_x = event->x();
+    i_mouse_pos_y = event->y();
     event->accept();
 }
 
 void FullscreenControllerWidget::mouseReleaseEvent( QMouseEvent *event )
 {
     if( isWideFSC ) return;
-    i_mouse_last_x = -1;
-    i_mouse_last_y = -1;
+    i_mouse_pos_x = -1;
+    i_mouse_pos_y = -1;
     event->accept();
 
     // Save the new FSC position
diff --git a/modules/gui/qt4/components/controller.hpp b/modules/gui/qt4/components/controller.hpp
index 42ce504..70d192b 100644
--- a/modules/gui/qt4/components/controller.hpp
+++ b/modules/gui/qt4/components/controller.hpp
@@ -298,7 +298,7 @@ private:
     float f_opacity;
 #endif
 
-    int i_mouse_last_x, i_mouse_last_y;
+    int i_mouse_pos_x, i_mouse_pos_y;
     bool b_mouse_over;
     int i_screennumber;
     QRect screenRes;
-- 
1.7.8




More information about the vlc-devel mailing list