[PATCH] enable zooming when --no-qt-video-autoresize is set=0A=

Erwan Tulou brezhoneg1 at yahoo.fr
Tue Apr 21 21:58:55 CEST 2009


=0A=
---=0A=
 modules/gui/qt4/main_interface.cpp |   75 =
++++++++++++++++++++++++++++++------=0A=
 modules/gui/qt4/main_interface.hpp |   20 +++++++++-=0A=
 2 files changed, 82 insertions(+), 13 deletions(-)=0A=
=0A=
diff --git a/modules/gui/qt4/main_interface.cpp =
b/modules/gui/qt4/main_interface.cpp=0A=
index f209038..6d4936f 100644=0A=
--- a/modules/gui/qt4/main_interface.cpp=0A=
+++ b/modules/gui/qt4/main_interface.cpp=0A=
@@ -68,8 +68,11 @@ static int PopupMenuCB( vlc_object_t *p_this, const =
char *psz_variable,=0A=
                         vlc_value_t old_val, vlc_value_t new_val, void =
*param );=0A=
 static int IntfShowCB( vlc_object_t *p_this, const char *psz_variable,=0A=
                        vlc_value_t old_val, vlc_value_t new_val, void =
*param );=0A=
+static int ZoomCB( vlc_object_t *p_this, const char *psz_variable,=0A=
+                   vlc_value_t old_val, vlc_value_t new_val, void =
*param );=0A=
 =0A=
-MainInterface::MainInterface( intf_thread_t *_p_intf ) : QVLCMW( =
_p_intf )=0A=
+MainInterface::MainInterface( intf_thread_t *_p_intf )=0A=
+    : QVLCMW( _p_intf ), b_zooming( false )=0A=
 {=0A=
     /* Variables initialisation */=0A=
     // need_components_update =3D false;=0A=
@@ -195,6 +198,14 @@ MainInterface::MainInterface( intf_thread_t =
*_p_intf ) : QVLCMW( _p_intf )=0A=
                  this, updateSystrayTooltipStatus( int ) );=0A=
     }=0A=
 =0A=
+    /* tracking zoom changes to adapt even if keep_size is true  */=0A=
+    if( b_keep_size )=0A=
+    {=0A=
+        vlc_mutex_init( &zoom_lock );=0A=
+        CONNECT( THEMIM->getIM(), voutChanged( bool ),=0A=
+                 this, updateZoomCallback( bool ) );=0A=
+    }=0A=
+=0A=
     /* END CONNECTS ON IM */=0A=
 =0A=
     dialogHandler =3D new DialogHandler (p_intf);=0A=
@@ -309,6 +320,9 @@ MainInterface::~MainInterface()=0A=
     settings->setValue( "mainBasedSize", mainBasedSize );=0A=
     settings->setValue( "mainVideoSize", mainVideoSize );=0A=
 =0A=
+    if( b_keep_size )=0A=
+        vlc_mutex_destroy( &zoom_lock );=0A=
+=0A=
     if( bgWidget )=0A=
         settings->setValue( "backgroundSize", bgWidget->size() );=0A=
 =0A=
@@ -557,6 +571,19 @@ int MainInterface::privacyDialog( =
QList<ConfigControl *> *controls )=0A=
     return privacy->exec();=0A=
 }=0A=
 =0A=
+void MainInterface::updateZoomCallback( bool b_video )=0A=
+{=0A=
+    if( b_video )=0A=
+    {=0A=
+        vout_thread_t* p_vout =3D THEMIM->getVout();=0A=
+        if( p_vout )=0A=
+        {=0A=
+            var_AddCallback( p_vout, "zoom", ZoomCB, p_intf );=0A=
+            vlc_object_release( p_vout );=0A=
+        }=0A=
+    }=0A=
+}=0A=
+=0A=
 =0A=
 /**********************************************************************=0A=
  * Handling of sizing of the components=0A=
@@ -571,23 +598,32 @@ int MainInterface::privacyDialog( =
QList<ConfigControl *> *controls )=0A=
    If you think this would be better, please FIXME it...=0A=
 */=0A=
 =0A=
-QSize MainInterface::sizeHint() const=0A=
+QSize MainInterface::sizeHint()=0A=
 {=0A=
     if( b_keep_size )=0A=
     {=0A=
-        if( i_visualmode =3D=3D QT_ALWAYS_VIDEO_MODE ||=0A=
-            i_visualmode =3D=3D QT_MINIMAL_MODE )=0A=
+        bool b_zoom =3D getZooming();=0A=
+        if( !b_zoom )=0A=
         {=0A=
-                return mainVideoSize;=0A=
+            if( i_visualmode =3D=3D QT_ALWAYS_VIDEO_MODE ||=0A=
+                i_visualmode =3D=3D QT_MINIMAL_MODE )=0A=
+            {=0A=
+                    return mainVideoSize;=0A=
+            }=0A=
+            else=0A=
+            {=0A=
+                if( VISIBLE( bgWidget) ||=0A=
+                    ( videoIsActive && videoWidget->isVisible() )=0A=
+                  )=0A=
+                    return mainVideoSize;=0A=
+                else=0A=
+                    return mainBasedSize;=0A=
+            }=0A=
         }=0A=
         else=0A=
         {=0A=
-            if( VISIBLE( bgWidget) ||=0A=
-                ( videoIsActive && videoWidget->isVisible() )=0A=
-              )=0A=
-                return mainVideoSize;=0A=
-            else=0A=
-                return mainBasedSize;=0A=
+            /* reset zooming */=0A=
+            setZooming( false );=0A=
         }=0A=
     }=0A=
 =0A=
@@ -701,9 +737,12 @@ WId MainInterface::requestVideo( vout_thread_t =
*p_nvout, int *pi_x,=0A=
                                  int *pi_y, unsigned int *pi_width,=0A=
                                  unsigned int *pi_height )=0A=
 {=0A=
+    bool b_zoom =3D b_keep_size ? getZooming() : false;=0A=
+=0A=
     /* Request the videoWidget */=0A=
     WId ret =3D videoWidget->request( p_nvout,pi_x, pi_y,=0A=
-                                    pi_width, pi_height, b_keep_size );=0A=
+                                    pi_width, pi_height,=0A=
+                                    b_keep_size && !b_zoom );=0A=
     if( ret ) /* The videoWidget is available */=0A=
     {=0A=
         /* Did we have a bg ? Hide it! */=0A=
@@ -1269,3 +1308,15 @@ static int IntfShowCB( vlc_object_t *p_this, =
const char *psz_variable,=0A=
      return VLC_SUCCESS;=0A=
 }=0A=
 =0A=
+/***********************************************************************=
******=0A=
+ * ZoomCB: callback triggered by the zoom variable (vout thread)=0A=
+ =
*************************************************************************=
****/=0A=
+static int ZoomCB( vlc_object_t *p_this, const char *psz_variable,=0A=
+                   vlc_value_t old_val, vlc_value_t new_val, void =
*param )=0A=
+{=0A=
+    intf_thread_t *p_intf =3D (intf_thread_t *)param;=0A=
+    p_intf->p_sys->p_mi->setZooming( true );=0A=
+=0A=
+    return VLC_SUCCESS;=0A=
+}=0A=
+=0A=
diff --git a/modules/gui/qt4/main_interface.hpp =
b/modules/gui/qt4/main_interface.hpp=0A=
index e61fa9c..f396e14 100644=0A=
--- a/modules/gui/qt4/main_interface.hpp=0A=
+++ b/modules/gui/qt4/main_interface.hpp=0A=
@@ -87,7 +87,22 @@ public:=0A=
     int getControlsVisibilityStatus();=0A=
 =0A=
     /* Sizehint() */=0A=
-    virtual QSize sizeHint() const;=0A=
+    virtual QSize sizeHint();=0A=
+=0A=
+    /* tracking zooming */=0A=
+    bool getZooming( )=0A=
+    {=0A=
+        vlc_mutex_lock( &zoom_lock );=0A=
+        bool b_ret =3D b_zooming;=0A=
+        vlc_mutex_unlock( &zoom_lock );=0A=
+        return b_ret;=0A=
+    }=0A=
+    void setZooming( bool b_zoom )=0A=
+    {=0A=
+        vlc_mutex_lock( &zoom_lock );=0A=
+        b_zooming =3D b_zoom;=0A=
+        vlc_mutex_unlock( &zoom_lock );=0A=
+    }=0A=
 =0A=
 protected:=0A=
     void dropEventPlay( QDropEvent *, bool);=0A=
@@ -140,6 +155,8 @@ private:=0A=
     bool                 b_keep_size;         ///< persistent =
resizeable window=0A=
     QSize                mainBasedSize;       ///< based Wnd (normal =
mode only)=0A=
     QSize                mainVideoSize;       ///< Wnd with video (all =
modes)=0A=
+    bool                 b_zooming;           ///< is zooming being =
triggered ?=0A=
+    vlc_mutex_t          zoom_lock;           ///  lock to protect =
b_zooming=0A=
     int                  i_visualmode;        ///< Visual Mode=0A=
     pl_dock_e            i_pl_dock;=0A=
     bool                 isDocked() { return ( i_pl_dock !=3D =
PL_UNDOCKED ); }=0A=
@@ -169,6 +186,7 @@ private slots:=0A=
     void doComponentsUpdate();=0A=
     void setName( QString );=0A=
     void setVLCWindowsTitle( QString title =3D "" );=0A=
+    void updateZoomCallback( bool );=0A=
 #if 0=0A=
     void visual();=0A=
 #endif=0A=
-- =0A=
1.5.2.5=0A=
=0A=

------=_NextPart_000_0001_01C9C2D1.819F8B80--




More information about the vlc-devel mailing list