Commit 96973d2d authored by Antoine Cellerier's avatar Antoine Cellerier

Add --screen-mouse-follow option (x11 only).

parent 121f9617
...@@ -67,6 +67,10 @@ ...@@ -67,6 +67,10 @@
#define HEIGHT_TEXT N_( "Subscreen height" ) #define HEIGHT_TEXT N_( "Subscreen height" )
#define HEIGHT_LONGTEXT N_( \ #define HEIGHT_LONGTEXT N_( \
"Subscreen height." ) "Subscreen height." )
#define FOLLOW_MOUSE_TEXT N_( "Follow the mouse" )
#define FOLLOW_MOUSE_LONGTEXT N_( \
"Follow the mouse when capturing a subscreen" )
#endif #endif
static int Open ( vlc_object_t * ); static int Open ( vlc_object_t * );
...@@ -93,6 +97,9 @@ vlc_module_begin(); ...@@ -93,6 +97,9 @@ vlc_module_begin();
add_integer( "screen-left", 0, NULL, LEFT_TEXT, LEFT_LONGTEXT, true ); add_integer( "screen-left", 0, NULL, LEFT_TEXT, LEFT_LONGTEXT, true );
add_integer( "screen-width", 0, NULL, WIDTH_TEXT, WIDTH_LONGTEXT, true ); add_integer( "screen-width", 0, NULL, WIDTH_TEXT, WIDTH_LONGTEXT, true );
add_integer( "screen-height", 0, NULL, HEIGHT_TEXT, HEIGHT_LONGTEXT, true ); add_integer( "screen-height", 0, NULL, HEIGHT_TEXT, HEIGHT_LONGTEXT, true );
add_integer( "screen-height", 0, NULL, HEIGHT_TEXT, HEIGHT_LONGTEXT, true );
add_bool( "screen-follow-mouse", false, NULL, FOLLOW_MOUSE_TEXT,
FOLLOW_MOUSE_LONGTEXT, true );
#endif #endif
#ifdef WIN32 #ifdef WIN32
...@@ -171,8 +178,14 @@ static int Open( vlc_object_t *p_this ) ...@@ -171,8 +178,14 @@ static int Open( vlc_object_t *p_this )
} }
else else
{ {
p_sys->i_screen_width = p_sys->fmt.video.i_width;
p_sys->i_screen_height = p_sys->fmt.video.i_height;
p_sys->fmt.video.i_width = p_sys->i_width; p_sys->fmt.video.i_width = p_sys->i_width;
p_sys->fmt.video.i_height = p_sys->i_height; p_sys->fmt.video.i_height = p_sys->i_height;
p_sys->b_follow_mouse = var_CreateGetInteger( p_demux,
"screen-follow-mouse" );
if( p_sys->b_follow_mouse )
msg_Dbg( p_demux, "mouse following enabled" );
} }
} }
#endif #endif
......
...@@ -41,10 +41,14 @@ struct demux_sys_t ...@@ -41,10 +41,14 @@ struct demux_sys_t
int i_incr; int i_incr;
#ifdef SCREEN_SUBSCREEN #ifdef SCREEN_SUBSCREEN
bool b_follow_mouse;
unsigned int i_screen_height;
unsigned int i_screen_width;
unsigned int i_top; unsigned int i_top;
unsigned int i_left; unsigned int i_left;
unsigned int i_width;
unsigned int i_height; unsigned int i_height;
unsigned int i_width;
#endif #endif
screen_data_t *p_data; screen_data_t *p_data;
......
...@@ -113,6 +113,26 @@ block_t *screen_Capture( demux_t *p_demux ) ...@@ -113,6 +113,26 @@ block_t *screen_Capture( demux_t *p_demux )
XImage *image; XImage *image;
int i_size; int i_size;
if( p_sys->b_follow_mouse )
{
Window root = DefaultRootWindow( p_display ), child;
int root_x, root_y;
int win_x, win_y;
unsigned int mask;
if( XQueryPointer( p_display, root,
&root, &child, &root_x, &root_y, &win_x, &win_y,
&mask ) )
{
p_sys->i_left = __MIN( (unsigned int)root_x,
p_sys->i_screen_width - p_sys->i_width );
p_sys->i_top = __MIN( (unsigned int)root_y,
p_sys->i_screen_height - p_sys->i_height );
}
else
msg_Dbg( p_demux, "XQueryPointer() failed" );
}
image = XGetImage( p_display, DefaultRootWindow( p_display ), image = XGetImage( p_display, DefaultRootWindow( p_display ),
p_sys->i_left, p_sys->i_top, p_sys->fmt.video.i_width, p_sys->i_left, p_sys->i_top, p_sys->fmt.video.i_width,
p_sys->fmt.video.i_height, AllPlanes, ZPixmap ); p_sys->fmt.video.i_height, AllPlanes, ZPixmap );
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment