[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