winex11: Add a helper function to return the primary monitor rectangle.
This commit is contained in:
parent
9f1f29cc91
commit
0f03f264b7
|
@ -47,7 +47,11 @@ static const unsigned int heights[] = {200, 300, 384, 480, 600, 768, 864, 1024
|
||||||
/* create the mode structures */
|
/* create the mode structures */
|
||||||
static void make_modes(void)
|
static void make_modes(void)
|
||||||
{
|
{
|
||||||
|
RECT primary_rect = get_primary_monitor_rect();
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
unsigned int screen_width = primary_rect.right - primary_rect.left;
|
||||||
|
unsigned int screen_height = primary_rect.bottom - primary_rect.top;
|
||||||
|
|
||||||
/* original specified desktop size */
|
/* original specified desktop size */
|
||||||
X11DRV_Settings_AddOneMode(screen_width, screen_height, 0, 60);
|
X11DRV_Settings_AddOneMode(screen_width, screen_height, 0, 60);
|
||||||
for (i=0; i<NUM_DESKTOP_MODES; i++)
|
for (i=0; i<NUM_DESKTOP_MODES; i++)
|
||||||
|
@ -73,10 +77,12 @@ static int X11DRV_desktop_GetCurrentMode(void)
|
||||||
{
|
{
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
DWORD dwBpp = screen_bpp;
|
DWORD dwBpp = screen_bpp;
|
||||||
|
RECT primary_rect = get_primary_monitor_rect();
|
||||||
|
|
||||||
for (i=0; i<dd_mode_count; i++)
|
for (i=0; i<dd_mode_count; i++)
|
||||||
{
|
{
|
||||||
if ( (screen_width == dd_modes[i].width) &&
|
if ( (primary_rect.right - primary_rect.left == dd_modes[i].width) &&
|
||||||
(screen_height == dd_modes[i].height) &&
|
(primary_rect.bottom - primary_rect.top == dd_modes[i].height) &&
|
||||||
(dwBpp == dd_modes[i].bpp))
|
(dwBpp == dd_modes[i].bpp))
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
@ -108,10 +114,12 @@ static LONG X11DRV_desktop_SetCurrentMode(int mode)
|
||||||
*/
|
*/
|
||||||
void X11DRV_init_desktop( Window win, unsigned int width, unsigned int height )
|
void X11DRV_init_desktop( Window win, unsigned int width, unsigned int height )
|
||||||
{
|
{
|
||||||
|
RECT primary_rect = get_primary_monitor_rect();
|
||||||
|
|
||||||
root_window = win;
|
root_window = win;
|
||||||
managed_mode = 0; /* no managed windows in desktop mode */
|
managed_mode = 0; /* no managed windows in desktop mode */
|
||||||
max_width = screen_width;
|
max_width = primary_rect.right - primary_rect.left;
|
||||||
max_height = screen_height;
|
max_height = primary_rect.bottom - primary_rect.top;
|
||||||
xinerama_init( width, height );
|
xinerama_init( width, height );
|
||||||
|
|
||||||
/* initialize the available resolutions */
|
/* initialize the available resolutions */
|
||||||
|
@ -135,6 +143,7 @@ BOOL CDECL X11DRV_create_desktop( UINT width, UINT height )
|
||||||
XSetWindowAttributes win_attr;
|
XSetWindowAttributes win_attr;
|
||||||
Window win;
|
Window win;
|
||||||
Display *display = thread_init_display();
|
Display *display = thread_init_display();
|
||||||
|
RECT rect;
|
||||||
|
|
||||||
TRACE( "%u x %u\n", width, height );
|
TRACE( "%u x %u\n", width, height );
|
||||||
|
|
||||||
|
@ -154,7 +163,8 @@ BOOL CDECL X11DRV_create_desktop( UINT width, UINT height )
|
||||||
CWEventMask | CWCursor | CWColormap, &win_attr );
|
CWEventMask | CWCursor | CWColormap, &win_attr );
|
||||||
if (!win) return FALSE;
|
if (!win) return FALSE;
|
||||||
|
|
||||||
if (width == screen_width && height == screen_height)
|
SetRect( &rect, 0, 0, width, height );
|
||||||
|
if (is_window_rect_fullscreen( &rect ))
|
||||||
{
|
{
|
||||||
TRACE("setting desktop to fullscreen\n");
|
TRACE("setting desktop to fullscreen\n");
|
||||||
XChangeProperty( display, win, x11drv_atom(_NET_WM_STATE), XA_ATOM, 32,
|
XChangeProperty( display, win, x11drv_atom(_NET_WM_STATE), XA_ATOM, 32,
|
||||||
|
@ -202,7 +212,9 @@ static BOOL CALLBACK update_windows_on_desktop_resize( HWND hwnd, LPARAM lparam
|
||||||
|
|
||||||
BOOL is_desktop_fullscreen(void)
|
BOOL is_desktop_fullscreen(void)
|
||||||
{
|
{
|
||||||
return screen_width == max_width && screen_height == max_height;
|
RECT primary_rect = get_primary_monitor_rect();
|
||||||
|
return (primary_rect.right - primary_rect.left == max_width &&
|
||||||
|
primary_rect.bottom - primary_rect.top == max_height);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void update_desktop_fullscreen( unsigned int width, unsigned int height)
|
static void update_desktop_fullscreen( unsigned int width, unsigned int height)
|
||||||
|
@ -246,7 +258,7 @@ void X11DRV_resize_desktop( unsigned int width, unsigned int height )
|
||||||
HWND hwnd = GetDesktopWindow();
|
HWND hwnd = GetDesktopWindow();
|
||||||
struct desktop_resize_data resize_data;
|
struct desktop_resize_data resize_data;
|
||||||
|
|
||||||
SetRect( &resize_data.old_screen_rect, 0, 0, screen_width, screen_height );
|
resize_data.old_screen_rect = get_primary_monitor_rect();
|
||||||
resize_data.old_virtual_rect = get_virtual_screen_rect();
|
resize_data.old_virtual_rect = get_virtual_screen_rect();
|
||||||
|
|
||||||
xinerama_init( width, height );
|
xinerama_init( width, height );
|
||||||
|
|
|
@ -36,8 +36,6 @@ Display *gdi_display; /* display to use for all GDI functions */
|
||||||
/* a few dynamic device caps */
|
/* a few dynamic device caps */
|
||||||
static int log_pixels_x; /* pixels per logical inch in x direction */
|
static int log_pixels_x; /* pixels per logical inch in x direction */
|
||||||
static int log_pixels_y; /* pixels per logical inch in y direction */
|
static int log_pixels_y; /* pixels per logical inch in y direction */
|
||||||
static int horz_size; /* horz. size of screen in millimeters */
|
|
||||||
static int vert_size; /* vert. size of screen in millimeters */
|
|
||||||
static int palette_size;
|
static int palette_size;
|
||||||
|
|
||||||
static Pixmap stock_bitmap_pixmap; /* phys bitmap for the default stock bitmap */
|
static Pixmap stock_bitmap_pixmap; /* phys bitmap for the default stock bitmap */
|
||||||
|
@ -94,8 +92,6 @@ static BOOL WINAPI device_init( INIT_ONCE *once, void *param, void **context )
|
||||||
|
|
||||||
/* Initialize device caps */
|
/* Initialize device caps */
|
||||||
log_pixels_x = log_pixels_y = get_dpi();
|
log_pixels_x = log_pixels_y = get_dpi();
|
||||||
horz_size = MulDiv( screen_width, 254, log_pixels_x * 10 );
|
|
||||||
vert_size = MulDiv( screen_height, 254, log_pixels_y * 10 );
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -204,13 +200,25 @@ static INT X11DRV_GetDeviceCaps( PHYSDEV dev, INT cap )
|
||||||
case TECHNOLOGY:
|
case TECHNOLOGY:
|
||||||
return DT_RASDISPLAY;
|
return DT_RASDISPLAY;
|
||||||
case HORZSIZE:
|
case HORZSIZE:
|
||||||
return horz_size;
|
{
|
||||||
|
RECT primary_rect = get_primary_monitor_rect();
|
||||||
|
return MulDiv( primary_rect.right - primary_rect.left, 254, log_pixels_x * 10 );
|
||||||
|
}
|
||||||
case VERTSIZE:
|
case VERTSIZE:
|
||||||
return vert_size;
|
{
|
||||||
|
RECT primary_rect = get_primary_monitor_rect();
|
||||||
|
return MulDiv( primary_rect.bottom - primary_rect.top, 254, log_pixels_y * 10 );
|
||||||
|
}
|
||||||
case HORZRES:
|
case HORZRES:
|
||||||
return screen_width;
|
{
|
||||||
|
RECT primary_rect = get_primary_monitor_rect();
|
||||||
|
return primary_rect.right - primary_rect.left;
|
||||||
|
}
|
||||||
case VERTRES:
|
case VERTRES:
|
||||||
return screen_height;
|
{
|
||||||
|
RECT primary_rect = get_primary_monitor_rect();
|
||||||
|
return primary_rect.bottom - primary_rect.top;
|
||||||
|
}
|
||||||
case DESKTOPHORZRES:
|
case DESKTOPHORZRES:
|
||||||
{
|
{
|
||||||
RECT virtual_rect = get_virtual_screen_rect();
|
RECT virtual_rect = get_virtual_screen_rect();
|
||||||
|
|
|
@ -509,7 +509,7 @@ BOOL clip_fullscreen_window( HWND hwnd, BOOL reset )
|
||||||
if (!(thread_data = x11drv_thread_data())) return FALSE;
|
if (!(thread_data = x11drv_thread_data())) return FALSE;
|
||||||
if (GetTickCount() - thread_data->clip_reset < 1000) return FALSE;
|
if (GetTickCount() - thread_data->clip_reset < 1000) return FALSE;
|
||||||
if (!reset && clipping_cursor && thread_data->clip_hwnd) return FALSE; /* already clipping */
|
if (!reset && clipping_cursor && thread_data->clip_hwnd) return FALSE; /* already clipping */
|
||||||
SetRect( &rect, 0, 0, screen_width, screen_height );
|
rect = get_primary_monitor_rect();
|
||||||
if (!grab_fullscreen)
|
if (!grab_fullscreen)
|
||||||
{
|
{
|
||||||
RECT virtual_rect = get_virtual_screen_rect();
|
RECT virtual_rect = get_virtual_screen_rect();
|
||||||
|
|
|
@ -146,11 +146,12 @@ static LONG X11DRV_nores_SetCurrentMode(int mode)
|
||||||
/* default handler only gets the current X desktop resolution */
|
/* default handler only gets the current X desktop resolution */
|
||||||
void X11DRV_Settings_Init(void)
|
void X11DRV_Settings_Init(void)
|
||||||
{
|
{
|
||||||
|
RECT primary = get_primary_monitor_rect();
|
||||||
X11DRV_Settings_SetHandlers("NoRes",
|
X11DRV_Settings_SetHandlers("NoRes",
|
||||||
X11DRV_nores_GetCurrentMode,
|
X11DRV_nores_GetCurrentMode,
|
||||||
X11DRV_nores_SetCurrentMode,
|
X11DRV_nores_SetCurrentMode,
|
||||||
1, 0);
|
1, 0);
|
||||||
X11DRV_Settings_AddOneMode(screen_width, screen_height, 0, 60);
|
X11DRV_Settings_AddOneMode( primary.right - primary.left, primary.bottom - primary.top, 0, 60);
|
||||||
}
|
}
|
||||||
|
|
||||||
static BOOL get_display_device_reg_key(char *key, unsigned len)
|
static BOOL get_display_device_reg_key(char *key, unsigned len)
|
||||||
|
|
|
@ -364,8 +364,6 @@ extern Colormap default_colormap DECLSPEC_HIDDEN;
|
||||||
extern XPixmapFormatValues **pixmap_formats DECLSPEC_HIDDEN;
|
extern XPixmapFormatValues **pixmap_formats DECLSPEC_HIDDEN;
|
||||||
extern Window root_window DECLSPEC_HIDDEN;
|
extern Window root_window DECLSPEC_HIDDEN;
|
||||||
extern int clipping_cursor DECLSPEC_HIDDEN;
|
extern int clipping_cursor DECLSPEC_HIDDEN;
|
||||||
extern unsigned int screen_width DECLSPEC_HIDDEN;
|
|
||||||
extern unsigned int screen_height DECLSPEC_HIDDEN;
|
|
||||||
extern unsigned int screen_bpp DECLSPEC_HIDDEN;
|
extern unsigned int screen_bpp DECLSPEC_HIDDEN;
|
||||||
extern int use_xkb DECLSPEC_HIDDEN;
|
extern int use_xkb DECLSPEC_HIDDEN;
|
||||||
extern int usexrandr DECLSPEC_HIDDEN;
|
extern int usexrandr DECLSPEC_HIDDEN;
|
||||||
|
@ -628,6 +626,7 @@ extern void X11DRV_X_to_window_rect( struct x11drv_win_data *data, RECT *rect )
|
||||||
extern POINT virtual_screen_to_root( INT x, INT y ) DECLSPEC_HIDDEN;
|
extern POINT virtual_screen_to_root( INT x, INT y ) DECLSPEC_HIDDEN;
|
||||||
extern POINT root_to_virtual_screen( INT x, INT y ) DECLSPEC_HIDDEN;
|
extern POINT root_to_virtual_screen( INT x, INT y ) DECLSPEC_HIDDEN;
|
||||||
extern RECT get_virtual_screen_rect(void) DECLSPEC_HIDDEN;
|
extern RECT get_virtual_screen_rect(void) DECLSPEC_HIDDEN;
|
||||||
|
extern RECT get_primary_monitor_rect(void) DECLSPEC_HIDDEN;
|
||||||
extern void xinerama_init( unsigned int width, unsigned int height ) DECLSPEC_HIDDEN;
|
extern void xinerama_init( unsigned int width, unsigned int height ) DECLSPEC_HIDDEN;
|
||||||
|
|
||||||
struct x11drv_mode_info
|
struct x11drv_mode_info
|
||||||
|
@ -675,8 +674,9 @@ static inline BOOL is_window_rect_mapped( const RECT *rect )
|
||||||
|
|
||||||
static inline BOOL is_window_rect_fullscreen( const RECT *rect )
|
static inline BOOL is_window_rect_fullscreen( const RECT *rect )
|
||||||
{
|
{
|
||||||
return (rect->left <= 0 && rect->right >= screen_width &&
|
RECT primary_rect = get_primary_monitor_rect();
|
||||||
rect->top <= 0 && rect->bottom >= screen_height);
|
return (rect->left <= primary_rect.left && rect->right >= primary_rect.right &&
|
||||||
|
rect->top <= primary_rect.top && rect->bottom >= primary_rect.bottom);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* __WINE_X11DRV_H */
|
#endif /* __WINE_X11DRV_H */
|
||||||
|
|
|
@ -60,8 +60,6 @@ XVisualInfo default_visual = { 0 };
|
||||||
XVisualInfo argb_visual = { 0 };
|
XVisualInfo argb_visual = { 0 };
|
||||||
Colormap default_colormap = None;
|
Colormap default_colormap = None;
|
||||||
XPixmapFormatValues **pixmap_formats;
|
XPixmapFormatValues **pixmap_formats;
|
||||||
unsigned int screen_width;
|
|
||||||
unsigned int screen_height;
|
|
||||||
unsigned int screen_bpp;
|
unsigned int screen_bpp;
|
||||||
Window root_window;
|
Window root_window;
|
||||||
int usexvidmode = 1;
|
int usexvidmode = 1;
|
||||||
|
|
|
@ -180,6 +180,11 @@ RECT get_virtual_screen_rect(void)
|
||||||
return virtual_screen_rect;
|
return virtual_screen_rect;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RECT get_primary_monitor_rect(void)
|
||||||
|
{
|
||||||
|
return get_primary()->rcMonitor;
|
||||||
|
}
|
||||||
|
|
||||||
void xinerama_init( unsigned int width, unsigned int height )
|
void xinerama_init( unsigned int width, unsigned int height )
|
||||||
{
|
{
|
||||||
MONITORINFOEXW *primary;
|
MONITORINFOEXW *primary;
|
||||||
|
@ -213,10 +218,8 @@ void xinerama_init( unsigned int width, unsigned int height )
|
||||||
(monitors[i].dwFlags & MONITORINFOF_PRIMARY) ? " (primary)" : "" );
|
(monitors[i].dwFlags & MONITORINFOF_PRIMARY) ? " (primary)" : "" );
|
||||||
}
|
}
|
||||||
|
|
||||||
screen_width = primary->rcMonitor.right - primary->rcMonitor.left;
|
TRACE( "virtual size: %s primary: %s\n",
|
||||||
screen_height = primary->rcMonitor.bottom - primary->rcMonitor.top;
|
wine_dbgstr_rect(&virtual_screen_rect), wine_dbgstr_rect(&primary->rcMonitor) );
|
||||||
TRACE( "virtual size: %s primary size: %dx%d\n",
|
|
||||||
wine_dbgstr_rect(&virtual_screen_rect), screen_width, screen_height );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue