diff options
author | joey <joey@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2004-12-21 20:33:51 +0000 |
---|---|---|
committer | joey <joey@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2004-12-21 20:33:51 +0000 |
commit | 9e7ca454b40523f4af114673eb21064c1336f3c4 (patch) | |
tree | da97fddada23a23ea22c7b9d6c10f94c66343755 | |
parent | 87b4d8af6829775845a2c25cff6efc5ec80a882c (diff) | |
download | mpv-9e7ca454b40523f4af114673eb21064c1336f3c4.tar.bz2 mpv-9e7ca454b40523f4af114673eb21064c1336f3c4.tar.xz |
added -wid support for vo_directx.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@14208 b3059339-0415-0410-9bf9-f77b7e298cf2
-rw-r--r-- | DOCS/man/en/mplayer.1 | 7 | ||||
-rw-r--r-- | cfg-mplayer.h | 4 | ||||
-rw-r--r-- | libvo/video_out.c | 1 | ||||
-rw-r--r-- | libvo/vo_directx.c | 28 | ||||
-rw-r--r-- | libvo/x11_common.c | 2 |
5 files changed, 34 insertions, 8 deletions
diff --git a/DOCS/man/en/mplayer.1 b/DOCS/man/en/mplayer.1 index 70c3019d69..3e5c010dbb 100644 --- a/DOCS/man/en/mplayer.1 +++ b/DOCS/man/en/mplayer.1 @@ -2134,6 +2134,9 @@ screen to the top-left of the image being displayed, however if a percentage sign is given after the argument it turns the value into a percentage of the screen size in that direction. It also supports the standard X11 \-geometry option format. +If an external window is specified using the \-wid option, then the x and +y coordinates are relative to the top-left corner of the window rather +than the screen. .br .I NOTE: This option is only supported by the x11, xmga, xv, xvmc, xvidix, @@ -2269,8 +2272,8 @@ the new display mode. Enables VBI for the vesa, dfbmga and svga video output drivers. . .TP -.B \-wid <window\ ID> (also see \-guiwid) (X11 only) -This tells MPlayer to attach to an existing X11 window. +.B \-wid <window\ ID> (also see \-guiwid) (X11 and DirectX only) +This tells MPlayer to attach to an existing window. Useful to embed MPlayer in a browser (e.g.\& the plugger extension). . .TP diff --git a/cfg-mplayer.h b/cfg-mplayer.h index 7165df8d31..17b681dba8 100644 --- a/cfg-mplayer.h +++ b/cfg-mplayer.h @@ -75,8 +75,8 @@ extern int fs_layer; extern int stop_xscreensaver; extern char **vo_fstype_list; extern int vo_nomouse_input; -extern int WinID; #endif +extern int WinID; #ifdef HAVE_MENU extern int menu_startup; @@ -272,9 +272,9 @@ m_option_t mplayer_opts[]={ {"adapter", &vo_adapter_num, CONF_TYPE_INT, CONF_RANGE, 0, 5, NULL}, {"refreshrate",&vo_refresh_rate,CONF_TYPE_INT,CONF_RANGE, 0,100, NULL}, + {"wid", &WinID, CONF_TYPE_INT, 0, 0, 0, NULL}, #ifdef HAVE_X11 // x11,xv,xmga,xvidix - {"wid", &WinID, CONF_TYPE_INT, 0, 0, 0, NULL}, {"icelayer", "-icelayer is obsolete. Use -fstype layer:<number> instead.\n", CONF_TYPE_PRINT, 0, 0, 0, NULL}, {"stop-xscreensaver", &stop_xscreensaver, CONF_TYPE_FLAG, 0, 0, 1, NULL}, {"nostop-xscreensaver", &stop_xscreensaver, CONF_TYPE_FLAG, 0, 1, 0, NULL}, diff --git a/libvo/video_out.c b/libvo/video_out.c index e058316e36..1dcd22a408 100644 --- a/libvo/video_out.c +++ b/libvo/video_out.c @@ -45,6 +45,7 @@ int vo_adapter_num=0; int vo_refresh_rate=0; int vo_keepaspect=1; int vo_rootwin=0; +int WinID = -1; int vo_pts=0; // for hw decoding float vo_fps=0; // for mp1e rte diff --git a/libvo/vo_directx.c b/libvo/vo_directx.c index 81ce0b725c..e9e9d8718a 100644 --- a/libvo/vo_directx.c +++ b/libvo/vo_directx.c @@ -81,6 +81,7 @@ extern int vo_rootwin; extern int vidmode; extern int vo_colorkey; extern float monitor_aspect; +extern int WinID; /***************************************************************************** * DirectDraw GUIDs. @@ -510,6 +511,17 @@ static uint32_t Directx_ManageDisplay() rd.top=(vo_screenheight-height)/2; if(ShowCursor(FALSE)>=0)while(ShowCursor(FALSE)>=0){} } + else if (WinID != -1 && vo_geometry) { + POINT pt; + pt.x = vo_dx; + pt.y = vo_dy; + ClientToScreen(hWnd,&pt); + width=d_image_width; + height=d_image_height; + rd.left = pt.x; + rd.top = pt.y; + while(ShowCursor(TRUE)<=0){} + } else { POINT pt; pt.x = 0; //overlayposition relative to the window @@ -628,6 +640,7 @@ static uint32_t Directx_ManageDisplay() } if(!vidmode && !vo_fs){ + if(WinID == -1) { RECT rdw=rd; AdjustWindowRect(&rdw,WS_OVERLAPPEDWINDOW|WS_SIZEBOX,FALSE); // printf("window: %i %i %ix%i\n",rdw.left,rdw.top,rdw.right - rdw.left,rdw.bottom - rdw.top); @@ -636,18 +649,18 @@ static uint32_t Directx_ManageDisplay() rdw.right += monitor_rect.left; rdw.bottom += monitor_rect.top; SetWindowPos(hWnd,(vo_ontop)?HWND_TOPMOST:(vo_rootwin?HWND_BOTTOM:HWND_NOTOPMOST),rdw.left,rdw.top,rdw.right-rdw.left,rdw.bottom-rdw.top,SWP_NOOWNERZORDER); + } } else SetWindowPos(vidmode?hWnd:hWndFS,vo_rootwin?HWND_BOTTOM:HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE|SWP_NOOWNERZORDER); - /*for nonoverlay mode we are finished, for overlay mode we have to display the overlay first*/ - if(nooverlay)return 0; - /*make sure the overlay is inside the screen*/ if(rd.left<0)rd.left=0; if(rd.right>vo_screenwidth)rd.right=vo_screenwidth; if(rd.top<0)rd.top=0; if(rd.bottom>vo_screenheight)rd.bottom=vo_screenheight; + /*for nonoverlay mode we are finished, for overlay mode we have to display the overlay first*/ + if(nooverlay)return 0; // printf("overlay: %i %i %ix%i\n",rd.left,rd.top,rd.right - rd.left,rd.bottom - rd.top); ddrval = g_lpddsOverlay->lpVtbl->UpdateOverlay(g_lpddsOverlay,&rs, g_lpddsPrimary, &rd, dwUpdateFlags, &ovfx); @@ -992,6 +1005,8 @@ static uint32_t preinit(const char *arg) wc.lpszClassName = "MPlayer - The Movie Player"; wc.lpszMenuName = NULL; RegisterClass(&wc); + if (WinID != -1) hWnd = WinID; + else hWnd = CreateWindowEx(vidmode?WS_EX_TOPMOST:0, "MPlayer - The Movie Player","",(vidmode)?WS_POPUP:WS_OVERLAPPEDWINDOW| WS_SIZEBOX, CW_USEDEFAULT, CW_USEDEFAULT, 100, 100,NULL,NULL,hInstance,NULL); @@ -1144,6 +1159,8 @@ static uint32_t put_image(mp_image_t *mpi){ uint32_t y = mpi->y; uint32_t w = mpi->w; uint32_t h = mpi->h; + + if (WinID != -1) Directx_ManageDisplay(); if((mpi->flags&MP_IMGFLAG_DIRECT)||(mpi->flags&MP_IMGFLAG_DRAW_CALLBACK)) { @@ -1232,12 +1249,15 @@ config(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, uin rd.top = vo_dy; rd.right = rd.left + d_image_width; rd.bottom = rd.top + d_image_height; + if (WinID == -1) { AdjustWindowRect(&rd,WS_OVERLAPPEDWINDOW|WS_SIZEBOX,FALSE); SetWindowPos(hWnd,NULL, vo_dx, vo_dy,rd.right-rd.left,rd.bottom-rd.top,SWP_SHOWWINDOW|SWP_NOOWNERZORDER); + } } else ShowWindow(hWnd,SW_SHOW); if(vo_fs && !vidmode)ShowWindow(hWndFS,SW_SHOW); + if (WinID == -1) SetWindowText(hWnd,title); @@ -1380,6 +1400,7 @@ static uint32_t control(uint32_t request, void *data, ...) case VOCTRL_DRAW_IMAGE: return put_image(data); case VOCTRL_ONTOP: + if(WinID != -1) return VO_TRUE; if(vidmode) { mp_msg(MSGT_VO, MSGL_ERR,"<vo_directx><ERROR>ontop has no meaning in exclusive mode\n"); @@ -1392,6 +1413,7 @@ static uint32_t control(uint32_t request, void *data, ...) } return VO_TRUE; case VOCTRL_ROOTWIN: + if(WinID != -1) return VO_TRUE; if(vidmode) { mp_msg(MSGT_VO, MSGL_ERR,"<vo_directx><ERROR>rootwin has no meaning in exclusive mode\n"); diff --git a/libvo/x11_common.c b/libvo/x11_common.c index 4d2f4f445b..ebbbe11d7d 100644 --- a/libvo/x11_common.c +++ b/libvo/x11_common.c @@ -75,7 +75,7 @@ int mScreen; int mLocalDisplay; /* output window id */ -int WinID = -1; +extern int WinID; int vo_mouse_autohide = 0; int vo_wm_type = 0; int vo_fs_type = 0; // needs to be accessible for GUI X11 code |