From eaab1ce896adbcb58e6503ea2dcf789d99bd29f5 Mon Sep 17 00:00:00 2001
From: Uoti Urpala <uau@symbol.nonexistent.invalid>
Date: Sun, 20 Apr 2008 23:29:28 +0300
Subject: [PATCH] Move vo_dx,vo_dy,vo_dwidth,vo_dheight to vo struct

---
 command.c              | 26 +++++++-------
 libvo/mga_common.c     |  1 +
 libvo/old_vo_defines.h |  4 +++
 libvo/video_out.c      | 18 ++++------
 libvo/video_out.h      |  8 ++---
 libvo/vo_xv.c          | 78 +++++++++++++++++++++---------------------
 libvo/x11_common.c     | 39 +++++++++++----------
 libvo/x11_common.h     |  3 +-
 8 files changed, 91 insertions(+), 86 deletions(-)

diff --git a/command.c b/command.c
index 0b4312aba9..4b3bc28476 100644
--- a/command.c
+++ b/command.c
@@ -66,32 +66,34 @@
 
 extern int use_menu;
 
-static void rescale_input_coordinates(int ix, int iy, double *dx, double *dy)
+static void rescale_input_coordinates(struct MPContext *mpctx, int ix, int iy,
+                                      double *dx, double *dy)
 {
+    struct vo *vo = mpctx->video_out;
     //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 (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) {
+	if (ix < 0 || ix > vo->dwidth) {
 	    *dx = *dy = -1.0;
 	    return;
 	}			//we are on one of the borders
-	if (iy < 0 || iy > vo_dheight) {
+	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;
+    *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);
+	   *dx, *dy, vo_screenwidth, vo_screenheight, vo->dwidth,
+	   vo->dheight, vo_fs);
 }
 
 static int sub_source_by_pos(MPContext * mpctx, int pos)
@@ -3076,7 +3078,7 @@ int run_command(MPContext * mpctx, mp_cmd_t * cmd)
 		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);
