mirror of https://github.com/mpv-player/mpv
fix some small bug and -rootwin
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@6044 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
parent
a7c47b7910
commit
e6215bef40
|
@ -147,6 +147,8 @@ void mplMainDraw( wsParamDisplay )
|
|||
txSample * image = NULL;
|
||||
int i;
|
||||
|
||||
if ( appMPlayer.mainWindow.State == wsWindowClosed ) exit_player( MSGTR_Exit_quit );
|
||||
|
||||
if ( appMPlayer.mainWindow.Visible == wsWindowNotVisible ||
|
||||
!mainVisible ) return;
|
||||
// !appMPlayer.mainWindow.Mapped ) return;
|
||||
|
|
|
@ -249,7 +249,6 @@ static uint32_t config( uint32_t width,uint32_t height,uint32_t d_width,uint32_t
|
|||
static uint32_t vm_height;
|
||||
#endif
|
||||
|
||||
|
||||
vo_mouse_autohide=1;
|
||||
old_vo_dwidth=-1;
|
||||
old_vo_dheight=-1;
|
||||
|
@ -261,6 +260,7 @@ static uint32_t config( uint32_t width,uint32_t height,uint32_t d_width,uint32_t
|
|||
if(in_format==IMGFMT_I420 || in_format==IMGFMT_IYUV) in_format=IMGFMT_YV12;
|
||||
srcW= width;
|
||||
srcH= height;
|
||||
vo_dx=( vo_screenwidth - d_width ) / 2; vo_dy=( vo_screenheight - d_height ) / 2;
|
||||
vo_dwidth=width; vo_dheight=height;
|
||||
|
||||
if( flags&0x03 ) fullscreen = 1;
|
||||
|
@ -290,15 +290,10 @@ static uint32_t config( uint32_t width,uint32_t height,uint32_t d_width,uint32_t
|
|||
else
|
||||
#endif
|
||||
{
|
||||
hint.x=0;
|
||||
hint.y=0;
|
||||
// if(zoomFlag){
|
||||
// hint.width=d_width;
|
||||
// hint.height=d_height;
|
||||
// }else{
|
||||
hint.width=width;
|
||||
hint.height=height;
|
||||
// }
|
||||
hint.x=vo_dx;
|
||||
hint.y=vo_dy;
|
||||
hint.width=width;
|
||||
hint.height=height;
|
||||
|
||||
#ifdef HAVE_XF86VM
|
||||
if ( vm )
|
||||
|
@ -313,13 +308,7 @@ static uint32_t config( uint32_t width,uint32_t height,uint32_t d_width,uint32_t
|
|||
hint.width=modeline_width;
|
||||
hint.height=modeline_height;
|
||||
}
|
||||
// else
|
||||
#endif
|
||||
// if ( fullscreen )
|
||||
// {
|
||||
// hint.width=vo_screenwidth;
|
||||
// hint.height=vo_screenheight;
|
||||
// }
|
||||
hint.flags=PPosition | PSize;
|
||||
|
||||
bg=WhitePixel( mDisplay,mScreen );
|
||||
|
@ -344,24 +333,36 @@ static uint32_t config( uint32_t width,uint32_t height,uint32_t d_width,uint32_t
|
|||
#endif
|
||||
|
||||
if ( WinID>=0 ){
|
||||
vo_window = WinID ? ((Window)WinID) : RootWindow( mDisplay,mScreen );
|
||||
XUnmapWindow( mDisplay,vo_window );
|
||||
XChangeWindowAttributes( mDisplay,vo_window,xswamask,&xswa );
|
||||
vo_window = WinID ? ((Window)WinID) : mRootWin;
|
||||
if ( WinID )
|
||||
{
|
||||
XUnmapWindow( mDisplay,vo_window );
|
||||
XChangeWindowAttributes( mDisplay,vo_window,xswamask,&xswa );
|
||||
XSelectInput( mDisplay,vo_window,StructureNotifyMask | KeyPressMask | PropertyChangeMask | PointerMotionMask | ButtonPressMask | ButtonReleaseMask | ExposureMask );
|
||||
} else XSelectInput( mDisplay,vo_window,ExposureMask );
|
||||
}
|
||||
else
|
||||
vo_window=XCreateWindow( mDisplay,RootWindow( mDisplay,mScreen ),
|
||||
{
|
||||
vo_window=XCreateWindow( mDisplay,mRootWin,
|
||||
hint.x,hint.y,
|
||||
hint.width,hint.height,
|
||||
xswa.border_pixel,depth,CopyFromParent,vinfo.visual,xswamask,&xswa );
|
||||
|
||||
vo_x11_classhint( mDisplay,vo_window,"x11" );
|
||||
vo_hidecursor(mDisplay,vo_window);
|
||||
XSelectInput( mDisplay,vo_window,StructureNotifyMask );
|
||||
XSetStandardProperties( mDisplay,vo_window,title,title,None,NULL,0,&hint );
|
||||
XMapWindow( mDisplay,vo_window );
|
||||
if(WinID!=0)
|
||||
do { XNextEvent( mDisplay,&xev ); } while ( xev.type != MapNotify || xev.xmap.event != vo_window );
|
||||
XSelectInput( mDisplay,vo_window,NoEventMask );
|
||||
vo_x11_classhint( mDisplay,vo_window,"x11" );
|
||||
vo_hidecursor(mDisplay,vo_window);
|
||||
XSelectInput( mDisplay,vo_window,StructureNotifyMask );
|
||||
XSetStandardProperties( mDisplay,vo_window,title,title,None,NULL,0,&hint );
|
||||
XMapWindow( mDisplay,vo_window );
|
||||
if(WinID!=0)
|
||||
do { XNextEvent( mDisplay,&xev ); } while ( xev.type != MapNotify || xev.xmap.event != vo_window );
|
||||
XSelectInput( mDisplay,vo_window,NoEventMask );
|
||||
|
||||
if ( fullscreen ) vo_x11_fullscreen();
|
||||
#ifdef HAVE_XINERAMA
|
||||
vo_x11_xinerama_move(mDisplay,vo_window);
|
||||
#endif
|
||||
}
|
||||
|
||||
XFlush( mDisplay );
|
||||
XSync( mDisplay,False );
|
||||
|
||||
|
@ -381,13 +382,11 @@ static uint32_t config( uint32_t width,uint32_t height,uint32_t d_width,uint32_t
|
|||
#endif
|
||||
}
|
||||
|
||||
if ( fullscreen ) vo_x11_fullscreen();
|
||||
#ifdef HAVE_XINERAMA
|
||||
vo_x11_xinerama_move(mDisplay,vo_window);
|
||||
#endif
|
||||
vo_gc=XCreateGC( mDisplay,vo_window,0L,&xgcv );
|
||||
getMyXImage();
|
||||
|
||||
vo_gc=XCreateGC( mDisplay,vo_window,0L,&xgcv );
|
||||
getMyXImage();
|
||||
if ( !WinID )
|
||||
{ vo_dwidth=vo_screenwidth; vo_dheight=vo_screenheight; }
|
||||
|
||||
switch ((bpp=myximage->bits_per_pixel)){
|
||||
case 24: draw_alpha_fnc=draw_alpha_24;
|
||||
|
|
|
@ -79,9 +79,6 @@ static uint32_t mDepth, bpp, mode;
|
|||
static XWindowAttributes attribs;
|
||||
static uint32_t X_already_started=0;
|
||||
|
||||
static uint32_t wndX;
|
||||
static uint32_t wndY;
|
||||
|
||||
static uint32_t fgColor;
|
||||
|
||||
static uint32_t mvHeight;
|
||||
|
@ -108,11 +105,15 @@ static void mDrawColorKey( void )
|
|||
|
||||
static void set_window(){
|
||||
|
||||
XGetGeometry( mDisplay,vo_window,&mRoot,&drwX,&drwY,&drwWidth,&drwHeight,&drwBorderWidth,&drwDepth );
|
||||
fprintf( stderr,"[xmga] x: %d y: %d w: %d h: %d\n",drwX,drwY,drwWidth,drwHeight );
|
||||
drwX=0; drwY=0;
|
||||
XTranslateCoordinates( mDisplay,vo_window,mRoot,0,0,&drwcX,&drwcY,&mRoot );
|
||||
fprintf( stderr,"[xmga] dcx: %d dcy: %d dx: %d dy: %d dw: %d dh: %d\n",drwcX,drwcY,drwX,drwY,drwWidth,drwHeight );
|
||||
if ( WinID )
|
||||
{
|
||||
XGetGeometry( mDisplay,vo_window,&mRoot,&drwX,&drwY,&drwWidth,&drwHeight,&drwBorderWidth,&drwDepth );
|
||||
fprintf( stderr,"[xmga] x: %d y: %d w: %d h: %d\n",drwX,drwY,drwWidth,drwHeight );
|
||||
drwX=0; drwY=0;
|
||||
XTranslateCoordinates( mDisplay,vo_window,mRoot,0,0,&drwcX,&drwcY,&mRoot );
|
||||
fprintf( stderr,"[xmga] dcx: %d dcy: %d dx: %d dy: %d dw: %d dh: %d\n",drwcX,drwcY,drwX,drwY,drwWidth,drwHeight );
|
||||
}
|
||||
else { drwX=drwcX=vo_dx; drwY=drwcY=vo_dy; drwWidth=vo_dwidth; drwHeight=vo_dheight; }
|
||||
|
||||
aspect(&dwidth,&dheight,A_NOZOOM);
|
||||
if ( vo_fs )
|
||||
|
@ -166,9 +167,8 @@ static void check_events(void)
|
|||
int e=vo_x11_check_events(mDisplay);
|
||||
if ( !(e&VO_EVENT_RESIZE) && !(e&VO_EVENT_EXPOSE) ) return;
|
||||
set_window();
|
||||
if(e&VO_EVENT_EXPOSE) mDrawColorKey();
|
||||
if ( ioctl( f,MGA_VID_CONFIG,&mga_vid_config ) )
|
||||
printf( "Error in mga_vid_config ioctl (wrong mga_vid.o version?)" );
|
||||
mDrawColorKey();
|
||||
if ( ioctl( f,MGA_VID_CONFIG,&mga_vid_config ) ) printf( "Error in mga_vid_config ioctl (wrong mga_vid.o version?)" );
|
||||
}
|
||||
|
||||
static void draw_osd(void)
|
||||
|
@ -188,7 +188,7 @@ static void flip_page(void){
|
|||
|
||||
static int inited=0;
|
||||
|
||||
static uint32_t config( uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, uint32_t fullscreen, char *title, uint32_t format,const vo_tune_info_t* info)
|
||||
static uint32_t config( uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, uint32_t flags, char *title, uint32_t format,const vo_tune_info_t* info)
|
||||
{
|
||||
char * mTitle=(title == NULL) ? "XMGA render" : title;
|
||||
XVisualInfo vinfo;
|
||||
|
@ -230,7 +230,7 @@ static uint32_t config( uint32_t width, uint32_t height, uint32_t d_width, uint3
|
|||
|
||||
mvWidth=width; mvHeight=height;
|
||||
|
||||
wndX=0; wndY=0;
|
||||
vo_dx=( vo_screenwidth - d_width ) / 2; vo_dy=( vo_screenheight - d_height ) / 2;
|
||||
vo_dwidth=d_width; vo_dheight=d_height;
|
||||
vo_mouse_autohide=1;
|
||||
|
||||
|
@ -254,46 +254,58 @@ static uint32_t config( uint32_t width, uint32_t height, uint32_t d_width, uint3
|
|||
#endif
|
||||
{
|
||||
#ifdef X11_FULLSCREEN
|
||||
if ( fullscreen&1 ) aspect(&dwidth,&dheight,A_ZOOM);
|
||||
if ( flags&1 ) aspect(&dwidth,&dheight,A_ZOOM);
|
||||
#endif
|
||||
|
||||
XGetWindowAttributes( mDisplay,DefaultRootWindow( mDisplay ),&attribs );
|
||||
XGetWindowAttributes( mDisplay,mRootWin,&attribs );
|
||||
mDepth=attribs.depth;
|
||||
if ( mDepth != 15 && mDepth != 16 && mDepth != 24 && mDepth != 32 ) mDepth=24;
|
||||
XMatchVisualInfo( mDisplay,mScreen,mDepth,TrueColor,&vinfo );
|
||||
xWAttribs.colormap=XCreateColormap( mDisplay,RootWindow( mDisplay,mScreen ),vinfo.visual,AllocNone );
|
||||
xWAttribs.colormap=XCreateColormap( mDisplay,mRootWin,vinfo.visual,AllocNone );
|
||||
xWAttribs.background_pixel=0;
|
||||
xWAttribs.border_pixel=0;
|
||||
xWAttribs.event_mask=StructureNotifyMask | ExposureMask | KeyPressMask | PropertyChangeMask |
|
||||
((WinID==0)?0:(ButtonPressMask | ButtonReleaseMask | PointerMotionMask));
|
||||
xWAttribs.event_mask=StructureNotifyMask | ExposureMask | KeyPressMask |
|
||||
((WinID==0)?0:(ButtonPressMask | ButtonReleaseMask | PointerMotionMask | PropertyChangeMask));
|
||||
xswamask=CWBackPixel | CWBorderPixel | CWColormap | CWEventMask;
|
||||
|
||||
if ( WinID>=0 ){
|
||||
vo_window = WinID ? ((Window)WinID) : RootWindow(mDisplay,mScreen);
|
||||
XUnmapWindow( mDisplay,vo_window );
|
||||
XChangeWindowAttributes( mDisplay,vo_window,xswamask,&xWAttribs);
|
||||
|
||||
vo_window = WinID ? ((Window)WinID) : mRootWin;
|
||||
if ( WinID )
|
||||
{
|
||||
XUnmapWindow( mDisplay,vo_window );
|
||||
XChangeWindowAttributes( mDisplay,vo_window,xswamask,&xWAttribs);
|
||||
XSelectInput( mDisplay,vo_window,StructureNotifyMask | KeyPressMask | PropertyChangeMask | PointerMotionMask | ButtonPressMask | ButtonReleaseMask | ExposureMask );
|
||||
} else XSelectInput( mDisplay,vo_window,ExposureMask );
|
||||
|
||||
} else
|
||||
vo_window=XCreateWindow( mDisplay,mRootWin,
|
||||
wndX,wndY,
|
||||
vo_dwidth,vo_dheight,
|
||||
xWAttribs.border_pixel,
|
||||
mDepth,
|
||||
InputOutput,
|
||||
vinfo.visual,xswamask,&xWAttribs );
|
||||
vo_x11_classhint( mDisplay,vo_window,"xmga" );
|
||||
vo_hidecursor(mDisplay,vo_window);
|
||||
{
|
||||
vo_window=XCreateWindow( mDisplay,mRootWin,
|
||||
vo_dx,vo_dy,
|
||||
vo_dwidth,vo_dheight,
|
||||
xWAttribs.border_pixel,
|
||||
mDepth,
|
||||
InputOutput,
|
||||
vinfo.visual,xswamask,&xWAttribs );
|
||||
|
||||
XStoreName( mDisplay,vo_window,mTitle );
|
||||
XMapWindow( mDisplay,vo_window );
|
||||
vo_x11_classhint( mDisplay,vo_window,"xmga" );
|
||||
vo_hidecursor(mDisplay,vo_window);
|
||||
vo_x11_sizehint( vo_dx,vo_dy,vo_dwidth,vo_dheight,0 );
|
||||
|
||||
if ( fullscreen&1 ) vo_x11_fullscreen();
|
||||
XStoreName( mDisplay,vo_window,mTitle );
|
||||
XMapWindow( mDisplay,vo_window );
|
||||
|
||||
if ( flags&1 ) vo_x11_fullscreen();
|
||||
|
||||
#ifdef HAVE_XINERAMA
|
||||
vo_x11_xinerama_move(mDisplay,vo_window);
|
||||
vo_x11_xinerama_move(mDisplay,vo_window);
|
||||
#endif
|
||||
vo_gc=XCreateGC( mDisplay,vo_window,GCForeground,&wGCV );
|
||||
}
|
||||
vo_gc=XCreateGC( mDisplay,vo_window,GCForeground,&wGCV );
|
||||
}
|
||||
|
||||
if ( ( flags&1 )&&( !WinID ) ) { vo_dx=0; vo_dy=0; vo_dwidth=vo_screenwidth; vo_dheight=vo_screenheight; vo_fs=1; }
|
||||
|
||||
set_window();
|
||||
|
||||
mga_vid_config.src_width=width;
|
||||
|
@ -306,8 +318,6 @@ static uint32_t config( uint32_t width, uint32_t height, uint32_t d_width, uint3
|
|||
|
||||
if(mga_init()) return -1;
|
||||
|
||||
set_window();
|
||||
|
||||
XFlush( mDisplay );
|
||||
XSync( mDisplay,False );
|
||||
|
||||
|
|
|
@ -337,10 +337,8 @@ static uint32_t config(uint32_t width, uint32_t height, uint32_t d_width, uint32
|
|||
|
||||
vo_mouse_autohide=1;
|
||||
|
||||
vo_dx=( vo_screenwidth - d_width ) / 2; vo_dy=( vo_screenheight - d_height ) / 2;
|
||||
vo_dwidth=d_width; vo_dheight=d_height;
|
||||
// vo_fs=flags&1;
|
||||
// if ( vo_fs )
|
||||
// { vo_old_width=d_width; vo_old_height=d_height; }
|
||||
|
||||
#ifdef HAVE_XF86VM
|
||||
if( flags&0x02 ) vm = 1;
|
||||
|
@ -366,8 +364,8 @@ static uint32_t config(uint32_t width, uint32_t height, uint32_t d_width, uint32
|
|||
else
|
||||
#endif
|
||||
{
|
||||
hint.x = 0;
|
||||
hint.y = 0;
|
||||
hint.x = vo_dx;
|
||||
hint.y = vo_dy;
|
||||
hint.width = d_width;
|
||||
hint.height = d_height;
|
||||
aspect(&d_width,&d_height,A_NOZOOM);
|
||||
|
@ -388,8 +386,6 @@ static uint32_t config(uint32_t width, uint32_t height, uint32_t d_width, uint32
|
|||
#endif
|
||||
if ( vo_fs )
|
||||
{
|
||||
// hint.width=vo_screenwidth;
|
||||
// hint.height=vo_screenheight;
|
||||
#ifdef X11_FULLSCREEN
|
||||
/* this code replaces X11_FULLSCREEN hack in mplayer.c
|
||||
* aspect() is available through aspect.h for all vos.
|
||||
|
@ -416,35 +412,39 @@ static uint32_t config(uint32_t width, uint32_t height, uint32_t d_width, uint32
|
|||
xswamask = CWBackPixel | CWBorderPixel;
|
||||
|
||||
if ( WinID>=0 ){
|
||||
vo_window = WinID ? ((Window)WinID) : RootWindow(mDisplay,mScreen);
|
||||
XUnmapWindow( mDisplay,vo_window );
|
||||
XChangeWindowAttributes( mDisplay,vo_window,xswamask,&xswa );
|
||||
vo_window = WinID ? ((Window)WinID) : mRootWin;
|
||||
if ( WinID )
|
||||
{
|
||||
XUnmapWindow( mDisplay,vo_window );
|
||||
XChangeWindowAttributes( mDisplay,vo_window,xswamask,&xswa );
|
||||
XSelectInput( mDisplay,vo_window,StructureNotifyMask | KeyPressMask | PropertyChangeMask | PointerMotionMask | ButtonPressMask | ButtonReleaseMask | ExposureMask );
|
||||
} else { drwX=vo_dx; drwY=vo_dy; }
|
||||
} else
|
||||
{
|
||||
vo_window = XCreateWindow(mDisplay, mRootWin,
|
||||
hint.x, hint.y, hint.width, hint.height,
|
||||
0, depth,CopyFromParent,vinfo.visual,xswamask,&xswa);
|
||||
|
||||
vo_window = XCreateWindow(mDisplay, RootWindow(mDisplay,mScreen),
|
||||
hint.x, hint.y, hint.width, hint.height,
|
||||
0, depth,CopyFromParent,vinfo.visual,xswamask,&xswa);
|
||||
vo_x11_classhint( mDisplay,vo_window,"xv" );
|
||||
vo_hidecursor(mDisplay,vo_window);
|
||||
|
||||
vo_x11_classhint( mDisplay,vo_window,"xv" );
|
||||
vo_hidecursor(mDisplay,vo_window);
|
||||
|
||||
XSelectInput(mDisplay, vo_window, StructureNotifyMask | KeyPressMask | PropertyChangeMask |
|
||||
XSelectInput(mDisplay, vo_window, StructureNotifyMask | KeyPressMask | PropertyChangeMask |
|
||||
((WinID==0) ? 0 : (PointerMotionMask
|
||||
#ifdef HAVE_NEW_INPUT
|
||||
| ButtonPressMask | ButtonReleaseMask
|
||||
#endif
|
||||
))
|
||||
);
|
||||
XSetStandardProperties(mDisplay, vo_window, hello, hello, None, NULL, 0, &hint);
|
||||
XSetWMNormalHints( mDisplay,vo_window,&hint );
|
||||
XMapWindow(mDisplay, vo_window);
|
||||
if ( flags&1 ) vo_x11_fullscreen();
|
||||
)));
|
||||
XSetStandardProperties(mDisplay, vo_window, hello, hello, None, NULL, 0, &hint);
|
||||
XSetWMNormalHints( mDisplay,vo_window,&hint );
|
||||
XMapWindow(mDisplay, vo_window);
|
||||
if ( flags&1 ) vo_x11_fullscreen();
|
||||
#ifdef HAVE_XINERAMA
|
||||
vo_x11_xinerama_move(mDisplay,vo_window);
|
||||
vo_x11_xinerama_move(mDisplay,vo_window);
|
||||
#endif
|
||||
vo_gc = XCreateGC(mDisplay, vo_window, 0L, &xgcv);
|
||||
XFlush(mDisplay);
|
||||
XSync(mDisplay, False);
|
||||
}
|
||||
vo_gc = XCreateGC(mDisplay, vo_window, 0L, &xgcv);
|
||||
XFlush(mDisplay);
|
||||
XSync(mDisplay, False);
|
||||
#ifdef HAVE_XF86VM
|
||||
if ( vm )
|
||||
{
|
||||
|
@ -477,7 +477,7 @@ static uint32_t config(uint32_t width, uint32_t height, uint32_t d_width, uint32
|
|||
set_gamma_correction();
|
||||
|
||||
aspect(&vo_dwidth,&vo_dheight,A_NOZOOM);
|
||||
if ( vo_fs )
|
||||
if ( ( flags&1 )&&( !WinID ) )
|
||||
{
|
||||
aspect(&vo_dwidth,&vo_dheight,A_ZOOM);
|
||||
drwX=( vo_screenwidth - (vo_dwidth > vo_screenwidth?vo_screenwidth:vo_dwidth) ) / 2;
|
||||
|
|
|
@ -69,7 +69,6 @@ static uint32_t image_format;
|
|||
static uint32_t image_depth;
|
||||
|
||||
/* Window parameters */
|
||||
static uint32_t window_x, window_y;
|
||||
static uint32_t window_width, window_height;
|
||||
|
||||
/* used by XGetGeometry & XTranslateCoordinates for moving/resizing window */
|
||||
|
@ -79,26 +78,35 @@ static uint32_t drwX, drwY, drwWidth, drwHeight, drwBorderWidth,
|
|||
|
||||
static void set_window(int force_update,const vo_tune_info_t *info)
|
||||
{
|
||||
XGetGeometry(mDisplay, vo_window, &mRoot, &drwX, &drwY, &drwWidth,
|
||||
&drwHeight, &drwBorderWidth, &drwDepth);
|
||||
drwX = drwY = 0;
|
||||
XTranslateCoordinates(mDisplay, vo_window, mRoot, 0, 0,
|
||||
&drwcX, &drwcY, &mRoot);
|
||||
if ( WinID )
|
||||
{
|
||||
XGetGeometry(mDisplay, vo_window, &mRoot, &drwX, &drwY, &drwWidth,
|
||||
&drwHeight, &drwBorderWidth, &drwDepth);
|
||||
drwX = drwY = 0;
|
||||
XTranslateCoordinates(mDisplay, vo_window, mRoot, 0, 0,
|
||||
&drwcX, &drwcY, &mRoot);
|
||||
|
||||
aspect(&dwidth,&dheight,A_NOZOOM);
|
||||
if (!vo_fs)
|
||||
mp_msg(MSGT_VO, MSGL_V, "[xvidix] dcx: %d dcy: %d dx: %d dy: %d dw: %d dh: %d\n",
|
||||
drwcX, drwcY, drwX, drwY, drwWidth, drwHeight);
|
||||
aspect(&dwidth,&dheight,A_NOZOOM);
|
||||
if (!vo_fs)
|
||||
mp_msg(MSGT_VO, MSGL_V, "[xvidix] dcx: %d dcy: %d dx: %d dy: %d dw: %d dh: %d\n",
|
||||
drwcX, drwcY, drwX, drwY, drwWidth, drwHeight);
|
||||
|
||||
/* following stuff copied from vo_xmga.c */
|
||||
}
|
||||
else
|
||||
{
|
||||
aspect(&dwidth,&dheight,A_NOZOOM);
|
||||
drwcX=drwX=vo_dx; drwcY=drwY=vo_dy; drwWidth=vo_dwidth; drwHeight=vo_dheight;
|
||||
}
|
||||
|
||||
#if X11_FULLSCREEN
|
||||
if (vo_fs)
|
||||
{
|
||||
aspect(&dwidth,&dheight,A_ZOOM);
|
||||
drwX = (vo_screenwidth - (dwidth > vo_screenwidth ? vo_screenwidth : dwidth)) / 2;
|
||||
drwcX += drwX;
|
||||
drwcX = drwX;
|
||||
drwY = (vo_screenheight - (dheight > vo_screenheight ? vo_screenheight : dheight)) / 2;
|
||||
drwcY += drwY;
|
||||
drwcY = drwY;
|
||||
drwWidth = (dwidth > vo_screenwidth ? vo_screenwidth : dwidth);
|
||||
drwHeight = (dheight > vo_screenheight ? vo_screenheight : dheight);
|
||||
mp_msg(MSGT_VO, MSGL_V, "[xvidix-fs] dcx: %d dcy: %d dx: %d dy: %d dw: %d dh: %d\n",
|
||||
|
@ -129,17 +137,17 @@ static void set_window(int force_update,const vo_tune_info_t *info)
|
|||
#endif
|
||||
|
||||
/* set new values in VIDIX */
|
||||
if (force_update || (window_x != drwcX) || (window_y != drwcY) ||
|
||||
if (force_update || (vo_dx != drwcX) || (vo_dy != drwcY) ||
|
||||
(window_width != drwWidth) || (window_height != drwHeight))
|
||||
{
|
||||
window_x = drwcX;
|
||||
window_y = drwcY;
|
||||
vo_dx = drwcX;
|
||||
vo_dy = drwcY;
|
||||
window_width = drwWidth;
|
||||
window_height = drwHeight;
|
||||
|
||||
/* FIXME: implement runtime resize/move if possible, this way is very ugly! */
|
||||
vidix_stop();
|
||||
if (vidix_init(image_width, image_height, window_x, window_y,
|
||||
if (vidix_init(image_width, image_height, vo_dx, vo_dy,
|
||||
window_width, window_height, image_format, vo_depthonscreen,
|
||||
vo_screenwidth, vo_screenheight,info) != 0)
|
||||
{
|
||||
|
@ -153,7 +161,7 @@ static void set_window(int force_update,const vo_tune_info_t *info)
|
|||
}
|
||||
|
||||
mp_msg(MSGT_VO, MSGL_INFO, "[xvidix] window properties: pos: %dx%d, size: %dx%d\n",
|
||||
window_x, window_y, window_width, window_height);
|
||||
vo_dx, vo_dy, window_width, window_height);
|
||||
|
||||
/* mDrawColorKey: */
|
||||
|
||||
|
@ -189,6 +197,7 @@ static uint32_t config(uint32_t width, uint32_t height, uint32_t d_width,
|
|||
image_height = height;
|
||||
image_width = width;
|
||||
image_format = format;
|
||||
vo_mouse_autohide=1;
|
||||
|
||||
if (IMGFMT_IS_RGB(format))
|
||||
{
|
||||
|
@ -225,8 +234,8 @@ static uint32_t config(uint32_t width, uint32_t height, uint32_t d_width,
|
|||
aspect_save_prescale(d_width, d_height);
|
||||
aspect_save_screenres(vo_screenwidth, vo_screenheight);
|
||||
|
||||
window_x = 0;
|
||||
window_y = 0;
|
||||
vo_dx = 0;
|
||||
vo_dy = 0;
|
||||
window_width = d_width;
|
||||
window_height = d_height;
|
||||
|
||||
|
@ -255,6 +264,7 @@ static uint32_t config(uint32_t width, uint32_t height, uint32_t d_width,
|
|||
|
||||
aspect(&d_width, &d_height, A_NOZOOM);
|
||||
|
||||
vo_dx=( vo_screenwidth - d_width ) / 2; vo_dy=( vo_screenheight - d_height ) / 2;
|
||||
vo_dwidth=d_width; vo_dheight=d_height;
|
||||
|
||||
#ifdef HAVE_NEW_GUI
|
||||
|
@ -264,20 +274,7 @@ else
|
|||
#endif
|
||||
|
||||
#ifdef X11_FULLSCREEN
|
||||
if ( flags&1 ) /* fullscreen */
|
||||
{
|
||||
if (flags & 0x04)
|
||||
{
|
||||
aspect(&d_width, &d_height, A_ZOOM);
|
||||
}
|
||||
// else
|
||||
// {
|
||||
// d_width = vo_screenwidth;
|
||||
// d_height = vo_screenheight;
|
||||
// }
|
||||
// window_width = vo_screenwidth;
|
||||
// window_height = vo_screenheight;
|
||||
}
|
||||
if ( ( flags&1 )||(flags & 0x04) ) aspect(&d_width, &d_height, A_ZOOM);
|
||||
#endif
|
||||
dwidth = d_width;
|
||||
dheight = d_height;
|
||||
|
@ -295,51 +292,41 @@ else
|
|||
xswa.border_pixel = 0;
|
||||
xswa.colormap = XCreateColormap(mDisplay, RootWindow(mDisplay, mScreen),
|
||||
vinfo.visual, AllocNone);
|
||||
xswa.event_mask = StructureNotifyMask | ExposureMask | KeyPressMask |
|
||||
xswa.event_mask = StructureNotifyMask | ExposureMask | KeyPressMask | PropertyChangeMask |
|
||||
((WinID==0)?0:(ButtonPressMask | ButtonReleaseMask | PointerMotionMask));
|
||||
xswamask = CWBackPixel | CWBorderPixel | CWColormap | CWEventMask;
|
||||
|
||||
if (WinID >= 0)
|
||||
{
|
||||
vo_window = WinID ? ((Window)WinID) : RootWindow(mDisplay, mScreen);
|
||||
XUnmapWindow(mDisplay, vo_window);
|
||||
XChangeWindowAttributes(mDisplay, vo_window, xswamask, &xswa);
|
||||
if ( WinID )
|
||||
{
|
||||
XUnmapWindow(mDisplay, vo_window);
|
||||
XChangeWindowAttributes(mDisplay, vo_window, xswamask, &xswa);
|
||||
XSelectInput( mDisplay,vo_window,StructureNotifyMask | KeyPressMask | PropertyChangeMask | PointerMotionMask | ButtonPressMask | ButtonReleaseMask | ExposureMask );
|
||||
} else XSelectInput( mDisplay,vo_window,ExposureMask );
|
||||
}
|
||||
else
|
||||
vo_window = XCreateWindow(mDisplay, RootWindow(mDisplay, mScreen),
|
||||
window_x, window_y, window_width, window_height, xswa.border_pixel,
|
||||
{
|
||||
vo_window = XCreateWindow(mDisplay, RootWindow(mDisplay, mScreen),
|
||||
vo_dx, vo_dy, window_width, window_height, xswa.border_pixel,
|
||||
vinfo.depth, InputOutput, vinfo.visual, xswamask, &xswa);
|
||||
|
||||
vo_x11_classhint(mDisplay, vo_window, "xvidix");
|
||||
vo_hidecursor(mDisplay, vo_window);
|
||||
vo_x11_classhint(mDisplay, vo_window, "xvidix");
|
||||
vo_hidecursor(mDisplay, vo_window);
|
||||
vo_x11_sizehint( vo_dx,vo_dy,vo_dwidth,vo_dheight,0 );
|
||||
|
||||
//#ifdef X11_FULLSCREEN
|
||||
// if (vo_fs && vo_wm_type == 0) /* fullscreen */
|
||||
// vo_x11_decoration(mDisplay, vo_window, 0);
|
||||
//#endif
|
||||
XStoreName(mDisplay, vo_window, title);
|
||||
XMapWindow(mDisplay, vo_window);
|
||||
|
||||
XGetNormalHints(mDisplay, vo_window, &hint);
|
||||
hint.x = window_x;
|
||||
hint.y = window_y;
|
||||
hint.base_width = hint.width = window_width;
|
||||
hint.base_height = hint.height = window_height;
|
||||
hint.flags = USPosition | USSize;
|
||||
XSetNormalHints(mDisplay, vo_window, &hint);
|
||||
|
||||
XStoreName(mDisplay, vo_window, title);
|
||||
/* Map window. */
|
||||
|
||||
XMapWindow(mDisplay, vo_window);
|
||||
|
||||
if ( flags&1 ) vo_x11_fullscreen();
|
||||
if ( flags&1 ) vo_x11_fullscreen();
|
||||
|
||||
#ifdef HAVE_XINERAMA
|
||||
vo_x11_xinerama_move(mDisplay, vo_window);
|
||||
vo_x11_xinerama_move(mDisplay, vo_window);
|
||||
#endif
|
||||
|
||||
}
|
||||
vo_gc = XCreateGC(mDisplay, vo_window, GCForeground, &mGCV);
|
||||
|
||||
// XSelectInput( mDisplay,vo_window,StructureNotifyMask | KeyPressMask | ButtonPressMask | ButtonReleaseMask );
|
||||
#ifdef HAVE_NEW_GUI
|
||||
}
|
||||
#endif
|
||||
|
@ -347,6 +334,8 @@ else
|
|||
mp_msg(MSGT_VO, MSGL_INFO, "[xvidix] image properties: %dx%d depth: %d\n",
|
||||
image_width, image_height, image_depth);
|
||||
|
||||
if ( ( !WinID )&&( flags&1 ) ) { vo_dx=0; vo_dy=0; vo_dwidth=vo_screenwidth; vo_dheight=vo_screenheight; vo_fs=1; }
|
||||
|
||||
if (vidix_grkey_support())
|
||||
{
|
||||
vidix_grkey_get(&gr_key);
|
||||
|
|
|
@ -185,12 +185,16 @@ int vo_wm_detect( void )
|
|||
int format;
|
||||
unsigned long nitems, bytesafter;
|
||||
unsigned char * args = NULL;
|
||||
char * name = NULL;
|
||||
|
||||
if ( WinID >= 0 ) return vo_wm_Unknown;
|
||||
|
||||
#if 1
|
||||
// --- netwm
|
||||
type=XInternAtom( mDisplay,"_NET_SUPPORTED",False );
|
||||
if ( Success == XGetWindowProperty( mDisplay,mRootWin,type,0,65536 / sizeof( long ),False,AnyPropertyType,&type,&format,&nitems,&bytesafter,&args ) && nitems > 0 )
|
||||
{
|
||||
mp_dbg( MSGT_VO,MSGL_STATUS,"[x11] Detected wm is NetWM.\n" );
|
||||
mp_dbg( MSGT_VO,MSGL_STATUS,"[x11] Detected wm is of class NetWM.\n" );
|
||||
XFree( args );
|
||||
return vo_wm_NetWM;
|
||||
}
|
||||
|
@ -207,7 +211,7 @@ int vo_wm_detect( void )
|
|||
|
||||
if ( xev.type == PropertyNotify )
|
||||
{
|
||||
char * name = XGetAtomName( mDisplay,xev.xproperty.atom );
|
||||
name=XGetAtomName( mDisplay,xev.xproperty.atom );
|
||||
if ( !name ) break;
|
||||
|
||||
if ( !strncmp( name,"_ICEWM_TRAY",11 ) )
|
||||
|
@ -218,9 +222,10 @@ int vo_wm_detect( void )
|
|||
{ mp_dbg( MSGT_VO,MSGL_STATUS,"[x11] Detected wm is WindowMaker style.\n" ); wm=vo_wm_WMakerStyle; break; }
|
||||
// fprintf(stderr,"[ws] PropertyNotify ( 0x%x ) %s ( 0x%x )\n",win,name,xev.xproperty.atom );
|
||||
|
||||
XFree( name );
|
||||
XFree( name ); name=NULL;
|
||||
}
|
||||
} while( c++ < 25 );
|
||||
if ( name ) XFree( name );
|
||||
XDestroyWindow( mDisplay,win );
|
||||
#ifdef MP_DEBUG
|
||||
if ( wm == vo_wm_Unknown ) mp_dbg( MSGT_VO,MSGL_STATUS,"[x11] Unknown wm type...\n" );
|
||||
|
@ -677,6 +682,7 @@ void vo_x11_setlayer( int layer )
|
|||
|
||||
if ( vo_wm_type == vo_wm_IceWM )
|
||||
{
|
||||
mp_dbg( MSGT_VO,MSGL_STATUS,"[x11] IceWM style stay on top ( layer %d ).\n",layer );
|
||||
switch ( layer )
|
||||
{
|
||||
case -1: layer=2; break; // WinLayerBelow
|
||||
|
@ -684,7 +690,7 @@ void vo_x11_setlayer( int layer )
|
|||
case 1: layer=8; break; // WinLayerOnTop
|
||||
}
|
||||
XChangeProperty( mDisplay,vo_window,
|
||||
XInternAtom( mDisplay,"_WIN_LAYER",False ),XA_CARDINAL,32,PropModeReplace,(unsigned char *)&layer,1 );
|
||||
XInternAtom( mDisplay,"_WIN_LAYER",False ),XA_CARDINAL,32,PropModeReplace,(unsigned char *)&layer,1 );
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -750,8 +756,8 @@ void vo_x11_fullscreen( void )
|
|||
{ vo_fs=VO_FALSE; x=vo_old_x; y=vo_old_y; w=vo_old_width; h=vo_old_height; }
|
||||
else { vo_fs=VO_TRUE; vo_old_x=vo_dx; vo_old_y=vo_dy; vo_old_width=vo_dwidth; vo_old_height=vo_dheight; }
|
||||
|
||||
vo_x11_sizehint( x,y,w,h,0 );
|
||||
vo_x11_decoration( mDisplay,vo_window,(vo_fs) ? 0 : 1 );
|
||||
vo_x11_sizehint( x,y,w,h,0 );
|
||||
vo_x11_setlayer( vo_fs );
|
||||
XMoveResizeWindow( mDisplay,vo_window,x,y,w,h );
|
||||
XMapRaised( mDisplay,vo_window );
|
||||
|
|
Loading…
Reference in New Issue