[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