[MPlayer-cvslog] r19856 - in trunk: cfg-mplayer.h input/input.c input/input.h libvo/x11_common.c mplayer.c

nicodvb subversion at mplayerhq.hu
Sat Sep 16 17:13:41 CEST 2006


Author: nicodvb
Date: Sat Sep 16 17:13:41 2006
New Revision: 19856

Modified:
   trunk/cfg-mplayer.h
   trunk/input/input.c
   trunk/input/input.h
   trunk/libvo/x11_common.c
   trunk/mplayer.c

Log:
report to mplayer with a slave command the coordinates of the pointer reported by x11; rescale coordinates to [0,1]x[0,1] range - patch by Jonas Jermann and me

Modified: trunk/cfg-mplayer.h
==============================================================================
--- trunk/cfg-mplayer.h	(original)
+++ trunk/cfg-mplayer.h	Sat Sep 16 17:13:41 2006
@@ -101,6 +101,7 @@
 extern int readPPOpt(void *conf, char *arg);
 extern void revertPPOpt(void *conf, char* opt);
 extern char* pp_help;
+extern int enable_mouse_movements;
 
 m_option_t vd_conf[]={
 	{"help", "Use MPlayer with an appropriate video file instead of live partners to avoid vd.\n", CONF_TYPE_PRINT, CONF_NOCFG|CONF_GLOBAL, 0, 0, NULL},
@@ -366,6 +367,8 @@
 	{"key-fifo-size", &key_fifo_size, CONF_TYPE_INT, CONF_RANGE, 2, 65000, NULL},
 	{"noconsolecontrols", &noconsolecontrols, CONF_TYPE_FLAG, CONF_GLOBAL, 0, 1, NULL},
 	{"consolecontrols", &noconsolecontrols, CONF_TYPE_FLAG, CONF_GLOBAL, 0, 0, NULL},
+        {"mouse-movements", &enable_mouse_movements, CONF_TYPE_FLAG, CONF_GLOBAL, 0, 1, NULL},
+        {"nomouse-movements", &enable_mouse_movements, CONF_TYPE_FLAG, CONF_GLOBAL, 0, 0, NULL},
 
 #define MAIN_CONF
 #include "cfg-common.h"

Modified: trunk/input/input.c
==============================================================================
--- trunk/input/input.c	(original)
+++ trunk/input/input.c	Sat Sep 16 17:13:41 2006
@@ -167,6 +167,7 @@
   { MP_CMD_GET_PROPERTY, "get_property", 1, { {MP_CMD_ARG_STRING, {0}},  {-1,{0}} } },
   
   { MP_CMD_SEEK_CHAPTER, "seek_chapter", 1, { {MP_CMD_ARG_INT,{0}}, {MP_CMD_ARG_INT,{0}}, {-1,{0}} } },
+  { MP_CMD_SET_MOUSE_POS, "set_mouse_pos", 2, { {MP_CMD_ARG_INT,{0}}, {MP_CMD_ARG_INT,{0}}, {-1,{0}} } },
   
   { 0, NULL, 0, {} }
 };

Modified: trunk/input/input.h
==============================================================================
--- trunk/input/input.h	(original)
+++ trunk/input/input.h	Sat Sep 16 17:13:41 2006
@@ -89,6 +89,7 @@
 #define MP_CMD_RADIO_STEP_CHANNEL 87
 #define MP_CMD_RADIO_SET_CHANNEL 88
 #define MP_CMD_RADIO_SET_FREQ 89
+#define MP_CMD_SET_MOUSE_POS 90
 
 #define MP_CMD_GUI_EVENTS       5000
 #define MP_CMD_GUI_LOADFILE     5001

Modified: trunk/libvo/x11_common.c
==============================================================================
--- trunk/libvo/x11_common.c	(original)
+++ trunk/libvo/x11_common.c	Sat Sep 16 17:13:41 2006
@@ -63,6 +63,7 @@
 #define WIN_LAYER_ONTOP                  6
 #define WIN_LAYER_ABOVE_DOCK             10
 
+extern int enable_mouse_movements;
 int fs_layer = WIN_LAYER_ABOVE_DOCK;
 static int orig_layer = 0;
 static int old_gravity = NorthWestGravity;
@@ -1084,6 +1085,13 @@
                 }
                 break;
             case MotionNotify:
+                if(enable_mouse_movements)
+                {
+                    char cmd_str[40];
+                    sprintf(cmd_str,"set_mouse_pos %i %i",Event.xmotion.x, Event.xmotion.y);
+                    mp_input_queue_cmd(mp_input_parse_cmd(cmd_str));
+                }
+
                 if (vo_mouse_autohide)
                 {
                     vo_showcursor(mydisplay, vo_window);

Modified: trunk/mplayer.c
==============================================================================
--- trunk/mplayer.c	(original)
+++ trunk/mplayer.c	Sat Sep 16 17:13:41 2006
@@ -86,6 +86,7 @@
 int slave_mode=0;
 int player_idle_mode=0;
 int quiet=0;
+int enable_mouse_movements=0;
 
 #ifdef WIN32
 char * proc_priority=NULL;
@@ -2713,6 +2714,24 @@
     return 1;
 }
 
+static void rescale_input_coordinates(int ix, int iy, double *dx, double *dy) {
+    //remove the borders, if any, and rescale to the range [0,1],[0,1]
+    if(vo_fs) {  //we are in full-screen mode
+        if(vo_screenwidth > vo_dwidth) //there are borders along the x axis
+            ix -= (vo_screenwidth - vo_dwidth) / 2;
+        if(vo_screenheight > vo_dheight) //there are borders along the y axis (usual way)
+            iy -= (vo_screenheight - vo_dheight) / 2;
+
+        if(ix < 0 || ix > vo_dwidth)  {*dx = *dy = -1.0; return; }  //we are on one of the borders
+        if(iy < 0 || iy > vo_dheight) {*dx = *dy = -1.0; return; } //we are on one of the borders
+    }
+
+    *dx = (double) ix / (double) vo_dwidth;
+    *dy = (double) iy / (double) vo_dheight;
+
+    mp_msg(MSGT_CPLAYER,MSGL_V, "\r\nrescaled coordinates: %.3lf, %.3lf, screen (%d x %d), vodisplay: (%d, %d), fullscreen: %d\r\n",
+        *dx, *dy, vo_screenwidth, vo_screenheight,  vo_dwidth, vo_dheight, vo_fs);
+}
 
 int main(int argc,char* argv[]){
 
@@ -5132,6 +5151,14 @@
         }
         break;
     } break;
+    case MP_CMD_SET_MOUSE_POS: {
+        int button = 0, pointer_x, pointer_y;
+        double dx, dy;
+        pointer_x = cmd->args[0].v.i;
+        pointer_y = cmd->args[1].v.i;
+        rescale_input_coordinates(pointer_x, pointer_y, &dx, &dy);
+        break;
+    }
 #ifdef USE_DVDNAV
     case MP_CMD_DVDNAV: {
       int button = 0;



More information about the MPlayer-cvslog mailing list