+		rescale_input_coordinates(mpctx, pointer_x, pointer_y, &dx, &dy);
 #ifdef USE_DVDNAV
 		if (mpctx->stream->type == STREAMTYPE_DVDNAV
 		    && dx > 0.0 && dy > 0.0) {
diff --git a/libvo/mga_common.c b/libvo/mga_common.c
index 88997fb194..e90aebd764 100644
--- a/libvo/mga_common.c
+++ b/libvo/mga_common.c
@@ -6,6 +6,7 @@
 #include "libmpcodecs/vf_scale.h"
 #include "mp_msg.h"
 #include "help_mp.h"
+#include "old_vo_wrapper.h"
 
 // mga_vid drawing functions
 static void set_window( void );		/* forward declaration to kill warnings */
diff --git a/libvo/old_vo_defines.h b/libvo/old_vo_defines.h
index ef52e52256..b4003937b6 100644
--- a/libvo/old_vo_defines.h
+++ b/libvo/old_vo_defines.h
@@ -10,5 +10,9 @@
 
 #define vo_ontop global_vo->opts->vo_ontop
 #define vo_config_count global_vo->config_count
+#define vo_dx global_vo->dx
+#define vo_dy global_vo->dy
+#define vo_dwidth global_vo->dwidth
+#define vo_dheight global_vo->dheight
 
 #endif
diff --git a/libvo/video_out.c b/libvo/video_out.c
index 6cab65d25f..1f527af08f 100644
--- a/libvo/video_out.c
+++ b/libvo/video_out.c
@@ -36,10 +36,6 @@ int vo_screenwidth=0;
 int vo_screenheight=0;
 
 // requested resolution/bpp:  (-x -y -bpp options)
-int vo_dx=0;
-int vo_dy=0;
-int vo_dwidth=0;
-int vo_dheight=0;
 int vo_dbpp=0;
 
 int vo_nomouse_input = 0;
@@ -367,14 +363,14 @@ int vo_config(struct vo *vo, uint32_t width, uint32_t height,
 
     if (vo_control(vo, VOCTRL_UPDATE_SCREENINFO, NULL) == VO_TRUE) {
         aspect(&d_width, &d_height, A_NOZOOM);
-        vo_dx = (int)(vo_screenwidth - d_width) / 2;
-        vo_dy = (int)(vo_screenheight - d_height) / 2;
-        geometry(&vo_dx, &vo_dy, &d_width, &d_height,
+        vo->dx = (int)(vo_screenwidth - d_width) / 2;
+        vo->dy = (int)(vo_screenheight - d_height) / 2;
+        geometry(&vo->dx, &vo->dy, &d_width, &d_height,
                  vo_screenwidth, vo_screenheight);
-        vo_dx += xinerama_x;
-        vo_dy += xinerama_y;
-        vo_dwidth = d_width;
-        vo_dheight = d_height;
+        vo->dx += xinerama_x;
+        vo->dy += xinerama_y;
+        vo->dwidth = d_width;
+        vo->dheight = d_height;
     }
 
     int ret = vo->driver->config(vo, width, height, d_width, d_height, flags,
diff --git a/libvo/video_out.h b/libvo/video_out.h
index 1870af17d3..ad298c04f3 100644
--- a/libvo/video_out.h
+++ b/libvo/video_out.h
@@ -213,6 +213,10 @@ struct vo {
     void *priv;
     struct MPOpts *opts;
     struct vo_x11_state *x11;
+    int dx;
+    int dy;
+    int dwidth;
+    int dheight;
 };
 
 struct vo *init_best_video_out(struct MPOpts *opts, struct vo_x11_state *x11);
@@ -245,10 +249,6 @@ extern int vo_screenwidth;
 extern int vo_screenheight;
 
 // requested resolution/bpp:  (-x -y -bpp options)
-extern int vo_dx;
-extern int vo_dy;
-extern int vo_dwidth;
-extern int vo_dheight;
 extern int vo_dbpp;
 
 extern int vo_grabpointer;
diff --git a/libvo/vo_xv.c b/libvo/vo_xv.c
index bc8a5015e7..ec2099866a 100644
--- a/libvo/vo_xv.c
+++ b/libvo/vo_xv.c
@@ -106,7 +106,7 @@ static void draw_alpha_yv12(void *p, int x0, int y0, int w, int h,
 {
     struct vo *vo = p;
     struct xvctx *ctx = vo->priv;
-    x0 += ctx->image_width * (vo_panscan_x >> 1) / (vo_dwidth + vo_panscan_x);
+    x0 += ctx->image_width * (vo_panscan_x >> 1) / (vo->dwidth + vo_panscan_x);
     vo_draw_alpha_yv12(w, h, src, srca, stride,
                        ctx->xvimage[ctx->current_buf]->data +
                        ctx->xvimage[ctx->current_buf]->offsets[0] +
@@ -120,7 +120,7 @@ static void draw_alpha_yuy2(void *p, int x0, int y0, int w, int h,
 {
     struct vo *vo = p;
     struct xvctx *ctx = vo->priv;
-    x0 += ctx->image_width * (vo_panscan_x >> 1) / (vo_dwidth + vo_panscan_x);
+    x0 += ctx->image_width * (vo_panscan_x >> 1) / (vo->dwidth + vo_panscan_x);
     vo_draw_alpha_yuy2(w, h, src, srca, stride,
                        ctx->xvimage[ctx->current_buf]->data +
                        ctx->xvimage[ctx->current_buf]->offsets[0] +
@@ -134,7 +134,7 @@ static void draw_alpha_uyvy(void *p, int x0, int y0, int w, int h,
 {
     struct vo *vo = p;
     struct xvctx *ctx = vo->priv;
-    x0 += ctx->image_width * (vo_panscan_x >> 1) / (vo_dwidth + vo_panscan_x);
+    x0 += ctx->image_width * (vo_panscan_x >> 1) / (vo->dwidth + vo_panscan_x);
     vo_draw_alpha_yuy2(w, h, src, srca, stride,
                        ctx->xvimage[ctx->current_buf]->data +
                        ctx->xvimage[ctx->current_buf]->offsets[0] +
@@ -151,19 +151,19 @@ static void draw_alpha_null(void *p, int x0, int y0, int w, int h,
 
 static void deallocate_xvimage(struct vo *vo, int foo);
 
-static void calc_drwXY(uint32_t *drwX, uint32_t *drwY) {
+static void calc_drwXY(struct vo *vo, uint32_t *drwX, uint32_t *drwY) {
   *drwX = *drwY = 0;
   if (vo_fs) {
-    aspect(&vo_dwidth, &vo_dheight, A_ZOOM);
-    vo_dwidth = FFMIN(vo_dwidth, vo_screenwidth);
-    vo_dheight = FFMIN(vo_dheight, vo_screenheight);
-    *drwX = (vo_screenwidth - vo_dwidth) / 2;
-    *drwY = (vo_screenheight - vo_dheight) / 2;
+    aspect(&vo->dwidth, &vo->dheight, A_ZOOM);
+    vo->dwidth = FFMIN(vo->dwidth, vo_screenwidth);
+    vo->dheight = FFMIN(vo->dheight, vo_screenheight);
+    *drwX = (vo_screenwidth - vo->dwidth) / 2;
+    *drwY = (vo_screenheight - vo->dheight) / 2;
     mp_msg(MSGT_VO, MSGL_V, "[xv-fs] dx: %d dy: %d dw: %d dh: %d\n",
-           *drwX, *drwY, vo_dwidth, vo_dheight);
+           *drwX, *drwY, vo->dwidth, vo->dheight);
   } else if (WinID == 0) {
-    *drwX = vo_dx;
-    *drwY = vo_dy;
+    *drwX = vo->dx;
+    *drwY = vo->dy;
   }
 }
 
@@ -223,8 +223,8 @@ static int config(struct vo *vo, uint32_t width, uint32_t height,
     else
 #endif
     {
-        hint.x = vo_dx;
-        hint.y = vo_dy;
+        hint.x = vo->dx;
+        hint.y = vo->dy;
         hint.width = d_width;
         hint.height = d_height;
 #ifdef HAVE_XF86VM
@@ -292,15 +292,15 @@ static int config(struct vo *vo, uint32_t width, uint32_t height,
                 Window mRoot;
                 uint32_t drwBorderWidth, drwDepth;
                 XGetGeometry(x11->display, vo_window, &mRoot,
-                             &ctx->drwX, &ctx->drwY, &vo_dwidth, &vo_dheight,
+                             &ctx->drwX, &ctx->drwY, &vo->dwidth, &vo->dheight,
                              &drwBorderWidth, &drwDepth);
-                if (vo_dwidth <= 0) vo_dwidth = d_width;
-                if (vo_dheight <= 0) vo_dheight = d_height;
-                aspect_save_prescale(vo_dwidth, vo_dheight);
+                if (vo->dwidth <= 0) vo->dwidth = d_width;
+                if (vo->dheight <= 0) vo->dheight = d_height;
+                aspect_save_prescale(vo->dwidth, vo->dheight);
             }
         } else
         {
-            vo_x11_create_vo_window(vo, &vinfo, vo_dx, vo_dy, d_width, d_height,
+            vo_x11_create_vo_window(vo, &vinfo, vo->dx, vo->dy, d_width, d_height,
                    flags, CopyFromParent, "xv", title);
             XChangeWindowAttributes(x11->display, vo_window, xswamask, &xswa);
         }
@@ -360,19 +360,19 @@ static int config(struct vo *vo, uint32_t width, uint32_t height,
     set_gamma_correction();
 #endif
 
-    aspect(&vo_dwidth, &vo_dheight, A_NOZOOM);
+    aspect(&vo->dwidth, &vo->dheight, A_NOZOOM);
     if ((flags & VOFLAG_FULLSCREEN) && WinID <= 0) vo_fs = 1;
-    calc_drwXY(&ctx->drwX, &ctx->drwY);
+    calc_drwXY(vo, &ctx->drwX, &ctx->drwY);
 
     panscan_calc();
     
     vo_xv_draw_colorkey(vo, ctx->drwX - (vo_panscan_x >> 1),
                         ctx->drwY - (vo_panscan_y >> 1),
-                        vo_dwidth + vo_panscan_x - 1,
-                        vo_dheight + vo_panscan_y - 1);
+                        vo->dwidth + vo_panscan_x - 1,
+                        vo->dheight + vo_panscan_y - 1);
 
     mp_msg(MSGT_VO, MSGL_V, "[xv] dx: %d dy: %d dw: %d dh: %d\n", ctx->drwX,
-           ctx->drwY, vo_dwidth, vo_dheight);
+           ctx->drwY, vo->dwidth, vo->dheight);
 
     if (opts->vo_ontop)
         vo_x11_setlayer(x11->display, vo_window, opts->vo_ontop);
@@ -455,8 +455,8 @@ static inline void put_xvimage(struct vo *vo, XvImage *xvi)
         XvShmPutImage(x11->display, xv_port, vo_window, vo_gc,
                       xvi, 0, 0, ctx->image_width,
                       ctx->image_height, ctx->drwX - (vo_panscan_x >> 1),
-                      ctx->drwY - (vo_panscan_y >> 1), vo_dwidth + vo_panscan_x,
-                      vo_dheight + vo_panscan_y,
+                      ctx->drwY - (vo_panscan_y >> 1), vo->dwidth + vo_panscan_x,
+                      vo->dheight + vo_panscan_y,
                       False);
     } else
 #endif
@@ -464,8 +464,8 @@ static inline void put_xvimage(struct vo *vo, XvImage *xvi)
         XvPutImage(x11->display, xv_port, vo_window, vo_gc,
                    xvi, 0, 0, ctx->image_width, ctx->image_height,
                    ctx->drwX - (vo_panscan_x >> 1), ctx->drwY - (vo_panscan_y >> 1),
-                   vo_dwidth + vo_panscan_x,
-                   vo_dheight + vo_panscan_y);
+                   vo->dwidth + vo_panscan_x,
+                   vo->dheight + vo_panscan_y);
     }
 }
 
@@ -480,19 +480,19 @@ static void check_events(struct vo *vo)
         Window mRoot;
         uint32_t drwBorderWidth, drwDepth;
         XGetGeometry(x11->display, vo_window, &mRoot, &ctx->drwX, &ctx->drwY,
-                     &vo_dwidth, &vo_dheight, &drwBorderWidth, &drwDepth);
+                     &vo->dwidth, &vo->dheight, &drwBorderWidth, &drwDepth);
         mp_msg(MSGT_VO, MSGL_V, "[xv] dx: %d dy: %d dw: %d dh: %d\n", ctx->drwX,
-               ctx->drwY, vo_dwidth, vo_dheight);
+               ctx->drwY, vo->dwidth, vo->dheight);
 
-        calc_drwXY(&ctx->drwX, &ctx->drwY);
+        calc_drwXY(vo, &ctx->drwX, &ctx->drwY);
     }
 
     if (e & VO_EVENT_EXPOSE || e & VO_EVENT_RESIZE)
     {
 	vo_xv_draw_colorkey(vo, ctx->drwX - (vo_panscan_x >> 1),
 			    ctx->drwY - (vo_panscan_y >> 1),
-			    vo_dwidth + vo_panscan_x - 1,
-			    vo_dheight + vo_panscan_y - 1);
+			    vo->dwidth + vo_panscan_x - 1,
+			    vo->dheight + vo_panscan_y - 1);
     }
 
     if ((e & VO_EVENT_EXPOSE || e & VO_EVENT_RESIZE) && ctx->is_paused)
@@ -511,7 +511,7 @@ static void draw_osd(struct vo *vo)
     struct xvctx *ctx = vo->priv;
 
     osd_draw_text(ctx->image_width -
-                  ctx->image_width * vo_panscan_x / (vo_dwidth + vo_panscan_x),
+                  ctx->image_width * vo_panscan_x / (vo->dwidth + vo_panscan_x),
                   ctx->image_height, ctx->draw_alpha_fnc, vo);
 }
 
@@ -883,14 +883,14 @@ static int control(struct vo *vo, uint32_t request, void *data)
 
                 if (old_y != vo_panscan_y)
                 {
-                    vo_x11_clearwindow_part(vo->x11->display, vo_window,
-                                            vo_dwidth + vo_panscan_x - 1,
-                                            vo_dheight + vo_panscan_y - 1,
+                    vo_x11_clearwindow_part(vo, vo_window,
+                                            vo->dwidth + vo_panscan_x - 1,
+                                            vo->dheight + vo_panscan_y - 1,
                                             1);
 		    vo_xv_draw_colorkey(vo, ctx->drwX - (vo_panscan_x >> 1),
 					ctx->drwY - (vo_panscan_y >> 1),
-					vo_dwidth + vo_panscan_x - 1,
-					vo_dheight + vo_panscan_y - 1);
+					vo->dwidth + vo_panscan_x - 1,
+					vo->dheight + vo_panscan_y - 1);
                     flip_page(vo);
                 }
             }
diff --git a/libvo/x11_common.c b/libvo/x11_common.c
index 8d30c7601d..989d45ce5f 100644
--- a/libvo/x11_common.c
+++ b/libvo/x11_common.c
@@ -385,8 +385,8 @@ void update_xinerama_info(struct vo *vo) {
         if (screen >= num_screens)
             screen = num_screens - 1;
         if (screen == -1) {
-            int x = vo_dx + vo_dwidth / 2;
-            int y = vo_dy + vo_dheight / 2;
+            int x = vo->dx + vo->dwidth / 2;
+            int y = vo->dy + vo->dheight / 2;
             for (screen = num_screens - 1; screen > 0; screen--) {
                int left = screens[screen].x_org;
                int right = left + screens[screen].width;
@@ -1058,12 +1058,12 @@ int vo_x11_check_events(struct vo *vo)
 //         if (vo_fs && Event.xconfigure.width != vo_screenwidth && Event.xconfigure.height != vo_screenheight) break;
                 if (vo_window == None)
                     break;
-                vo_dwidth = Event.xconfigure.width;
-                vo_dheight = Event.xconfigure.height;
+                vo->dwidth = Event.xconfigure.width;
+                vo->dheight = Event.xconfigure.height;
 #if 0
                 /* when resizing, x and y are zero :( */
-                vo_dx = Event.xconfigure.x;
-                vo_dy = Event.xconfigure.y;
+                vo->dx = Event.xconfigure.x;
+                vo->dy = Event.xconfigure.y;
 #else
                 {
                     Window root;
@@ -1074,7 +1074,7 @@ int vo_x11_check_events(struct vo *vo)
                                  &foo /*width */ , &foo /*height */ , &foo,
                                  &foo);
                     XTranslateCoordinates(display, vo_window, root, 0, 0,
-                                          &vo_dx, &vo_dy, &win);
+                                          &vo->dx, &vo->dy, &win);
                 }
 #endif
                 ret |= VO_EVENT_RESIZE;
@@ -1188,8 +1188,8 @@ static void vo_x11_nofs_sizepos(struct vo *vo, int x, int y,
   }
   else
   {
-   vo_dwidth = width;
-   vo_dheight = height;
+   vo->dwidth = width;
+   vo->dheight = height;
    XMoveResizeWindow(vo->x11->display, vo_window, x, y, width, height);
   }
 }
@@ -1311,8 +1311,8 @@ void vo_x11_create_vo_window(struct vo *vo, XVisualInfo *vis, int x, int y,
     XSizeHints hint;
     XEvent xev;
     vo_fs = 0;
-    vo_dwidth = width;
-    vo_dheight = height;
+    vo->dwidth = width;
+    vo->dheight = height;
     vo_window = vo_x11_create_smooth_window(mDisplay, mRootWin, vis->visual,
                       x, y, width, height, vis->depth, col_map);
     vo_x11_classhint(mDisplay, vo_window, classname);
@@ -1338,21 +1338,22 @@ void vo_x11_create_vo_window(struct vo *vo, XVisualInfo *vis, int x, int y,
           ButtonPressMask | ButtonReleaseMask | ExposureMask);
   }
   if (opts->vo_ontop) vo_x11_setlayer(mDisplay, vo_window, opts->vo_ontop);
-  vo_x11_nofs_sizepos(vo, vo_dx, vo_dy, width, height);
+  vo_x11_nofs_sizepos(vo, vo->dx, vo->dy, width, height);
   if (!!vo_fs != !!(flags & VOFLAG_FULLSCREEN))
     vo_x11_fullscreen(vo);
 }
 
-void vo_x11_clearwindow_part(Display * mDisplay, Window vo_window,
+void vo_x11_clearwindow_part(struct vo *vo, Window vo_window,
                              int img_width, int img_height, int use_fs)
 {
+    Display *mDisplay = vo->x11->display;
     int u_dheight, u_dwidth, left_ov, left_ov2;
 
     if (!f_gc)
         return;
 
-    u_dheight = use_fs ? vo_screenheight : vo_dheight;
-    u_dwidth = use_fs ? vo_screenwidth : vo_dwidth;
+    u_dheight = use_fs ? vo_screenheight : vo->dheight;
+    u_dwidth = use_fs ? vo_screenwidth : vo->dwidth;
     if ((u_dheight <= img_height) && (u_dwidth <= img_width))
         return;
 
@@ -1546,10 +1547,10 @@ void vo_x11_fullscreen(struct vo *vo)
         vo_fs = VO_TRUE;
         if ( ! (vo_fs_type & vo_wm_FULLSCREEN) ) // not needed with EWMH fs
         {
-            vo_old_x = vo_dx;
-            vo_old_y = vo_dy;
-            vo_old_width = vo_dwidth;
-            vo_old_height = vo_dheight;
+            vo_old_x = vo->dx;
+            vo_old_y = vo->dy;
+            vo_old_width = vo->dwidth;
+            vo_old_height = vo->dheight;
         }
             update_xinerama_info(vo);
             x = xinerama_x;
diff --git a/libvo/x11_common.h b/libvo/x11_common.h
index 018739a5a5..931c9ec233 100644
--- a/libvo/x11_common.h
+++ b/libvo/x11_common.h
@@ -57,7 +57,7 @@ extern void fstype_help(void);
 void vo_x11_create_vo_window(struct vo *vo, XVisualInfo *vis,
         int x, int y, unsigned int width, unsigned int height, int flags,
 	Colormap col_map, const char *classname, const char *title);
-extern void vo_x11_clearwindow_part(Display *mDisplay, Window vo_window,
+void vo_x11_clearwindow_part(struct vo *vo, Window vo_window,
 	int img_width, int img_height, int use_fs);
 extern void vo_x11_clearwindow( Display *mDisplay, Window vo_window );
 void vo_x11_ontop(struct vo *vo);
@@ -140,6 +140,7 @@ int vo_find_depth_from_visuals(Display *dpy, int screen, Visual **visual_return)
 #define vo_xv_get_max_img_dim(...) vo_xv_get_max_img_dim(global_vo, __VA_ARGS__)
 #define vo_xv_init_colorkey() vo_xv_init_colorkey(global_vo)
 #define vo_xv_draw_colorkey(...) vo_xv_draw_colorkey(global_vo, __VA_ARGS__)
+#define vo_x11_clearwindow_part(display, ...) vo_x11_clearwindow_part(global_vo, __VA_ARGS__)
 
 #define mDisplay global_vo->x11->display
 #endif