author | Sam Lantinga <slouken@libsdl.org> |
Tue, 16 Dec 2008 17:44:10 +0000 | |
changeset 2874 | 36e312e0fac0 |
parent 2873 | b33e38aaa027 |
child 2906 | c4150600b3ae |
permissions | -rw-r--r-- |
1950
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1 |
/* |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
2 |
SDL - Simple DirectMedia Layer |
2859 | 3 |
Copyright (C) 1997-2009 Sam Lantinga |
1950
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
4 |
|
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
5 |
This library is free software; you can redistribute it and/or |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
6 |
modify it under the terms of the GNU Lesser General Public |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
7 |
License as published by the Free Software Foundation; either |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
8 |
version 2.1 of the License, or (at your option) any later version. |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
9 |
|
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
10 |
This library is distributed in the hope that it will be useful, |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
11 |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
12 |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
13 |
Lesser General Public License for more details. |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
14 |
|
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
15 |
You should have received a copy of the GNU Lesser General Public |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
16 |
License along with this library; if not, write to the Free Software |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
17 |
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
18 |
|
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
19 |
Sam Lantinga |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
20 |
slouken@libsdl.org |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
21 |
*/ |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
22 |
#include "SDL_config.h" |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
23 |
|
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
24 |
#include "SDL_x11video.h" |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
25 |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
26 |
//#define X11MODES_DEBUG |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
27 |
#undef SDL_VIDEO_DRIVER_X11_XINERAMA |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
28 |
#undef SDL_VIDEO_DRIVER_X11_XRANDR |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
29 |
#undef SDL_VIDEO_DRIVER_X11_VIDMODE |
1950
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
30 |
|
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
31 |
static int |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
32 |
get_visualinfo(Display * display, int screen, XVisualInfo * vinfo) |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
33 |
{ |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
34 |
const char *visual_id = SDL_getenv("SDL_VIDEO_X11_VISUALID"); |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
35 |
int use_directcolor = 1; |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
36 |
int depth; |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
37 |
|
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
38 |
/* Look for an exact visual, if requested */ |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
39 |
if (visual_id) { |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
40 |
XVisualInfo *vi, template; |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
41 |
int nvis; |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
42 |
|
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
43 |
SDL_zero(template); |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
44 |
template.visualid = SDL_strtol(visual_id, NULL, 0); |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
45 |
vi = XGetVisualInfo(display, VisualIDMask, &template, &nvis); |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
46 |
if (vi) { |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
47 |
*vinfo = *vi; |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
48 |
XFree(vi); |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
49 |
return 0; |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
50 |
} |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
51 |
} |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
52 |
|
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
53 |
depth = DefaultDepth(display, screen); |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
54 |
if ((use_directcolor && |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
55 |
XMatchVisualInfo(display, screen, depth, DirectColor, vinfo)) || |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
56 |
XMatchVisualInfo(display, screen, depth, TrueColor, vinfo) || |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
57 |
XMatchVisualInfo(display, screen, depth, PseudoColor, vinfo) || |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
58 |
XMatchVisualInfo(display, screen, depth, StaticColor, vinfo)) { |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
59 |
return 0; |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
60 |
} |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
61 |
return -1; |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
62 |
} |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
63 |
|
2870
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
64 |
static Uint32 |
2874 | 65 |
X11_GetPixelFormatFromVisualInfo(Display * display, XVisualInfo * vinfo) |
2870
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
66 |
{ |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
67 |
if (vinfo->class == DirectColor || vinfo->class == TrueColor) { |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
68 |
int bpp; |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
69 |
Uint32 Rmask, Gmask, Bmask, Amask; |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
70 |
|
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
71 |
Rmask = vinfo->visual->red_mask; |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
72 |
Gmask = vinfo->visual->green_mask; |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
73 |
Bmask = vinfo->visual->blue_mask; |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
74 |
if (vinfo->depth == 32) { |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
75 |
Amask = (0xFFFFFFFF & ~(Rmask | Gmask | Bmask)); |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
76 |
} else { |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
77 |
Amask = 0; |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
78 |
} |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
79 |
|
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
80 |
bpp = vinfo->depth; |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
81 |
if (bpp == 24) { |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
82 |
int i, n; |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
83 |
XPixmapFormatValues *p = XListPixmapFormats(display, &n); |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
84 |
if (p) { |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
85 |
for (i = 0; i < n; ++i) { |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
86 |
if (p[i].depth == 24) { |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
87 |
bpp = p[i].bits_per_pixel; |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
88 |
break; |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
89 |
} |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
90 |
} |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
91 |
XFree(p); |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
92 |
} |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
93 |
} |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
94 |
|
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
95 |
return SDL_MasksToPixelFormatEnum(bpp, Rmask, Gmask, Bmask, Amask); |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
96 |
} |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
97 |
|
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
98 |
if (vinfo->class == PseudoColor || vinfo->class == StaticColor) { |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
99 |
switch (vinfo->depth) { |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
100 |
case 8: |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
101 |
return SDL_PIXELTYPE_INDEX8; |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
102 |
case 4: |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
103 |
if (BitmapBitOrder(display) == LSBFirst) { |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
104 |
return SDL_PIXELFORMAT_INDEX4LSB; |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
105 |
} else { |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
106 |
return SDL_PIXELFORMAT_INDEX4MSB; |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
107 |
} |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
108 |
break; |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
109 |
case 1: |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
110 |
if (BitmapBitOrder(display) == LSBFirst) { |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
111 |
return SDL_PIXELFORMAT_INDEX1LSB; |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
112 |
} else { |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
113 |
return SDL_PIXELFORMAT_INDEX1MSB; |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
114 |
} |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
115 |
break; |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
116 |
} |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
117 |
} |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
118 |
|
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
119 |
return SDL_PIXELFORMAT_UNKNOWN; |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
120 |
} |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
121 |
|
1950
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
122 |
void |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
123 |
X11_InitModes(_THIS) |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
124 |
{ |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
125 |
SDL_VideoData *data = (SDL_VideoData *) _this->driverdata; |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
126 |
int screen; |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
127 |
|
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
128 |
for (screen = 0; screen < ScreenCount(data->display); ++screen) { |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
129 |
XVisualInfo vinfo; |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
130 |
SDL_VideoDisplay display; |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
131 |
SDL_DisplayData *displaydata; |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
132 |
SDL_DisplayMode mode; |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
133 |
|
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
134 |
if (get_visualinfo(data->display, screen, &vinfo) < 0) { |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
135 |
continue; |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
136 |
} |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
137 |
|
2870
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
138 |
mode.format = X11_GetPixelFormatFromVisualInfo(data->display, &vinfo); |
1950
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
139 |
mode.w = DisplayWidth(data->display, screen); |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
140 |
mode.h = DisplayHeight(data->display, screen); |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
141 |
mode.refresh_rate = 0; |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
142 |
mode.driverdata = NULL; |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
143 |
|
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
144 |
displaydata = (SDL_DisplayData *) SDL_malloc(sizeof(*displaydata)); |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
145 |
if (!displaydata) { |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
146 |
continue; |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
147 |
} |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
148 |
displaydata->screen = screen; |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
149 |
displaydata->visual = vinfo.visual; |
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
1950
diff
changeset
|
150 |
displaydata->depth = vinfo.depth; |
1950
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
151 |
|
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
152 |
SDL_zero(display); |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
153 |
display.desktop_mode = mode; |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
154 |
display.current_mode = mode; |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
155 |
display.driverdata = displaydata; |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
156 |
SDL_AddVideoDisplay(&display); |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
157 |
} |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
158 |
} |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
159 |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
160 |
/* Global for the error handler */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
161 |
int vm_event, vm_error = -1; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
162 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
163 |
#if SDL_VIDEO_DRIVER_X11_XINERAMA |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
164 |
static SDL_bool |
2874 | 165 |
CheckXinerama(Display * display, int *major, int *minor) |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
166 |
{ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
167 |
const char *env; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
168 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
169 |
/* Default the extension not available */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
170 |
*major = *minor = 0; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
171 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
172 |
/* Allow environment override */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
173 |
env = getenv("SDL_VIDEO_X11_XINERAMA"); |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
174 |
if (env && !SDL_atoi(env)) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
175 |
return SDL_FALSE; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
176 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
177 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
178 |
/* Query the extension version */ |
2874 | 179 |
if (!SDL_NAME(XineramaQueryExtension) (display, major, minor) || |
180 |
!SDL_NAME(XineramaIsActive) (display)) { |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
181 |
return SDL_FALSE; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
182 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
183 |
return SDL_TRUE; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
184 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
185 |
#endif /* SDL_VIDEO_DRIVER_X11_XINERAMA */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
186 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
187 |
#if SDL_VIDEO_DRIVER_X11_XRANDR |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
188 |
static SDL_bool |
2874 | 189 |
CheckXRandR(Display * display, int *major, int *minor) |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
190 |
{ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
191 |
const char *env; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
192 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
193 |
/* Default the extension not available */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
194 |
*major = *minor = 0; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
195 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
196 |
/* Allow environment override */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
197 |
env = getenv("SDL_VIDEO_X11_XRANDR"); |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
198 |
if (env && !SDL_atoi(env)) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
199 |
return SDL_FALSE; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
200 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
201 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
202 |
if (!SDL_X11_HAVE_XRANDR) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
203 |
return SDL_FALSE; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
204 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
205 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
206 |
/* Query the extension version */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
207 |
if (!XRRQueryVersion(display, major, minor)) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
208 |
return SDL_FALSE; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
209 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
210 |
return SDL_TRUE; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
211 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
212 |
#endif /* SDL_VIDEO_DRIVER_X11_XRANDR */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
213 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
214 |
#if SDL_VIDEO_DRIVER_X11_VIDMODE |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
215 |
static SDL_bool |
2874 | 216 |
CheckVidMode(Display * display, int *major, int *minor) |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
217 |
{ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
218 |
const char *env; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
219 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
220 |
/* Default the extension not available */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
221 |
*major = *minor = 0; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
222 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
223 |
/* Allow environment override */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
224 |
env = getenv("SDL_VIDEO_X11_VIDMODE"); |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
225 |
if (env && !SDL_atoi(env)) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
226 |
return SDL_FALSE; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
227 |
} |
2874 | 228 |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
229 |
/* Query the extension version */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
230 |
vm_error = -1; |
2874 | 231 |
if (!SDL_NAME(XF86VidModeQueryExtension) (display, &vm_event, &vm_error) |
232 |
|| !SDL_NAME(XF86VidModeQueryVersion) (display, major, minor)) { |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
233 |
return SDL_FALSE; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
234 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
235 |
return SDL_TRUE; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
236 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
237 |
|
2874 | 238 |
Bool SDL_NAME(XF86VidModeGetModeInfo) (Display * dpy, int scr, |
239 |
SDL_NAME(XF86VidModeModeInfo) * info) |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
240 |
{ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
241 |
Bool retval; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
242 |
int dotclock; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
243 |
SDL_NAME(XF86VidModeModeLine) l; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
244 |
SDL_zerop(info); |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
245 |
SDL_zero(l); |
2874 | 246 |
retval = SDL_NAME(XF86VidModeGetModeLine) (dpy, scr, &dotclock, &l); |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
247 |
info->dotclock = dotclock; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
248 |
info->hdisplay = l.hdisplay; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
249 |
info->hsyncstart = l.hsyncstart; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
250 |
info->hsyncend = l.hsyncend; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
251 |
info->htotal = l.htotal; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
252 |
info->hskew = l.hskew; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
253 |
info->vdisplay = l.vdisplay; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
254 |
info->vsyncstart = l.vsyncstart; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
255 |
info->vsyncend = l.vsyncend; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
256 |
info->vtotal = l.vtotal; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
257 |
info->flags = l.flags; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
258 |
info->privsize = l.privsize; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
259 |
info->private = l.private; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
260 |
return retval; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
261 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
262 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
263 |
static int |
2874 | 264 |
calculate_rate(SDL_NAME(XF86VidModeModeInfo) * info) |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
265 |
{ |
2874 | 266 |
return (info->htotal |
267 |
&& info->vtotal) ? (1000 * info->dotclock / (info->htotal * |
|
268 |
info->vtotal)) : 0; |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
269 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
270 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
271 |
static void |
2874 | 272 |
save_mode(Display * display, SDL_DisplayData * data) |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
273 |
{ |
2874 | 274 |
SDL_NAME(XF86VidModeGetModeInfo) (display, data->screen, |
275 |
&data->saved_mode); |
|
276 |
SDL_NAME(XF86VidModeGetViewPort) (display, data->screen, |
|
277 |
&data->saved_view.x, |
|
278 |
&data->saved_view.y); |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
279 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
280 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
281 |
static void |
2874 | 282 |
restore_mode(Display * display, SDL_DisplayData * data) |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
283 |
{ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
284 |
SDL_NAME(XF86VidModeModeInfo) mode; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
285 |
|
2874 | 286 |
if (SDL_NAME(XF86VidModeGetModeInfo) (display, data->screen, &mode)) { |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
287 |
if (SDL_memcmp(&mode, &data->saved_mode, sizeof(mode)) != 0) { |
2874 | 288 |
SDL_NAME(XF86VidModeSwitchToMode) (display, data->screen, |
289 |
&data->saved_mode); |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
290 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
291 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
292 |
if ((data->saved_view.x != 0) || (data->saved_view.y != 0)) { |
2874 | 293 |
SDL_NAME(XF86VidModeSetViewPort) (display, data->screen, |
294 |
data->saved_view.x, |
|
295 |
data->saved_view.y); |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
296 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
297 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
298 |
#endif /* SDL_VIDEO_DRIVER_X11_VIDMODE */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
299 |
|
1950
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
300 |
void |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
301 |
X11_GetDisplayModes(_THIS) |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
302 |
{ |
2870
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
303 |
Display *display = ((SDL_VideoData *) _this->driverdata)->display; |
1950
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
304 |
SDL_DisplayData *data = (SDL_DisplayData *) SDL_CurrentDisplay.driverdata; |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
305 |
#if SDL_VIDEO_DRIVER_X11_XINERAMA |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
306 |
int xinerama_major, xinerama_minor; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
307 |
int screens; |
2874 | 308 |
SDL_NAME(XineramaScreenInfo) * xinerama; |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
309 |
#endif |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
310 |
#if SDL_VIDEO_DRIVER_X11_XRANDR |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
311 |
int xrandr_major, xrandr_minor; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
312 |
int nsizes, nrates; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
313 |
XRRScreenSize *sizes; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
314 |
short *rates; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
315 |
#endif |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
316 |
#if SDL_VIDEO_DRIVER_X11_VIDMODE |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
317 |
int vm_major, vm_minor; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
318 |
int nmodes; |
2874 | 319 |
SDL_NAME(XF86VidModeModeInfo) ** modes; |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
320 |
#endif |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
321 |
int screen_w; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
322 |
int screen_h; |
1950
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
323 |
SDL_DisplayMode mode; |
2870
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
324 |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
325 |
/* Unfortunately X11 requires the window to be created with the correct |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
326 |
* visual and depth ahead of time, but the SDL API allows you to create |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
327 |
* a window before setting the fullscreen display mode. This means that |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
328 |
* we have to use the same format for all windows and all display modes. |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
329 |
* (or support recreating the window with a new visual behind the scenes) |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
330 |
*/ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
331 |
mode.format = SDL_CurrentDisplay.current_mode.format; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
332 |
mode.driverdata = NULL; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
333 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
334 |
data->use_xinerama = 0; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
335 |
data->use_xrandr = 0; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
336 |
data->use_vidmode = 0; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
337 |
screen_w = DisplayWidth(display, data->screen); |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
338 |
screen_h = DisplayHeight(display, data->screen); |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
339 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
340 |
#if SDL_VIDEO_DRIVER_X11_XINERAMA |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
341 |
/* Query Xinerama extention */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
342 |
if (CheckXinerama(display, &xinerama_major, &xinerama_minor)) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
343 |
#ifdef X11MODES_DEBUG |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
344 |
printf("X11 detected Xinerama:\n"); |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
345 |
#endif |
2874 | 346 |
xinerama = SDL_NAME(XineramaQueryScreens) (display, &screens); |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
347 |
if (xinerama) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
348 |
int i; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
349 |
for (i = 0; i < screens; i++) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
350 |
#ifdef X11MODES_DEBUG |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
351 |
printf("xinerama %d: %dx%d+%d+%d\n", |
2874 | 352 |
xinerama[i].screen_number, |
353 |
xinerama[i].width, xinerama[i].height, |
|
354 |
xinerama[i].x_org, xinerama[i].y_org); |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
355 |
#endif |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
356 |
if (xinerama[i].screen_number == data->screen) { |
2874 | 357 |
data->use_xinerama = |
358 |
xinerama_major * 100 + xinerama_minor; |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
359 |
data->xinerama_info = xinerama[i]; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
360 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
361 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
362 |
XFree(xinerama); |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
363 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
364 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
365 |
if (data->use_xinerama) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
366 |
/* Add the full xinerama mode */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
367 |
if (screen_w > data->xinerama_info.width || |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
368 |
screen_h > data->xinerama_info.height) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
369 |
mode.w = screen_w; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
370 |
mode.h = screen_h; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
371 |
mode.refresh_rate = 0; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
372 |
SDL_AddDisplayMode(_this->current_display, &mode); |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
373 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
374 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
375 |
/* Add the head xinerama mode */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
376 |
mode.w = data->xinerama_info.width; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
377 |
mode.h = data->xinerama_info.height; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
378 |
mode.refresh_rate = 0; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
379 |
SDL_AddDisplayMode(_this->current_display, &mode); |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
380 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
381 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
382 |
#endif /* SDL_VIDEO_DRIVER_X11_XINERAMA */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
383 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
384 |
#if SDL_VIDEO_DRIVER_X11_XRANDR |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
385 |
/* XRandR */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
386 |
/* require at least XRandR v1.0 (arbitrary) */ |
2874 | 387 |
if (CheckXRandR(display, &xrandr_major, &xrandr_minor) |
388 |
&& xrandr_major >= 1) { |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
389 |
#ifdef X11MODES_DEBUG |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
390 |
fprintf(stderr, "XRANDR: XRRQueryVersion: V%d.%d\n", |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
391 |
xrandr_major, xrandr_minor); |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
392 |
#endif |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
393 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
394 |
/* save the screen configuration since we must reference it |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
395 |
each time we toggle modes. |
2874 | 396 |
*/ |
397 |
data->screen_config = |
|
398 |
XRRGetScreenInfo(display, RootWindow(display, data->screen)); |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
399 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
400 |
/* retrieve the list of resolution */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
401 |
sizes = XRRConfigSizes(data->screen_config, &nsizes); |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
402 |
if (nsizes > 0) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
403 |
int i, j; |
2874 | 404 |
for (i = 0; i < nsizes; i++) { |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
405 |
mode.w = sizes[i].width; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
406 |
mode.h = sizes[i].height; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
407 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
408 |
rates = XRRConfigRates(data->screen_config, i, &nrates); |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
409 |
for (j = 0; j < nrates; ++j) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
410 |
mode.refresh_rate = rates[j]; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
411 |
#ifdef X11MODES_DEBUG |
2874 | 412 |
fprintf(stderr, |
413 |
"XRANDR: mode = %4d[%d], w = %4d, h = %4d, rate = %4d\n", |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
414 |
i, j, mode.w, mode.h, mode.refresh_rate); |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
415 |
#endif |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
416 |
SDL_AddDisplayMode(_this->current_display, &mode); |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
417 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
418 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
419 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
420 |
data->use_xrandr = xrandr_major * 100 + xrandr_minor; |
2874 | 421 |
data->saved_size = |
422 |
XRRConfigCurrentConfiguration(data->screen_config, |
|
423 |
&data->saved_rotation); |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
424 |
data->saved_rate = XRRConfigCurrentRate(data->screen_config); |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
425 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
426 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
427 |
#endif /* SDL_VIDEO_DRIVER_X11_XRANDR */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
428 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
429 |
#if SDL_VIDEO_DRIVER_X11_VIDMODE |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
430 |
/* XVidMode */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
431 |
if (!data->use_xrandr && |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
432 |
#if SDL_VIDEO_DRIVER_X11_XINERAMA |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
433 |
(!data->use_xinerama || data->xinerama_info.screen_number == 0) && |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
434 |
#endif |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
435 |
CheckVidMode(display, &vm_major, &vm_minor) && |
2874 | 436 |
SDL_NAME(XF86VidModeGetAllModeLines) (display, data->screen, &nmodes, |
437 |
&modes)) { |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
438 |
int i; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
439 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
440 |
#ifdef X11MODES_DEBUG |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
441 |
printf("VidMode modes: (unsorted)\n"); |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
442 |
for (i = 0; i < nmodes; ++i) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
443 |
printf("Mode %d: %d x %d @ %d\n", i, |
2874 | 444 |
modes[i]->hdisplay, modes[i]->vdisplay, |
445 |
calculate_rate(modes[i])); |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
446 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
447 |
#endif |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
448 |
for (i = 0; i < nmodes; ++i) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
449 |
mode.w = modes[i]->hdisplay; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
450 |
mode.h = modes[i]->vdisplay; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
451 |
mode.refresh_rate = calculate_rate(modes[i]); |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
452 |
SDL_AddDisplayMode(_this->current_display, &mode); |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
453 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
454 |
XFree(modes); |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
455 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
456 |
data->use_vidmode = vm_major * 100 + vm_minor; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
457 |
save_mode(display, data); |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
458 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
459 |
#endif /* SDL_VIDEO_DRIVER_X11_VIDMODE */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
460 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
461 |
if (!data->use_xrandr && !data->use_vidmode) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
462 |
mode.w = screen_w; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
463 |
mode.h = screen_h; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
464 |
mode.refresh_rate = 0; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
465 |
SDL_AddDisplayMode(_this->current_display, &mode); |
2874 | 466 |
} |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
467 |
#ifdef X11MODES_DEBUG |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
468 |
if (data->use_xinerama) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
469 |
printf("Xinerama is enabled\n"); |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
470 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
471 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
472 |
if (data->use_xrandr) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
473 |
printf("XRandR is enabled\n"); |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
474 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
475 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
476 |
if (data->use_vidmode) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
477 |
printf("VidMode is enabled\n"); |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
478 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
479 |
#endif /* X11MODES_DEBUG */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
480 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
481 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
482 |
static void |
2874 | 483 |
get_real_resolution(Display * display, SDL_DisplayData * data, int *w, int *h, |
484 |
int *rate) |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
485 |
{ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
486 |
#if SDL_VIDEO_DRIVER_X11_XRANDR |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
487 |
if (data->use_xrandr) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
488 |
int nsizes; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
489 |
XRRScreenSize *sizes; |
2874 | 490 |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
491 |
sizes = XRRConfigSizes(data->screen_config, &nsizes); |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
492 |
if (nsizes > 0) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
493 |
int cur_size; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
494 |
Rotation cur_rotation; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
495 |
|
2874 | 496 |
cur_size = |
497 |
XRRConfigCurrentConfiguration(data->screen_config, |
|
498 |
&cur_rotation); |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
499 |
*w = sizes[cur_size].width; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
500 |
*h = sizes[cur_size].height; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
501 |
*rate = XRRConfigCurrentRate(data->screen_config); |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
502 |
#ifdef X11MODES_DEBUG |
2874 | 503 |
fprintf(stderr, |
504 |
"XRANDR: get_real_resolution: w = %d, h = %d, rate = %d\n", |
|
505 |
*w, *h, *rate); |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
506 |
#endif |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
507 |
return; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
508 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
509 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
510 |
#endif /* SDL_VIDEO_DRIVER_X11_XRANDR */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
511 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
512 |
#if SDL_VIDEO_DRIVER_X11_VIDMODE |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
513 |
if (data->use_vidmode) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
514 |
SDL_NAME(XF86VidModeModeInfo) mode; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
515 |
|
2874 | 516 |
if (SDL_NAME(XF86VidModeGetModeInfo) (display, data->screen, &mode)) { |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
517 |
*w = mode.hdisplay; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
518 |
*h = mode.vdisplay; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
519 |
*rate = calculate_rate(&mode); |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
520 |
return; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
521 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
522 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
523 |
#endif /* SDL_VIDEO_DRIVER_X11_VIDMODE */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
524 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
525 |
#if SDL_VIDEO_DRIVER_X11_XINERAMA |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
526 |
if (data->use_xinerama) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
527 |
*w = data->xinerama_info.width; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
528 |
*h = data->xinerama_info.height; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
529 |
*rate = 0; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
530 |
return; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
531 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
532 |
#endif /* SDL_VIDEO_DRIVER_X11_XINERAMA */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
533 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
534 |
*w = DisplayWidth(display, data->screen); |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
535 |
*h = DisplayHeight(display, data->screen); |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
536 |
*rate = 0; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
537 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
538 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
539 |
static void |
2874 | 540 |
set_best_resolution(Display * display, SDL_DisplayData * data, int w, int h, |
541 |
int rate) |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
542 |
{ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
543 |
int real_w, real_h, real_rate; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
544 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
545 |
/* check current mode so we can avoid uneccessary mode changes */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
546 |
get_real_resolution(display, data, &real_w, &real_h, &real_rate); |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
547 |
if (w == real_w && h == real_h && (!rate || rate == real_rate)) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
548 |
return; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
549 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
550 |
#if SDL_VIDEO_DRIVER_X11_XRANDR |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
551 |
if (data->use_xrandr) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
552 |
#ifdef X11MODES_DEBUG |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
553 |
fprintf(stderr, "XRANDR: set_best_resolution(): w = %d, h = %d\n", |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
554 |
w, h); |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
555 |
#endif |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
556 |
int i, nsizes, nrates; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
557 |
int best; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
558 |
int best_rate; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
559 |
XRRScreenSize *sizes; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
560 |
short *rates; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
561 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
562 |
/* find the smallest resolution that is at least as big as the user requested */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
563 |
best = -1; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
564 |
sizes = XRRConfigSizes(data->screen_config, &nsizes); |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
565 |
for (i = 0; i < nsizes; ++i) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
566 |
if (sizes[i].width < w || sizes[i].height < h) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
567 |
continue; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
568 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
569 |
if (sizes[i].width == w && sizes[i].height == h) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
570 |
best = i; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
571 |
break; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
572 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
573 |
if (best == -1 || |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
574 |
(sizes[i].width < sizes[best].width) || |
2874 | 575 |
(sizes[i].width == sizes[best].width |
576 |
&& sizes[i].height < sizes[best].height)) { |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
577 |
best = i; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
578 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
579 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
580 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
581 |
if (best >= 0) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
582 |
best_rate = 0; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
583 |
rates = XRRConfigRates(data->screen_config, best, &nrates); |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
584 |
for (i = 0; i < nrates; ++i) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
585 |
if (rates[i] == rate) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
586 |
best_rate = rate; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
587 |
break; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
588 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
589 |
if (!rate) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
590 |
/* Higher is better, right? */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
591 |
if (rates[i] > best_rate) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
592 |
best_rate = rates[i]; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
593 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
594 |
} else { |
2874 | 595 |
if (SDL_abs(rates[i] - rate) < SDL_abs(best_rate - rate)) { |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
596 |
best_rate = rates[i]; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
597 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
598 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
599 |
} |
2874 | 600 |
XRRSetScreenConfigAndRate(display, data->screen_config, |
601 |
RootWindow(display, data->screen), best, |
|
602 |
data->saved_rotation, best_rate, |
|
603 |
CurrentTime); |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
604 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
605 |
return; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
606 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
607 |
#endif /* SDL_VIDEO_DRIVER_X11_XRANDR */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
608 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
609 |
#if SDL_VIDEO_DRIVER_X11_VIDMODE |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
610 |
if (data->use_vidmode) { |
2874 | 611 |
SDL_NAME(XF86VidModeModeInfo) ** modes; |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
612 |
int i, nmodes; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
613 |
int best; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
614 |
|
2874 | 615 |
if (SDL_NAME(XF86VidModeGetAllModeLines) |
616 |
(display, data->screen, &nmodes, &modes)) { |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
617 |
best = -1; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
618 |
for (i = 0; i < nmodes; ++i) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
619 |
if (modes[i]->hdisplay < w || modes[i]->vdisplay < h) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
620 |
continue; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
621 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
622 |
if (best == -1 || |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
623 |
(modes[i]->hdisplay < modes[best]->hdisplay) || |
2874 | 624 |
(modes[i]->hdisplay == modes[best]->hdisplay |
625 |
&& modes[i]->vdisplay < modes[best]->vdisplay)) { |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
626 |
best = i; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
627 |
continue; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
628 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
629 |
if ((modes[i]->hdisplay == modes[best]->hdisplay) && |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
630 |
(modes[i]->vdisplay == modes[best]->vdisplay)) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
631 |
if (!rate) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
632 |
/* Higher is better, right? */ |
2874 | 633 |
if (calculate_rate(modes[i]) > |
634 |
calculate_rate(modes[best])) { |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
635 |
best = i; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
636 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
637 |
} else { |
2874 | 638 |
if (SDL_abs(calculate_rate(modes[i]) - rate) < |
639 |
SDL_abs(calculate_rate(modes[best]) - rate)) { |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
640 |
best = i; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
641 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
642 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
643 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
644 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
645 |
if (best >= 0) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
646 |
#ifdef X11MODES_DEBUG |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
647 |
printf("Best Mode %d: %d x %d @ %d\n", best, |
2874 | 648 |
modes[best]->hdisplay, modes[best]->vdisplay, |
649 |
calculate_rate(modes[best])); |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
650 |
#endif |
2874 | 651 |
SDL_NAME(XF86VidModeSwitchToMode) (display, data->screen, |
652 |
modes[best]); |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
653 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
654 |
XFree(modes); |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
655 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
656 |
return; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
657 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
658 |
#endif /* SDL_VIDEO_DRIVER_X11_VIDMODE */ |
1950
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
659 |
} |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
660 |
|
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
661 |
int |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
662 |
X11_SetDisplayMode(_THIS, SDL_DisplayMode * mode) |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
663 |
{ |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
664 |
Display *display = ((SDL_VideoData *) _this->driverdata)->display; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
665 |
SDL_DisplayData *data = (SDL_DisplayData *) SDL_CurrentDisplay.driverdata; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
666 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
667 |
set_best_resolution(display, data, mode->w, mode->h, mode->refresh_rate); |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
668 |
return 0; |
1950
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
669 |
} |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
670 |
|
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
671 |
void |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
672 |
X11_QuitModes(_THIS) |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
673 |
{ |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
674 |
} |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
675 |
|
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
676 |
/* vi: set ts=4 sw=4 expandtab: */ |