[vlc-devel] [PATCH] Constrain Qt interface to desktop size on video resize

Mario Speiß 1034-135 at online.de
Tue Jan 15 18:38:17 CET 2013


Did someone try this patch?
At least on Windows systems this is really helpful if not on other 
systems, too.

Regards,

Mario

On 06.01.2013 19:21, Mario Speiß wrote:
> When hi res video is played, it may happen that VLC window is far larger than
> the desktop when resizeStack is called due to video changes.
> So before passing the original w/h to resizeStack, it is checked first if the
> new window size would reach outside the right/bottom of the desktop. If that
> would be the case, new w/h are calculated to not get larger than the area
> available.
>
> Calculations are done from the current window position, i.e. if VLC is at the
> bottom right of the desktop the resulting window should be rather small
> compared to if VLC were at the top left of the desktop.
>
> No moving of the VLC is done, only the w/h for resizeStack are validated.
>
> The corresponding option is added in qt4.cpp.
>
> Regards,
> Mario
> ---
>   modules/gui/qt4/main_interface.cpp |   29 +++++++++++++++++++++++++++++
>   modules/gui/qt4/qt4.cpp            |    6 ++++++
>   2 files changed, 35 insertions(+), 0 deletions(-)
>
> diff --git a/modules/gui/qt4/main_interface.cpp b/modules/gui/qt4/main_interface.cpp
> index f479e4e..5fdb82e
> --- a/modules/gui/qt4/main_interface.cpp
> +++ b/modules/gui/qt4/main_interface.cpp
> @@ -710,7 +710,36 @@ void MainInterface::setVideoSize( unsigned int w, unsigned int h )
>   void MainInterface::videoSizeChanged( int w, int h )
>   {
>       if( !playlistWidget || playlistWidget->artContainer->currentWidget() != videoWidget )
> +    {
> +        /* Calculate the future video widget position-
> +           If it exceeds the current screen, rescale it to fit the screen */
> +        if( var_InheritBool( p_intf, "qt-constrain-to-screen" ) )
> +        {
> +            QPoint pt( 0, 0 );
> +            pt = stackCentralW->mapToGlobal( pt );
> +            QRect rc_video = stackCentralW->rect().translated( pt );
> +            QRect rc_frame = frameGeometry();
> +            msg_Dbg( p_intf, "videoSizeChanged: video=(%d/%d)x(%d/%d), this=(%d/%d)x(%d/%d)",
> +                    rc_video.left(), rc_video.top(), rc_video.width(), rc_video.height(),
> +                    rc_frame.left(), rc_frame.top(), rc_frame.width(), rc_frame.height() );
> +            QRect rc = QApplication::desktop()->availableGeometry( QApplication::desktop()->screenNumber( videoWidget ) );
> +            int pixel_to_right  =  rc.width() - pt.x() - ( rc_frame.right() - rc_video.right() );
> +            int pixel_to_bottom = rc.height() - pt.y() - ( rc_frame.bottom() - rc_video.bottom() );
> +            float sx = 1, sy = 1;
> +            if( w>  pixel_to_right )
> +                sx = (float)pixel_to_right/(float)w;
> +            if( h>  pixel_to_bottom )
> +                sy=(float)pixel_to_bottom/(float)h;
> +            if( sx<  1 || sy<  1 )
> +            {
> +                if( sx<  sy )
> +                    w *= sx, h *= sx;
> +                else
> +                    w *= sy, h *= sy;
> +            }
> +        }
>           resizeStack( w, h );
> +    }
>   }
>
>   void MainInterface::setVideoFullScreen( bool fs )
> diff --git a/modules/gui/qt4/qt4.cpp b/modules/gui/qt4/qt4.cpp
> index 11ae967..4dcce6c
> --- a/modules/gui/qt4/qt4.cpp
> +++ b/modules/gui/qt4/qt4.cpp
> @@ -181,6 +181,9 @@ static void ShowDialog   ( intf_thread_t *, int, int, intf_dialog_args_t * );
>       "This option allows the interface to change its icon on various occasions.")
>
>   #define VOLUME_MAX_TEXT N_( "Maximum Volume displayed" )
> +#define QT_CONSTRAIN_TO_SCREEN_TEXT N_( "Constrain video widget to the current screen." )
> +#define QT_CONSTRAIN_TO_SCREEN_LONGTEXT N_( "Constrain the video widget size to fit "\
> +                                            "onto the current desktop." )
>
>   static const int i_notification_list[] =
>       { NOTIFICATION_NEVER, NOTIFICATION_MINIMIZED, NOTIFICATION_ALWAYS };
> @@ -219,6 +222,9 @@ vlc_module_begin ()
>       add_float_with_range( "qt-fs-opacity", 0.8, 0.1, 1., OPACITY_FS_TEXT,
>                             OPACITY_FS_LONGTEXT, false )
>
> +
> +    add_bool( "qt-constrain-to-screen", true, QT_CONSTRAIN_TO_SCREEN_TEXT,
> +              QT_CONSTRAIN_TO_SCREEN_LONGTEXT, false )
>       add_bool( "qt-video-autoresize", true, KEEPSIZE_TEXT,
>                 KEEPSIZE_LONGTEXT, false )
>       add_bool( "qt-name-in-title", true, TITLE_TEXT,




More information about the vlc-devel mailing list