0
0
mirror of https://github.com/mpv-player/mpv.git synced 2024-09-20 12:02:23 +02:00

Xinerama patch number two by attila.

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@4018 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
atmos4 2002-01-06 21:07:20 +00:00
parent 280cb5acaf
commit eb2c656b52
6 changed files with 60 additions and 11 deletions

View File

@ -73,6 +73,10 @@ extern char * skinName;
extern int use_old_pp;
#endif
#ifdef HAVE_XINERAMA
extern int xinerama_screen;
#endif
/* from libvo/aspect.c */
extern float monitor_aspect;
@ -261,6 +265,10 @@ struct config conf[]={
{"rootwin", &WinID, CONF_TYPE_FLAG, 0, -1, 0},
#endif
#ifdef HAVE_XINERAMA
{"xineramascreen", &xinerama_screen, CONF_TYPE_INT, CONF_RANGE, 0, 32},
#endif
#define MAIN_CONF
#include "cfg-common.h"
#undef MAIN_CONF

View File

@ -181,6 +181,9 @@ init(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, uint3
/* Map window. */
XMapWindow(mDisplay, mywindow);
#ifdef HAVE_XINERAMA
vo_x11_xinerama_move(mDisplay,mywindow);
#endif
/* Wait for map. */
do

View File

@ -691,6 +691,9 @@ init(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, uint3
/* Map window. */
XMapWindow(mDisplay, mywindow);
#ifdef HAVE_XINERAMA
vo_x11_xinerama_move(mDisplay,mywindow);
#endif
XClearWindow(mDisplay,mywindow);
/* Wait for map. */

View File

@ -298,6 +298,9 @@ static uint32_t init( uint32_t width,uint32_t height,uint32_t d_width,uint32_t d
XSelectInput( mDisplay,mywindow,StructureNotifyMask );
XSetStandardProperties( mDisplay,mywindow,hello,hello,None,NULL,0,&hint );
XMapWindow( mDisplay,mywindow );
#ifdef HAVE_XINERAMA
vo_x11_xinerama_move(mDisplay,mywindow);
#endif
do { XNextEvent( mDisplay,&xev ); } while ( xev.type != MapNotify || xev.xmap.event != mywindow );
XSelectInput( mDisplay,mywindow,NoEventMask );

View File

@ -45,6 +45,10 @@ LIBVO_EXTERN( xmga )
#include <X11/Xutil.h>
#include <errno.h>
#ifdef HAVE_XINERAMA
#include <X11/extensions/Xinerama.h>
#endif
#include "x11_common.h"
#include "sub.h"
#include "aspect.h"
@ -139,6 +143,31 @@ static void set_window(){
mDrawColorKey();
#ifdef HAVE_XINERAMA
if(XineramaIsActive(mDisplay))
{
XineramaScreenInfo *screens;
int num_screens;
int i;
screens = XineramaQueryScreens(mDisplay,&num_screens);
/* find the screen we are on */
i = 0;
while(!(screens[i].x_org <= drwcX && screens[i].y_org <= drwcY &&
screens[i].x_org + screens[i].width >= drwcX &&
screens[i].y_org + screens[i].height >= drwcY ))
{
i++;
}
/* set drwcX and drwcY to the right values */
drwcX = drwcX - screens[i].x_org;
drwcY = drwcY - screens[i].y_org;
XFree(screens);
}
#endif
mga_vid_config.x_org=drwcX;
mga_vid_config.y_org=drwcY;
mga_vid_config.dest_width=drwWidth;

View File

@ -48,6 +48,12 @@ int mLocalDisplay;
/* output window id */
int WinID=-1;
#ifdef HAVE_XINERAMA
int xinerama_screen = 0;
int xinerama_x = 0;
int xinerama_y = 0;
#endif
void vo_hidecursor ( Display *disp , Window win )
{
Cursor no_ptr;
@ -149,13 +155,15 @@ int vo_init( void )
XineramaScreenInfo *screens;
int num_screens;
mScreen = 0;
screens = XineramaQueryScreens(mDisplay, &num_screens);
if(xinerama_screen >= num_screens) xinerama_screen = 0;
if (! vo_screenwidth)
vo_screenwidth=screens[mScreen].width;
vo_screenwidth=screens[xinerama_screen].width;
if (! vo_screenheight)
vo_screenheight=screens[mScreen].height;
vo_screenheight=screens[xinerama_screen].height;
xinerama_x = screens[xinerama_screen].x_org;
xinerama_y = screens[xinerama_screen].y_org;
XFree(screens);
}
else
@ -482,15 +490,10 @@ void saver_off(Display *mDisplay) {
#ifdef HAVE_XINERAMA
void vo_x11_xinerama_move(Display *dsp, Window w)
{
XineramaScreenInfo *screens;
int num_screens;
if(XineramaIsActive(dsp))
{
screens = XineramaQueryScreens(dsp,&num_screens);
/* printf("XXXX Xinerama screen: x: %hd y: %hd\n",screens[mScreen].x_org,screens[mScreen].y_org); */
XMoveWindow(dsp,w,screens[mScreen].x_org,screens[mScreen].y_org);
XFree(screens);
/* printf("XXXX Xinerama screen: x: %hd y: %hd\n",xinerama_x,xinerama_y); */
XMoveWindow(dsp,w,xinerama_x,xinerama_y);
}
}
#endif