[vlc-devel] commit: Add --screen-mouse-follow option (x11 only). (Antoine Cellerier )
git version control
git at videolan.org
Mon May 26 16:02:01 CEST 2008
vlc | branch: master | Antoine Cellerier <dionoea at videolan.org> | Mon May 26 16:03:33 2008 +0200| [96973d2db5caddc6f8fc381e9350ec43181f920d]
Add --screen-mouse-follow option (x11 only).
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=96973d2db5caddc6f8fc381e9350ec43181f920d
---
modules/access/screen/screen.c | 13 +++++++++++++
modules/access/screen/screen.h | 6 +++++-
modules/access/screen/x11.c | 20 ++++++++++++++++++++
3 files changed, 38 insertions(+), 1 deletions(-)
diff --git a/modules/access/screen/screen.c b/modules/access/screen/screen.c
index 2f2fe79..a7d15f5 100644
--- a/modules/access/screen/screen.c
+++ b/modules/access/screen/screen.c
@@ -67,6 +67,10 @@
#define HEIGHT_TEXT N_( "Subscreen height" )
#define HEIGHT_LONGTEXT N_( \
"Subscreen height." )
+
+#define FOLLOW_MOUSE_TEXT N_( "Follow the mouse" )
+#define FOLLOW_MOUSE_LONGTEXT N_( \
+ "Follow the mouse when capturing a subscreen" )
#endif
static int Open ( vlc_object_t * );
@@ -93,6 +97,9 @@ vlc_module_begin();
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-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
#ifdef WIN32
@@ -171,8 +178,14 @@ static int Open( vlc_object_t *p_this )
}
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_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
diff --git a/modules/access/screen/screen.h b/modules/access/screen/screen.h
index 519edc0..d3b1299 100644
--- a/modules/access/screen/screen.h
+++ b/modules/access/screen/screen.h
@@ -41,10 +41,14 @@ struct demux_sys_t
int i_incr;
#ifdef SCREEN_SUBSCREEN
+ bool b_follow_mouse;
+ unsigned int i_screen_height;
+ unsigned int i_screen_width;
+
unsigned int i_top;
unsigned int i_left;
- unsigned int i_width;
unsigned int i_height;
+ unsigned int i_width;
#endif
screen_data_t *p_data;
diff --git a/modules/access/screen/x11.c b/modules/access/screen/x11.c
index c3af78d..a8cf374 100644
--- a/modules/access/screen/x11.c
+++ b/modules/access/screen/x11.c
@@ -113,6 +113,26 @@ block_t *screen_Capture( demux_t *p_demux )
XImage *image;
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 ),
p_sys->i_left, p_sys->i_top, p_sys->fmt.video.i_width,
p_sys->fmt.video.i_height, AllPlanes, ZPixmap );
More information about the vlc-devel
mailing list