[vlc-commits] Qt: Add moving main window on any part of a window

Alexander Terentyev git at videolan.org
Thu Feb 7 17:52:13 CET 2013


vlc | branch: master | Alexander Terentyev <lex.terentyev at gmail.com> | Wed Dec  5 11:00:04 2012 +1100| [6b2d303b9274d9e03bbb52a30a1e8572a6d581fb] | committer: Jean-Baptiste Kempf

Qt: Add moving main window on any part of a window

Signed-off-by: Jean-Baptiste Kempf <jb at videolan.org>

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=6b2d303b9274d9e03bbb52a30a1e8572a6d581fb
---

 modules/gui/qt4/main_interface.cpp |   35 +++++++++++++++++++++++++++++++++++
 modules/gui/qt4/main_interface.hpp |    9 +++++++++
 2 files changed, 44 insertions(+)

diff --git a/modules/gui/qt4/main_interface.cpp b/modules/gui/qt4/main_interface.cpp
index 730fcae..db52d71 100644
--- a/modules/gui/qt4/main_interface.cpp
+++ b/modules/gui/qt4/main_interface.cpp
@@ -326,6 +326,11 @@ void MainInterface::computeMinimumSize()
     setMinimumWidth( minWidth );
 }
 
+inline void MainInterface::moveWindow( int offsetX, int offsetY )
+{
+    move( x() + offsetX, y() + offsetY );
+}
+
 /*****************************
  *   Main UI handling        *
  *****************************/
@@ -1387,6 +1392,36 @@ bool MainInterface::eventFilter( QObject *obj, QEvent *event )
     }
 }
 
+void MainInterface::mousePressEvent( QMouseEvent *event )
+{
+    b_customMoving = Qt::LeftButton == event->button();
+    lastCustomMovePos = event->globalPos();
+}
+
+void MainInterface::mouseMoveEvent( QMouseEvent *event )
+{
+    if( b_customMoving )
+    {
+        moveWindow(
+            event->globalX() - lastCustomMovePos.x(),
+            event->globalY() - lastCustomMovePos.y()
+        );
+        lastCustomMovePos = event->globalPos();
+    }
+}
+
+void MainInterface::mouseReleaseEvent( QMouseEvent *event )
+{
+    if( b_customMoving )
+    {
+        moveWindow(
+            event->globalX() - lastCustomMovePos.x(),
+            event->globalY() - lastCustomMovePos.y()
+        );
+    }
+    b_customMoving = false;
+}
+
 void MainInterface::toolBarConfUpdated()
 {
     QApplication::postEvent( this, new QEvent( MainInterface::ToolbarsNeedRebuild ) );
diff --git a/modules/gui/qt4/main_interface.hpp b/modules/gui/qt4/main_interface.hpp
index 4c5b1fd..2cbf267 100644
--- a/modules/gui/qt4/main_interface.hpp
+++ b/modules/gui/qt4/main_interface.hpp
@@ -105,6 +105,9 @@ protected:
     virtual void keyPressEvent( QKeyEvent *);
     virtual void wheelEvent( QWheelEvent * );
     virtual bool eventFilter(QObject *, QEvent *);
+    virtual void mousePressEvent( QMouseEvent * );
+    virtual void mouseMoveEvent( QMouseEvent * );
+    virtual void mouseReleaseEvent( QMouseEvent * );
 
 private:
     /* Main Widgets Creation */
@@ -128,6 +131,9 @@ private:
     void computeMinimumSize();
 
     /* */
+    inline void moveWindow( int offsetX, int offsetY );
+
+    /* */
     QSettings           *settings;
     QSystemTrayIcon     *sysTray;
     QMenu               *systrayMenu;
@@ -155,6 +161,8 @@ private:
 
     QMap<QWidget *, QSize> stackWidgetsSizes;
 
+    QPoint              lastCustomMovePos;
+
     /* Flags */
     unsigned             i_notificationSetting; /// Systray Notifications
     bool                 b_autoresize;          ///< persistent resizable window
@@ -173,6 +181,7 @@ private:
 
     bool                 b_hasPausedWhenMinimized;
     bool                 b_statusbarVisible;
+    bool                 b_customMoving;        ///< Is the window moving by dragging ?
 
 #ifdef WIN32
     HIMAGELIST himl;



More information about the vlc-commits mailing list