mirror of
https://github.com/mpv-player/mpv
synced 2024-12-27 17:42:17 +00:00
runtime 'stay-on-top' functionality
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@11543 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
parent
4daef48770
commit
640f93d018
@ -278,6 +278,9 @@ decrease/\:increase volume
|
||||
mute sound
|
||||
.IPs f\ \ \ \
|
||||
toggle fullscreen
|
||||
.IPs T\ \ \ \
|
||||
toggle stay-on-top.
|
||||
Supported by drivers which use X11, except SDL, as well as directx and gl2 under Windows.
|
||||
.IPs "w and e"
|
||||
decrease/\:increase panscan range
|
||||
.IPs o\ \ \ \
|
||||
@ -1809,6 +1812,10 @@ window aspect hints.).
|
||||
.B \-noxv (SDL only)
|
||||
Disables XVideo SDL driver.
|
||||
.TP
|
||||
.B \-ontop
|
||||
Makes the player window stay on top other windows.
|
||||
Supported by drivers which use X11, except SDL, as well as directx and gl2 under Windows.
|
||||
.TP
|
||||
.B \-panscan <0.0\-1.0>
|
||||
Enables Pan & Scan functionality, i.e.\& in order to display a 16:9 movie
|
||||
on a 4:3 display, the sides of the movie are cropped to get a 4:3 image
|
||||
|
@ -57,8 +57,12 @@ Each vo driver _has_ to implement these:
|
||||
VOCTRL_GET_EQUALIZER
|
||||
get the current video equalizer values
|
||||
two arguments are provided: item and value
|
||||
item is a string, the possible values are (currenlty):
|
||||
item is a string, the possible values are (currently):
|
||||
brightness, contrast, saturation, hue
|
||||
VOCTRL_ONTOP
|
||||
Makes the player window stay-on-top. Only supported (currently)
|
||||
by drivers which use X11, except SDL, as well as directx and
|
||||
gl2 under Windows.
|
||||
|
||||
config():
|
||||
Set up the video system. You get the dimensions and flags.
|
||||
|
@ -86,6 +86,10 @@ vo_fullscreen
|
||||
get_vo_fullscreen
|
||||
Print out fullscreen status (1 == fullscreened, 0 == windowed).
|
||||
|
||||
vo_ontop
|
||||
Toggle stay-on-top. Supported by drivers which use X11, except SDL,
|
||||
as well as directx and gl2 under Windows.
|
||||
|
||||
panscan <value> [value2]
|
||||
???
|
||||
|
||||
|
@ -283,8 +283,7 @@ since QNX has only X <emphasis>emulation</emphasis> which is VERY slow. Use SDL.
|
||||
<para>Best results are achieved with the native DirectX video output driver
|
||||
(<option>-vo directx</option>) and the native Windows waveout audio driver
|
||||
(<option>-ao win32</option>) as OpenGL does not work and SDL is known to
|
||||
distort sound and image or crash on some systems. You can make the movie
|
||||
window stay on top with <option>-vo directx:ontop</option>. If the image is
|
||||
distort sound and image or crash on some systems. If the image is
|
||||
distorted, try turning off hardware acceleration with
|
||||
<option>-vo directx:noaccel</option>. Download
|
||||
<ulink url="http://www.videolan.org/vlc/dx7headers.tgz">DirectX 7 header files</ulink>
|
||||
|
@ -295,6 +295,11 @@ You can have a full list of known commands by running
|
||||
<para>
|
||||
Switch fullscreen mode.
|
||||
</para></listitem>
|
||||
<listitem><para><literal>vo_ontop</literal></para>
|
||||
<para>
|
||||
Toggle stay-on-top. Supported by drivers which use X11, except SDL,
|
||||
as well as directx and gl2 under Windows.
|
||||
</para></listitem>
|
||||
<listitem><para><literal>tv_step_channel</literal> (int) dir</para>
|
||||
<para>
|
||||
Select next/previous tv channel.
|
||||
|
@ -779,6 +779,9 @@ void wsFullScreen( wsTWindow * win )
|
||||
vo_x11_decoration( wsDisplay,win->WindowID,decoration );
|
||||
vo_x11_sizehint( win->X,win->Y,win->Width,win->Height,0 );
|
||||
vo_x11_setlayer( wsDisplay,win->WindowID,win->isFullScreen );
|
||||
|
||||
if ((!(win->isFullScreen)) & vo_ontop) vo_x11_setlayer(wsDisplay, win->WindowID,1);
|
||||
|
||||
if ( vo_wm_type == 0 && !(vo_fsmode&16) )
|
||||
XWithdrawWindow( wsDisplay,win->WindowID,wsScreen );
|
||||
XMoveResizeWindow( wsDisplay,win->WindowID,win->X,win->Y,win->Width,win->Height );
|
||||
|
@ -63,6 +63,7 @@ extern int vo_gamma_saturation;
|
||||
extern int vo_gamma_contrast;
|
||||
extern int vo_gamma_hue;
|
||||
extern char *vo_geometry;
|
||||
extern int vo_ontop;
|
||||
|
||||
extern int opt_screen_size_x;
|
||||
extern int opt_screen_size_y;
|
||||
@ -181,6 +182,8 @@ m_option_t mplayer_opts[]={
|
||||
{"ao", &audio_driver_list, CONF_TYPE_STRING_LIST, 0, 0, 0, NULL},
|
||||
{"fixed-vo", &fixed_vo, CONF_TYPE_FLAG,CONF_GLOBAL , 0, 1, NULL},
|
||||
{"nofixed-vo", &fixed_vo, CONF_TYPE_FLAG,CONF_GLOBAL, 0, 0, NULL},
|
||||
{"ontop", &vo_ontop, CONF_TYPE_FLAG, 0, 0, 1, NULL},
|
||||
{"noontop", &vo_ontop, CONF_TYPE_FLAG, 0, 1, 0, NULL},
|
||||
|
||||
{"aop", ao_plugin_conf, CONF_TYPE_SUBCONFIG, 0, 0, 0, NULL},
|
||||
{"dsp", "Use -ao oss:dsp_path!\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL},
|
||||
|
@ -34,6 +34,10 @@ fs=yes # Enlarges movie window to your desktop's size.
|
||||
# monitoraspect=4:3 # standard monitor size, with square pixels
|
||||
# monitoraspect=16:9 # use this for widescreen monitor! non-square pixels
|
||||
|
||||
# ontop=yes # Makes the player window stay ontop
|
||||
# Used by drivers which use X11, except SDL,
|
||||
# as well as directx and gl2 under Windows
|
||||
|
||||
##
|
||||
## Specify your preferred default skin here
|
||||
## (skins are searched in /usr/local/share/mplayer/Skin/yourskin
|
||||
|
@ -47,6 +47,7 @@ t sub_pos +1
|
||||
#? sub_step +1 # immediately display next subtitle
|
||||
#? sub_step -1 # previous
|
||||
f vo_fullscreen
|
||||
T vo_ontop
|
||||
w panscan -0.1
|
||||
e panscan +0.1
|
||||
|
||||
|
@ -98,6 +98,7 @@ static mp_cmd_t mp_cmds[] = {
|
||||
{ MP_CMD_DVB_SET_CHANNEL, "dvb_set_channel", 1, { { MP_CMD_ARG_INT, {0}}, {-1,{0}} }},
|
||||
#endif
|
||||
{ MP_CMD_VO_FULLSCREEN, "vo_fullscreen", 0, { {-1,{0}} } },
|
||||
{ MP_CMD_VO_ONTOP, "vo_ontop", 0, { {-1,{0}} } },
|
||||
{ MP_CMD_SCREENSHOT, "screenshot", 0, { {-1,{0}} } },
|
||||
{ MP_CMD_PANSCAN, "panscan",1, { {MP_CMD_ARG_FLOAT,{0}}, {MP_CMD_ARG_INT,{0}}, {-1,{0}} } },
|
||||
{ MP_CMD_LOADFILE, "loadfile", 1, { {MP_CMD_ARG_STRING, {0}}, {-1,{0}} } },
|
||||
@ -330,6 +331,7 @@ static mp_cmd_bind_t def_cmd_binds[] = {
|
||||
{ { JOY_BTN2, 0 }, "volume 1"},
|
||||
{ { JOY_BTN3, 0 }, "volume -1"},
|
||||
#endif
|
||||
{ { 'T', 0 }, "vo_ontop" },
|
||||
{ { 'f', 0 }, "vo_fullscreen" },
|
||||
{ { 's', 0 }, "screenshot" },
|
||||
{ { 'w', 0 }, "panscan -0.1" },
|
||||
|
@ -52,6 +52,7 @@
|
||||
#define MP_CMD_GET_VO_FULLSCREEN 48
|
||||
#define MP_CMD_GET_SUB_VISIBILITY 49
|
||||
#define MP_CMD_SUB_FORCED_ONLY 50
|
||||
#define MP_CMD_VO_ONTOP 51
|
||||
|
||||
#define MP_CMD_GUI_EVENTS 5000
|
||||
#define MP_CMD_GUI_LOADFILE 5001
|
||||
|
@ -324,6 +324,9 @@ static uint32_t control(uint32_t request, void *data, ...)
|
||||
#endif
|
||||
|
||||
#ifdef VO_XMGA
|
||||
case VOCTRL_ONTOP:
|
||||
vo_x11_ontop();
|
||||
return VO_TRUE;
|
||||
case VOCTRL_GET_PANSCAN:
|
||||
if ( !inited || !vo_fs ) return VO_FALSE;
|
||||
return VO_TRUE;
|
||||
|
@ -40,6 +40,7 @@ int vo_vsync = 0;
|
||||
int vo_fs = 0;
|
||||
int vo_fsmode = 0;
|
||||
float vo_panscan = 0.0f;
|
||||
int vo_ontop = 0;
|
||||
|
||||
int vo_pts=0; // for hw decoding
|
||||
float vo_fps=0; // for mp1e rte
|
||||
|
@ -55,6 +55,8 @@
|
||||
// ... 21
|
||||
#define VOCTRL_START_SLICE 21
|
||||
|
||||
#define VOCTRL_ONTOP 25
|
||||
|
||||
// Vo can be used by xover
|
||||
#define VOCTRL_XOVERLAY_SUPPORT 22
|
||||
|
||||
|
@ -43,7 +43,6 @@ static HINSTANCE hddraw_dll; //handle to ddraw.dll
|
||||
static RECT rd; //rect of our stretched image
|
||||
static RECT rs; //rect of our source image
|
||||
static HWND hWnd=NULL; //handle to the window
|
||||
static uint32_t ontop=0; //always in foreground
|
||||
static uint32_t image_width, image_height; //image width and height
|
||||
static uint32_t d_image_width, d_image_height; //image width and height zoomed
|
||||
static uint8_t *image=NULL; //image data
|
||||
@ -60,6 +59,7 @@ extern void vo_draw_text(int dxs,int dys,void (*draw_alpha)(int x0,int y0, int w
|
||||
extern int vo_doublebuffering; //tribblebuffering
|
||||
extern int vo_fs;
|
||||
extern int vo_directrendering;
|
||||
extern int vo_ontop;
|
||||
|
||||
/*****************************************************************************
|
||||
* DirectDraw GUIDs.
|
||||
@ -527,12 +527,12 @@ static uint32_t Directx_ManageDisplay(uint32_t width,uint32_t height)
|
||||
dwUpdateFlags = DDOVER_SHOW | DDOVER_DDFX;
|
||||
/*if hardware can't do colorkeying set the window on top*/
|
||||
if(capsDrv.dwCKeyCaps & DDCKEYCAPS_DESTOVERLAY) dwUpdateFlags |= DDOVER_KEYDESTOVERRIDE;
|
||||
else ontop = 1;
|
||||
else vo_ontop = 1;
|
||||
}
|
||||
/*calculate window rect with borders*/
|
||||
if(!vo_fs)AdjustWindowRect(&rd_window,WS_OVERLAPPEDWINDOW|WS_SIZEBOX,0);
|
||||
|
||||
if((vo_fs) || (!vo_fs && ontop))hWndafter=HWND_TOPMOST;
|
||||
if((vo_fs) || (!vo_fs && vo_ontop))hWndafter=HWND_TOPMOST;
|
||||
else hWndafter=HWND_NOTOPMOST;
|
||||
|
||||
/*display the window*/
|
||||
@ -822,11 +822,6 @@ static uint32_t preinit(const char *arg)
|
||||
mp_msg(MSGT_VO,MSGL_V,"<vo_directx><INFO>disabled overlay\n");
|
||||
nooverlay = 1;
|
||||
}
|
||||
if(strstr(arg,"ontop"))
|
||||
{
|
||||
mp_msg(MSGT_VO,MSGL_V,"<vo_directx><INFO>window ontop\n");
|
||||
ontop = 1;
|
||||
}
|
||||
}
|
||||
if (Directx_InitDirectDraw()!= 0)return 1; //init DirectDraw
|
||||
if (Directx_CheckPrimaryPixelformat()!=0)return 1;
|
||||
@ -1162,6 +1157,18 @@ static uint32_t control(uint32_t request, void *data, ...)
|
||||
return query_format(*((uint32_t*)data));
|
||||
case VOCTRL_DRAW_IMAGE:
|
||||
return put_image(data);
|
||||
case VOCTRL_ONTOP:
|
||||
if(vm)
|
||||
{
|
||||
mp_msg(MSGT_VO, MSGL_ERR,"<vo_directx><ERROR>ontop has no meaning in exclusive mode\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
if(vo_ontop) vo_ontop = 0;
|
||||
else vo_ontop = 1;
|
||||
Directx_ManageDisplay(0,0);
|
||||
}
|
||||
return VO_TRUE;
|
||||
case VOCTRL_FULLSCREEN:
|
||||
{
|
||||
if(vm)
|
||||
|
@ -854,6 +854,8 @@ static uint32_t config(uint32_t s_width, uint32_t s_height, uint32_t width, uint
|
||||
break;
|
||||
}
|
||||
|
||||
if (vo_ontop) vo_x11_setlayer(mDisplay, vo_window, vo_ontop);
|
||||
|
||||
// start playing
|
||||
if(ioctl(dxr2_fd, DXR2_IOC_PLAY, NULL) == 0) {
|
||||
playing = 1;
|
||||
@ -1065,6 +1067,9 @@ static uint32_t control(uint32_t request, void *data, ...)
|
||||
flush_dxr2();
|
||||
ioctl(dxr2_fd, DXR2_IOC_PLAY, NULL);
|
||||
return VO_TRUE;
|
||||
case VOCTRL_ONTOP:
|
||||
vo_x11_ontop();
|
||||
return VO_TRUE;
|
||||
case VOCTRL_FULLSCREEN:
|
||||
if(!use_ol)
|
||||
return VO_NOTIMPL;
|
||||
|
@ -285,6 +285,9 @@ static uint32_t control(uint32_t request, void *data, ...)
|
||||
}
|
||||
return VO_TRUE;
|
||||
#ifdef HAVE_X11
|
||||
case VOCTRL_ONTOP:
|
||||
vo_x11_ontop();
|
||||
return VO_TRUE;
|
||||
case VOCTRL_FULLSCREEN:
|
||||
if (dxr3_overlay) {
|
||||
vo_x11_fullscreen();
|
||||
@ -668,6 +671,9 @@ static uint32_t config(uint32_t width, uint32_t height, uint32_t d_width, uint32
|
||||
overlay_set_mode(overlay_data, EM8300_OVERLAY_MODE_OVERLAY);
|
||||
overlay_set_mode(overlay_data, EM8300_OVERLAY_MODE_RECTANGLE);
|
||||
}
|
||||
|
||||
if (vo_ontop) vo_x11_setlayer(mDisplay, vo_window, vo_ontop);
|
||||
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
|
@ -207,6 +207,8 @@ config(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, uin
|
||||
|
||||
saver_off(mDisplay); // turning off screen saver
|
||||
|
||||
if (vo_ontop) vo_x11_setlayer(mDisplay, vo_window, vo_ontop);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -314,6 +316,9 @@ static uint32_t control(uint32_t request, void *data, ...)
|
||||
case VOCTRL_RESUME: return (int_pause=0);
|
||||
case VOCTRL_QUERY_FORMAT:
|
||||
return query_format(*((uint32_t*)data));
|
||||
case VOCTRL_ONTOP:
|
||||
vo_x11_ontop();
|
||||
return VO_TRUE;
|
||||
case VOCTRL_FULLSCREEN:
|
||||
vo_x11_fullscreen();
|
||||
return VO_TRUE;
|
||||
|
@ -1006,6 +1006,7 @@ config(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, uin
|
||||
return -1;
|
||||
#ifndef GL_WIN32
|
||||
saver_off(mDisplay);
|
||||
if (vo_ontop) vo_x11_setlayer(mDisplay,vo_window, vo_ontop);
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
@ -1172,6 +1173,13 @@ static uint32_t control(uint32_t request, void *data, ...)
|
||||
case VOCTRL_RESUME: return (int_pause=0);
|
||||
case VOCTRL_QUERY_FORMAT:
|
||||
return query_format(*((uint32_t*)data));
|
||||
case VOCTRL_ONTOP:
|
||||
#ifdef GL_WIN32
|
||||
vo_w32_ontop();
|
||||
#else
|
||||
vo_x11_ontop();
|
||||
#endif
|
||||
return VO_TRUE;
|
||||
case VOCTRL_FULLSCREEN:
|
||||
#ifdef GL_WIN32
|
||||
vo_w32_fullscreen();
|
||||
|
@ -435,6 +435,9 @@ static uint32_t config( uint32_t width,uint32_t height,uint32_t d_width,uint32_t
|
||||
#endif
|
||||
|
||||
saver_off(mDisplay);
|
||||
|
||||
if (vo_ontop) vo_x11_setlayer(mDisplay, vo_window, vo_ontop);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -657,6 +660,9 @@ static uint32_t control(uint32_t request, void *data, ...)
|
||||
va_end(ap);
|
||||
return vo_x11_get_equalizer(data, value);
|
||||
}
|
||||
case VOCTRL_ONTOP:
|
||||
vo_x11_ontop();
|
||||
return VO_TRUE;
|
||||
case VOCTRL_FULLSCREEN:
|
||||
{
|
||||
vo_x11_fullscreen();
|
||||
|
@ -221,6 +221,8 @@ static uint32_t config( uint32_t width, uint32_t height, uint32_t d_width, uint3
|
||||
|
||||
saver_off(mDisplay);
|
||||
|
||||
if (vo_ontop) vo_x11_setlayer(mDisplay, vo_window, vo_ontop);
|
||||
|
||||
XFlush( mDisplay );
|
||||
XSync( mDisplay,False );
|
||||
|
||||
|
@ -192,6 +192,9 @@ static void set_window(int force_update)
|
||||
XSetForeground(mDisplay, vo_gc, colorkey);
|
||||
XFillRectangle(mDisplay, vo_window, vo_gc, drwX, drwY, drwWidth,
|
||||
(vo_fs ? drwHeight - 1 : drwHeight));
|
||||
|
||||
if (vo_ontop) vo_x11_setlayer(mDisplay, vo_window, vo_ontop);
|
||||
|
||||
/* flush, update drawable */
|
||||
XFlush(mDisplay);
|
||||
|
||||
@ -456,6 +459,9 @@ static uint32_t control(uint32_t request, void *data, ...)
|
||||
case VOCTRL_GET_PANSCAN:
|
||||
if ( !vo_config_count || !vo_fs ) return VO_FALSE;
|
||||
return VO_TRUE;
|
||||
case VOCTRL_ONTOP:
|
||||
vo_x11_ontop();
|
||||
return VO_TRUE;
|
||||
case VOCTRL_FULLSCREEN:
|
||||
vo_x11_fullscreen();
|
||||
case VOCTRL_SET_PANSCAN:
|
||||
|
@ -346,6 +346,9 @@ static uint32_t config(uint32_t width, uint32_t height, uint32_t d_width, uint32
|
||||
mp_msg(MSGT_VO,MSGL_V, "[xv] dx: %d dy: %d dw: %d dh: %d\n",drwX,drwY,vo_dwidth,vo_dheight );
|
||||
|
||||
saver_off(mDisplay); // turning off screen saver
|
||||
|
||||
if (vo_ontop) vo_x11_setlayer(mDisplay, vo_window, vo_ontop);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -749,6 +752,9 @@ static uint32_t control(uint32_t request, void *data, ...)
|
||||
|
||||
return(vo_xv_get_eq(xv_port, data, value));
|
||||
}
|
||||
case VOCTRL_ONTOP:
|
||||
vo_x11_ontop();
|
||||
return VO_TRUE;
|
||||
}
|
||||
return VO_NOTIMPL;
|
||||
}
|
||||
|
@ -368,6 +368,8 @@ else
|
||||
|
||||
panscan_calc();
|
||||
|
||||
if (vo_ontop) vo_x11_setlayer(mDisplay, vo_window, vo_ontop);
|
||||
|
||||
saver_off(mDisplay); /* turning off screen saver */
|
||||
|
||||
return(0);
|
||||
@ -466,6 +468,9 @@ static uint32_t control(uint32_t request, void *data, ...)
|
||||
case VOCTRL_GET_PANSCAN:
|
||||
if ( !vo_config_count || !vo_fs ) return VO_FALSE;
|
||||
return VO_TRUE;
|
||||
case VOCTRL_ONTOP:
|
||||
vo_x11_ontop();
|
||||
return VO_TRUE;
|
||||
case VOCTRL_FULLSCREEN:
|
||||
vo_x11_fullscreen();
|
||||
case VOCTRL_SET_PANSCAN:
|
||||
|
@ -792,6 +792,8 @@ found_subpic:
|
||||
|
||||
mp_msg(MSGT_VO,MSGL_V, "[xvmc] dx: %d dy: %d dw: %d dh: %d\n",drwX,drwY,vo_dwidth,vo_dheight );
|
||||
|
||||
if (vo_ontop) vo_x11_setlayer(mDisplay, vo_window, vo_ontop);
|
||||
|
||||
saver_off(mDisplay); // turning off screen saver
|
||||
//end vo_xv
|
||||
|
||||
@ -1408,6 +1410,9 @@ static uint32_t control(uint32_t request, void *data, ... )
|
||||
//vo_xv
|
||||
case VOCTRL_GUISUPPORT:
|
||||
return VO_TRUE;
|
||||
case VOCTRL_ONTOP:
|
||||
vo_x11_ontop();
|
||||
return VO_TRUE;
|
||||
case VOCTRL_FULLSCREEN:
|
||||
vo_x11_fullscreen();
|
||||
case VOCTRL_GET_PANSCAN:
|
||||
|
@ -146,18 +146,20 @@ static void resetMode(void) {
|
||||
}
|
||||
|
||||
int createRenderingContext(void) {
|
||||
HWND layer = HWND_NOTOPMOST;
|
||||
if (wglContext) return 1;
|
||||
|
||||
if (vo_fs || vo_ontop) layer = HWND_TOPMOST;
|
||||
if (vo_fs) {
|
||||
changeMode();
|
||||
SetWindowPos(vo_hwnd, HWND_TOPMOST, 0, 0, vo_screenwidth, vo_screenheight, SWP_SHOWWINDOW);
|
||||
SetWindowPos(vo_hwnd, layer, 0, 0, vo_screenwidth, vo_screenheight, SWP_SHOWWINDOW);
|
||||
if (cursor) {
|
||||
ShowCursor(0);
|
||||
cursor = 0;
|
||||
}
|
||||
} else {
|
||||
resetMode();
|
||||
SetWindowPos(vo_hwnd, HWND_NOTOPMOST, (vo_screenwidth - vo_dwidth) / 2, (vo_screenheight - vo_dheight) / 2, vo_dwidth, vo_dheight, SWP_SHOWWINDOW);
|
||||
SetWindowPos(vo_hwnd, layer, (vo_screenwidth - vo_dwidth) / 2, (vo_screenheight - vo_dheight) / 2, vo_dwidth, vo_dheight, SWP_SHOWWINDOW);
|
||||
if (!cursor) {
|
||||
ShowCursor(1);
|
||||
cursor = 1;
|
||||
@ -256,6 +258,16 @@ void vo_w32_fullscreen(void) {
|
||||
createRenderingContext();
|
||||
}
|
||||
|
||||
void vo_w32_ontop( void )
|
||||
{
|
||||
vo_ontop = !vo_ontop;
|
||||
if (!vo_fs) {
|
||||
HWND layer = HWND_NOTOPMOST;
|
||||
if (vo_ontop) layer = HWND_TOPMOST;
|
||||
SetWindowPos(vo_hwnd, layer, (vo_screenwidth - vo_dwidth) / 2, (vo_screenheight - vo_dheight) / 2, vo_dwidth, vo_dheight, SWP_SHOWWINDOW);
|
||||
}
|
||||
}
|
||||
|
||||
void vo_w32_uninit() {
|
||||
mp_msg(MSGT_VO, MSGL_V, "vo: win32: uninit\n");
|
||||
resetMode();
|
||||
|
@ -6,6 +6,7 @@ extern uint32_t o_dheight;
|
||||
extern HDC vo_hdc;
|
||||
extern int vo_fs;
|
||||
extern int vo_vm;
|
||||
extern int vo_ontop;
|
||||
|
||||
extern int vo_init(void);
|
||||
extern void vo_w32_uninit(void);
|
||||
|
@ -1050,6 +1050,9 @@ void vo_x11_fullscreen( void )
|
||||
vo_x11_decoration( mDisplay,vo_window,(vo_fs) ? 0 : 1 );
|
||||
vo_x11_sizehint( x,y,w,h,0 );
|
||||
vo_x11_setlayer( mDisplay,vo_window,vo_fs );
|
||||
|
||||
if ((!(vo_fs)) & vo_ontop) vo_x11_setlayer(mDisplay, vo_window,vo_ontop);
|
||||
|
||||
if(vo_wm_type==0 && !(vo_fsmode&16))
|
||||
// XUnmapWindow( mDisplay,vo_window ); // required for MWM
|
||||
XWithdrawWindow(mDisplay,vo_window,mScreen);
|
||||
@ -1062,6 +1065,13 @@ void vo_x11_fullscreen( void )
|
||||
XFlush( mDisplay );
|
||||
}
|
||||
|
||||
void vo_x11_ontop( void )
|
||||
{
|
||||
vo_ontop = (!(vo_ontop));
|
||||
|
||||
vo_x11_setlayer(mDisplay, vo_window, vo_ontop);
|
||||
}
|
||||
|
||||
/*
|
||||
* XScreensaver stuff
|
||||
*/
|
||||
|
@ -27,6 +27,7 @@ extern int vo_fs_layer;
|
||||
extern int vo_wm_type;
|
||||
extern int vo_fs_type;
|
||||
extern char** vo_fstype_list;
|
||||
extern int vo_ontop;
|
||||
|
||||
extern char *mDisplayName;
|
||||
extern Display *mDisplay;
|
||||
@ -60,6 +61,7 @@ extern Window vo_x11_create_smooth_window( Display *mDisplay, Window mRoot,
|
||||
extern void vo_x11_clearwindow_part(Display *mDisplay, Window vo_window,
|
||||
int img_width, int img_height, int use_fs);
|
||||
extern void vo_x11_clearwindow( Display *mDisplay, Window vo_window );
|
||||
extern void vo_x11_ontop();
|
||||
|
||||
#endif
|
||||
|
||||
|
15
mplayer.c
15
mplayer.c
@ -736,6 +736,7 @@ int osd_show_vobsub_changed = 0;
|
||||
int osd_show_sub_changed = 0;
|
||||
int osd_show_percentage = 0;
|
||||
int osd_show_tv_channel = 25;
|
||||
int osd_show_ontop = 0;
|
||||
|
||||
int rtc_fd=-1;
|
||||
|
||||
@ -3001,6 +3002,17 @@ if (stream->type==STREAMTYPE_DVDNAV && dvd_nav_still)
|
||||
#endif
|
||||
if(video_out && vo_config_count) video_out->control(VOCTRL_FULLSCREEN, 0);
|
||||
} break;
|
||||
case MP_CMD_VO_ONTOP:
|
||||
{
|
||||
if(video_out && vo_config_count) {
|
||||
video_out->control(VOCTRL_ONTOP, 0);
|
||||
#ifdef USE_OSD
|
||||
osd_show_ontop=10;
|
||||
vo_osd_changed(OSDTYPE_SUBTITLE);
|
||||
#endif
|
||||
}
|
||||
|
||||
} break;
|
||||
case MP_CMD_PANSCAN : {
|
||||
if ( !video_out ) break;
|
||||
if ( video_out->control( VOCTRL_GET_PANSCAN,NULL ) == VO_TRUE )
|
||||
@ -3551,6 +3563,9 @@ if(rel_seek_secs || abs_seek_pos){
|
||||
if (osd_show_av_delay) {
|
||||
snprintf(osd_text_tmp, 63, "A-V delay: %d ms", ROUND(audio_delay*1000));
|
||||
osd_show_av_delay--;
|
||||
} else if (osd_show_ontop) {
|
||||
snprintf(osd_text_tmp, 63, "Stay on top: %sabled", vo_ontop?"en":"dis");
|
||||
osd_show_ontop--;
|
||||
} else if(osd_level>=2) {
|
||||
int len = demuxer_get_time_length(demuxer);
|
||||
int percentage = -1;
|
||||
|
Loading…
Reference in New Issue
Block a user