Mercurial > sdl-ios-xcode
comparison src/video/x11/SDL_x11modes.c @ 1668:4da1ee79c9af SDL-1.3
more tweaking indent options
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Mon, 29 May 2006 04:04:35 +0000 |
parents | 782fd950bd46 |
children | 43ba677b4f62 |
comparison
equal
deleted
inserted
replaced
1667:1fddae038bc8 | 1668:4da1ee79c9af |
---|---|
37 | 37 |
38 #define MAX(a, b) (a > b ? a : b) | 38 #define MAX(a, b) (a > b ? a : b) |
39 | 39 |
40 #if SDL_VIDEO_DRIVER_X11_VIDMODE | 40 #if SDL_VIDEO_DRIVER_X11_VIDMODE |
41 int | 41 int |
42 vidmode_refreshrate (SDL_NAME (XF86VidModeModeInfo) * mode) | 42 vidmode_refreshrate(SDL_NAME(XF86VidModeModeInfo) * mode) |
43 { | 43 { |
44 return (mode->htotal | 44 return (mode->htotal |
45 && mode->vtotal) ? (1000 * mode->dotclock / (mode->htotal * | 45 && mode->vtotal) ? (1000 * mode->dotclock / (mode->htotal * |
46 mode->vtotal)) : 0; | 46 mode->vtotal)) : 0; |
47 } | 47 } |
48 #endif | 48 #endif |
49 | 49 |
50 #if SDL_VIDEO_DRIVER_X11_VIDMODE | 50 #if SDL_VIDEO_DRIVER_X11_VIDMODE |
51 Bool SDL_NAME (XF86VidModeGetModeInfo) (Display * dpy, int scr, | 51 Bool SDL_NAME(XF86VidModeGetModeInfo) (Display * dpy, int scr, |
52 SDL_NAME (XF86VidModeModeInfo) * info) | 52 SDL_NAME(XF86VidModeModeInfo) * info) |
53 { | 53 { |
54 SDL_NAME (XF86VidModeModeLine) * l = | 54 SDL_NAME(XF86VidModeModeLine) * l = |
55 (SDL_NAME (XF86VidModeModeLine) *) ((char *) info + | 55 (SDL_NAME(XF86VidModeModeLine) *) ((char *) info + |
56 sizeof info->dotclock); | 56 sizeof info->dotclock); |
57 return SDL_NAME (XF86VidModeGetModeLine) (dpy, scr, | 57 return SDL_NAME(XF86VidModeGetModeLine) (dpy, scr, |
58 (int *) &info->dotclock, l); | 58 (int *) &info->dotclock, l); |
59 } | 59 } |
60 #endif /* SDL_VIDEO_DRIVER_X11_VIDMODE */ | 60 #endif /* SDL_VIDEO_DRIVER_X11_VIDMODE */ |
61 | 61 |
62 #if SDL_VIDEO_DRIVER_X11_VIDMODE | 62 #if SDL_VIDEO_DRIVER_X11_VIDMODE |
63 static void | 63 static void |
64 save_mode (_THIS) | 64 save_mode(_THIS) |
65 { | 65 { |
66 SDL_memset (&saved_mode, 0, sizeof (saved_mode)); | 66 SDL_memset(&saved_mode, 0, sizeof(saved_mode)); |
67 SDL_NAME (XF86VidModeGetModeInfo) (SDL_Display, SDL_Screen, &saved_mode); | 67 SDL_NAME(XF86VidModeGetModeInfo) (SDL_Display, SDL_Screen, &saved_mode); |
68 SDL_NAME (XF86VidModeGetViewPort) (SDL_Display, SDL_Screen, &saved_view.x, | 68 SDL_NAME(XF86VidModeGetViewPort) (SDL_Display, SDL_Screen, &saved_view.x, |
69 &saved_view.y); | 69 &saved_view.y); |
70 } | 70 } |
71 #endif | 71 #endif |
72 | 72 |
73 #if SDL_VIDEO_DRIVER_X11_VIDMODE | 73 #if SDL_VIDEO_DRIVER_X11_VIDMODE |
74 static void | 74 static void |
75 restore_mode (_THIS) | 75 restore_mode(_THIS) |
76 { | 76 { |
77 SDL_NAME (XF86VidModeModeLine) mode; | 77 SDL_NAME(XF86VidModeModeLine) mode; |
78 int unused; | 78 int unused; |
79 | 79 |
80 if (SDL_NAME (XF86VidModeGetModeLine) | 80 if (SDL_NAME(XF86VidModeGetModeLine) |
81 (SDL_Display, SDL_Screen, &unused, &mode)) { | 81 (SDL_Display, SDL_Screen, &unused, &mode)) { |
82 if ((saved_mode.hdisplay != mode.hdisplay) || | 82 if ((saved_mode.hdisplay != mode.hdisplay) || |
83 (saved_mode.vdisplay != mode.vdisplay)) { | 83 (saved_mode.vdisplay != mode.vdisplay)) { |
84 SDL_NAME (XF86VidModeSwitchToMode) (SDL_Display, SDL_Screen, | 84 SDL_NAME(XF86VidModeSwitchToMode) (SDL_Display, SDL_Screen, |
85 &saved_mode); | 85 &saved_mode); |
86 } | 86 } |
87 } | 87 } |
88 if ((saved_view.x != 0) || (saved_view.y != 0)) { | 88 if ((saved_view.x != 0) || (saved_view.y != 0)) { |
89 SDL_NAME (XF86VidModeSetViewPort) (SDL_Display, SDL_Screen, | 89 SDL_NAME(XF86VidModeSetViewPort) (SDL_Display, SDL_Screen, |
90 saved_view.x, saved_view.y); | 90 saved_view.x, saved_view.y); |
91 } | 91 } |
92 } | 92 } |
93 #endif | 93 #endif |
94 | 94 |
95 static void get_real_resolution (_THIS, int *w, int *h); | 95 static void get_real_resolution(_THIS, int *w, int *h); |
96 | 96 |
97 static void | 97 static void |
98 set_best_resolution (_THIS, int width, int height) | 98 set_best_resolution(_THIS, int width, int height) |
99 { | 99 { |
100 SDL_DisplayMode mode; | 100 SDL_DisplayMode mode; |
101 | 101 |
102 mode.format = 0; | 102 mode.format = 0; |
103 mode.w = width; | 103 mode.w = width; |
104 mode.h = height; | 104 mode.h = height; |
105 mode.refresh_rate = 0; | 105 mode.refresh_rate = 0; |
106 SDL_GetClosestDisplayMode (&mode, &mode, SDL_FULLSCREEN); | 106 SDL_GetClosestDisplayMode(&mode, &mode, SDL_FULLSCREEN); |
107 | 107 |
108 #if SDL_VIDEO_DRIVER_X11_VIDMODE | 108 #if SDL_VIDEO_DRIVER_X11_VIDMODE |
109 if (use_vidmode) { | 109 if (use_vidmode) { |
110 SDL_NAME (XF86VidModeModeLine) vmode; | 110 SDL_NAME(XF86VidModeModeLine) vmode; |
111 SDL_NAME (XF86VidModeModeInfo) vinfo; | 111 SDL_NAME(XF86VidModeModeInfo) vinfo; |
112 SDL_NAME (XF86VidModeModeInfo) ** modes; | 112 SDL_NAME(XF86VidModeModeInfo) ** modes; |
113 int i, dotclock; | 113 int i, dotclock; |
114 int nmodes; | 114 int nmodes; |
115 int best = -1; | 115 int best = -1; |
116 | 116 |
117 if (SDL_NAME (XF86VidModeGetModeLine) | 117 if (SDL_NAME(XF86VidModeGetModeLine) |
118 (SDL_Display, SDL_Screen, &dotclock, &vmode) | 118 (SDL_Display, SDL_Screen, &dotclock, &vmode) |
119 && SDL_NAME (XF86VidModeGetAllModeLines) (SDL_Display, | 119 && SDL_NAME(XF86VidModeGetAllModeLines) (SDL_Display, |
120 SDL_Screen, &nmodes, | 120 SDL_Screen, &nmodes, |
121 &modes)) { | 121 &modes)) { |
122 vinfo.dotclock = dotclock; | 122 vinfo.dotclock = dotclock; |
123 SDL_memcpy (&vinfo.hdisplay, &vmode, sizeof (vmode)); | 123 SDL_memcpy(&vinfo.hdisplay, &vmode, sizeof(vmode)); |
124 | 124 |
125 for (i = 0; i < nmodes; i++) { | 125 for (i = 0; i < nmodes; i++) { |
126 if ((modes[i]->hdisplay == mode.w) && | 126 if ((modes[i]->hdisplay == mode.w) && |
127 (modes[i]->vdisplay == mode.h) && | 127 (modes[i]->vdisplay == mode.h) && |
128 (vidmode_refreshrate (modes[i]) == mode.refresh_rate)) { | 128 (vidmode_refreshrate(modes[i]) == mode.refresh_rate)) { |
129 best = i; | 129 best = i; |
130 break; | 130 break; |
131 } | 131 } |
132 } | 132 } |
133 if (best >= 0 && | 133 if (best >= 0 && |
134 ((modes[best]->hdisplay != vmode.hdisplay) || | 134 ((modes[best]->hdisplay != vmode.hdisplay) || |
135 (modes[best]->vdisplay != vmode.vdisplay) || | 135 (modes[best]->vdisplay != vmode.vdisplay) || |
136 (vidmode_refreshrate (modes[best]) != | 136 (vidmode_refreshrate(modes[best]) != |
137 vidmode_refreshrate (&vinfo)))) { | 137 vidmode_refreshrate(&vinfo)))) { |
138 #ifdef X11MODES_DEBUG | 138 #ifdef X11MODES_DEBUG |
139 printf ("Best Mode %d: %d x %d @ %d\n", best, | 139 printf("Best Mode %d: %d x %d @ %d\n", best, |
140 modes[best]->hdisplay, modes[best]->vdisplay, | 140 modes[best]->hdisplay, modes[best]->vdisplay, |
141 vidmode_refreshrate (modes[best])); | 141 vidmode_refreshrate(modes[best])); |
142 #endif | 142 #endif |
143 SDL_NAME (XF86VidModeSwitchToMode) (SDL_Display, | 143 SDL_NAME(XF86VidModeSwitchToMode) (SDL_Display, |
144 SDL_Screen, modes[best]); | 144 SDL_Screen, modes[best]); |
145 } | 145 } |
146 XFree (modes); | 146 XFree(modes); |
147 } | 147 } |
148 } | 148 } |
149 #endif /* SDL_VIDEO_DRIVER_X11_VIDMODE */ | 149 #endif /* SDL_VIDEO_DRIVER_X11_VIDMODE */ |
150 | 150 |
151 /* XiG */ | 151 /* XiG */ |
153 if (use_xme) { | 153 if (use_xme) { |
154 int i; | 154 int i; |
155 int w, h; | 155 int w, h; |
156 | 156 |
157 /* check current mode so we can avoid uneccessary mode changes */ | 157 /* check current mode so we can avoid uneccessary mode changes */ |
158 get_real_resolution (this, &w, &h); | 158 get_real_resolution(this, &w, &h); |
159 | 159 |
160 if ((mode.w != w) || (mode.h != h)) { | 160 if ((mode.w != w) || (mode.h != h)) { |
161 #ifdef X11MODES_DEBUG | 161 #ifdef X11MODES_DEBUG |
162 fprintf (stderr, "XME: set_best_resolution: " | 162 fprintf(stderr, "XME: set_best_resolution: " |
163 "XiGMiscChangeResolution: %d %d\n", mode.w, mode.h); | 163 "XiGMiscChangeResolution: %d %d\n", mode.w, mode.h); |
164 #endif | 164 #endif |
165 XiGMiscChangeResolution (SDL_Display, SDL_Screen, 0, /* view */ | 165 XiGMiscChangeResolution(SDL_Display, SDL_Screen, 0, /* view */ |
166 mode.w, mode.h, 0); | 166 mode.w, mode.h, 0); |
167 XSync (SDL_Display, False); | 167 XSync(SDL_Display, False); |
168 } | 168 } |
169 } | 169 } |
170 #endif /* SDL_VIDEO_DRIVER_X11_XME */ | 170 #endif /* SDL_VIDEO_DRIVER_X11_XME */ |
171 | 171 |
172 #if SDL_VIDEO_DRIVER_X11_XRANDR | 172 #if SDL_VIDEO_DRIVER_X11_XRANDR |
173 if (use_xrandr) { | 173 if (use_xrandr) { |
174 int i, nsizes; | 174 int i, nsizes; |
175 XRRScreenSize *sizes; | 175 XRRScreenSize *sizes; |
176 | 176 |
177 /* find the smallest resolution that is at least as big as the user requested */ | 177 /* find the smallest resolution that is at least as big as the user requested */ |
178 sizes = XRRConfigSizes (screen_config, &nsizes); | 178 sizes = XRRConfigSizes(screen_config, &nsizes); |
179 for (i = (nsizes - 1); i >= 0; i--) { | 179 for (i = (nsizes - 1); i >= 0; i--) { |
180 if ((mode.w >= width) && (mode.h >= height)) { | 180 if ((mode.w >= width) && (mode.h >= height)) { |
181 break; | 181 break; |
182 } | 182 } |
183 } | 183 } |
184 | 184 |
185 if (i >= 0) { /* found one, lets try it */ | 185 if (i >= 0) { /* found one, lets try it */ |
186 int w, h; | 186 int w, h; |
187 | 187 |
188 /* check current mode so we can avoid uneccessary mode changes */ | 188 /* check current mode so we can avoid uneccessary mode changes */ |
189 get_real_resolution (this, &w, &h); | 189 get_real_resolution(this, &w, &h); |
190 | 190 |
191 if ((mode.w != w) || (mode.h != h)) { | 191 if ((mode.w != w) || (mode.h != h)) { |
192 int size_id; | 192 int size_id; |
193 | 193 |
194 #ifdef X11MODES_DEBUG | 194 #ifdef X11MODES_DEBUG |
195 fprintf (stderr, "XRANDR: set_best_resolution: " | 195 fprintf(stderr, "XRANDR: set_best_resolution: " |
196 "XXRSetScreenConfig: %d %d\n", mode.w, mode.h); | 196 "XXRSetScreenConfig: %d %d\n", mode.w, mode.h); |
197 #endif | 197 #endif |
198 | 198 |
199 /* find the matching size entry index */ | 199 /* find the matching size entry index */ |
200 for (size_id = 0; size_id < nsizes; ++size_id) { | 200 for (size_id = 0; size_id < nsizes; ++size_id) { |
201 if ((sizes[size_id].width == mode.w) && | 201 if ((sizes[size_id].width == mode.w) && |
202 (sizes[size_id].height == mode.h)) | 202 (sizes[size_id].height == mode.h)) |
203 break; | 203 break; |
204 } | 204 } |
205 | 205 |
206 XRRSetScreenConfig (SDL_Display, screen_config, | 206 XRRSetScreenConfig(SDL_Display, screen_config, |
207 SDL_Root, size_id, saved_rotation, | 207 SDL_Root, size_id, saved_rotation, |
208 CurrentTime); | 208 CurrentTime); |
209 } | 209 } |
210 } | 210 } |
211 } | 211 } |
212 #endif /* SDL_VIDEO_DRIVER_X11_XRANDR */ | 212 #endif /* SDL_VIDEO_DRIVER_X11_XRANDR */ |
213 } | 213 } |
214 | 214 |
215 static void | 215 static void |
216 get_real_resolution (_THIS, int *w, int *h) | 216 get_real_resolution(_THIS, int *w, int *h) |
217 { | 217 { |
218 #if SDL_VIDEO_DRIVER_X11_XME | 218 #if SDL_VIDEO_DRIVER_X11_XME |
219 if (use_xme) { | 219 if (use_xme) { |
220 int ractive; | 220 int ractive; |
221 XiGMiscResolutionInfo *modelist; | 221 XiGMiscResolutionInfo *modelist; |
222 | 222 |
223 XiGMiscQueryResolutions (SDL_Display, SDL_Screen, 0, /* view */ | 223 XiGMiscQueryResolutions(SDL_Display, SDL_Screen, 0, /* view */ |
224 &ractive, &modelist); | 224 &ractive, &modelist); |
225 *w = modelist[ractive].width; | 225 *w = modelist[ractive].width; |
226 *h = modelist[ractive].height; | 226 *h = modelist[ractive].height; |
227 #ifdef X11MODES_DEBUG | 227 #ifdef X11MODES_DEBUG |
228 fprintf (stderr, "XME: get_real_resolution: w = %d h = %d\n", *w, *h); | 228 fprintf(stderr, "XME: get_real_resolution: w = %d h = %d\n", *w, *h); |
229 #endif | 229 #endif |
230 XFree (modelist); | 230 XFree(modelist); |
231 return; | 231 return; |
232 } | 232 } |
233 #endif /* SDL_VIDEO_DRIVER_X11_XME */ | 233 #endif /* SDL_VIDEO_DRIVER_X11_XME */ |
234 | 234 |
235 #if SDL_VIDEO_DRIVER_X11_VIDMODE | 235 #if SDL_VIDEO_DRIVER_X11_VIDMODE |
236 if (use_vidmode) { | 236 if (use_vidmode) { |
237 SDL_NAME (XF86VidModeModeLine) mode; | 237 SDL_NAME(XF86VidModeModeLine) mode; |
238 int unused; | 238 int unused; |
239 | 239 |
240 if (SDL_NAME (XF86VidModeGetModeLine) | 240 if (SDL_NAME(XF86VidModeGetModeLine) |
241 (SDL_Display, SDL_Screen, &unused, &mode)) { | 241 (SDL_Display, SDL_Screen, &unused, &mode)) { |
242 *w = mode.hdisplay; | 242 *w = mode.hdisplay; |
243 *h = mode.vdisplay; | 243 *h = mode.vdisplay; |
244 return; | 244 return; |
245 } | 245 } |
249 #if SDL_VIDEO_DRIVER_X11_XRANDR | 249 #if SDL_VIDEO_DRIVER_X11_XRANDR |
250 if (use_xrandr) { | 250 if (use_xrandr) { |
251 int nsizes; | 251 int nsizes; |
252 XRRScreenSize *sizes; | 252 XRRScreenSize *sizes; |
253 | 253 |
254 sizes = XRRConfigSizes (screen_config, &nsizes); | 254 sizes = XRRConfigSizes(screen_config, &nsizes); |
255 if (nsizes > 0) { | 255 if (nsizes > 0) { |
256 int cur_size; | 256 int cur_size; |
257 Rotation cur_rotation; | 257 Rotation cur_rotation; |
258 | 258 |
259 cur_size = | 259 cur_size = |
260 XRRConfigCurrentConfiguration (screen_config, &cur_rotation); | 260 XRRConfigCurrentConfiguration(screen_config, &cur_rotation); |
261 if (cur_size >= 0 && cur_size < nsizes) { | 261 if (cur_size >= 0 && cur_size < nsizes) { |
262 *w = sizes[cur_size].width; | 262 *w = sizes[cur_size].width; |
263 *h = sizes[cur_size].height; | 263 *h = sizes[cur_size].height; |
264 } | 264 } |
265 #ifdef X11MODES_DEBUG | 265 #ifdef X11MODES_DEBUG |
266 fprintf (stderr, | 266 fprintf(stderr, |
267 "XRANDR: get_real_resolution: w = %d h = %d\n", *w, *h); | 267 "XRANDR: get_real_resolution: w = %d h = %d\n", *w, *h); |
268 #endif | 268 #endif |
269 return; | 269 return; |
270 } | 270 } |
271 } | 271 } |
272 #endif /* SDL_VIDEO_DRIVER_X11_XRANDR */ | 272 #endif /* SDL_VIDEO_DRIVER_X11_XRANDR */ |
277 *h = xinerama[this->current_display].height; | 277 *h = xinerama[this->current_display].height; |
278 return; | 278 return; |
279 } | 279 } |
280 #endif /* SDL_VIDEO_DRIVER_X11_XINERAMA */ | 280 #endif /* SDL_VIDEO_DRIVER_X11_XINERAMA */ |
281 | 281 |
282 *w = DisplayWidth (SDL_Display, SDL_Screen); | 282 *w = DisplayWidth(SDL_Display, SDL_Screen); |
283 *h = DisplayHeight (SDL_Display, SDL_Screen); | 283 *h = DisplayHeight(SDL_Display, SDL_Screen); |
284 } | 284 } |
285 | 285 |
286 /* Called after mapping a window - waits until the window is mapped */ | 286 /* Called after mapping a window - waits until the window is mapped */ |
287 void | 287 void |
288 X11_WaitMapped (_THIS, Window win) | 288 X11_WaitMapped(_THIS, Window win) |
289 { | 289 { |
290 XEvent event; | 290 XEvent event; |
291 do { | 291 do { |
292 XMaskEvent (SDL_Display, StructureNotifyMask, &event); | 292 XMaskEvent(SDL_Display, StructureNotifyMask, &event); |
293 } | 293 } |
294 while ((event.type != MapNotify) || (event.xmap.event != win)); | 294 while ((event.type != MapNotify) || (event.xmap.event != win)); |
295 } | 295 } |
296 | 296 |
297 /* Called after unmapping a window - waits until the window is unmapped */ | 297 /* Called after unmapping a window - waits until the window is unmapped */ |
298 void | 298 void |
299 X11_WaitUnmapped (_THIS, Window win) | 299 X11_WaitUnmapped(_THIS, Window win) |
300 { | 300 { |
301 XEvent event; | 301 XEvent event; |
302 do { | 302 do { |
303 XMaskEvent (SDL_Display, StructureNotifyMask, &event); | 303 XMaskEvent(SDL_Display, StructureNotifyMask, &event); |
304 } | 304 } |
305 while ((event.type != UnmapNotify) || (event.xunmap.event != win)); | 305 while ((event.type != UnmapNotify) || (event.xunmap.event != win)); |
306 } | 306 } |
307 | 307 |
308 static void | 308 static void |
309 move_cursor_to (_THIS, int x, int y) | 309 move_cursor_to(_THIS, int x, int y) |
310 { | 310 { |
311 XWarpPointer (SDL_Display, None, SDL_Root, 0, 0, 0, 0, x, y); | 311 XWarpPointer(SDL_Display, None, SDL_Root, 0, 0, 0, 0, x, y); |
312 } | 312 } |
313 | 313 |
314 static int | 314 static int |
315 add_visual (_THIS, int depth, int class) | 315 add_visual(_THIS, int depth, int class) |
316 { | 316 { |
317 XVisualInfo vi; | 317 XVisualInfo vi; |
318 if (XMatchVisualInfo (SDL_Display, SDL_Screen, depth, class, &vi)) { | 318 if (XMatchVisualInfo(SDL_Display, SDL_Screen, depth, class, &vi)) { |
319 int n = this->hidden->nvisuals; | 319 int n = this->hidden->nvisuals; |
320 this->hidden->visuals[n].depth = vi.depth; | 320 this->hidden->visuals[n].depth = vi.depth; |
321 this->hidden->visuals[n].visual = vi.visual; | 321 this->hidden->visuals[n].visual = vi.visual; |
322 this->hidden->nvisuals++; | 322 this->hidden->nvisuals++; |
323 } | 323 } |
324 return (this->hidden->nvisuals); | 324 return (this->hidden->nvisuals); |
325 } | 325 } |
326 static int | 326 static int |
327 add_visual_byid (_THIS, const char *visual_id) | 327 add_visual_byid(_THIS, const char *visual_id) |
328 { | 328 { |
329 XVisualInfo *vi, template; | 329 XVisualInfo *vi, template; |
330 int nvis; | 330 int nvis; |
331 | 331 |
332 if (visual_id) { | 332 if (visual_id) { |
333 SDL_memset (&template, 0, (sizeof template)); | 333 SDL_memset(&template, 0, (sizeof template)); |
334 template.visualid = SDL_strtol (visual_id, NULL, 0); | 334 template.visualid = SDL_strtol(visual_id, NULL, 0); |
335 vi = XGetVisualInfo (SDL_Display, VisualIDMask, &template, &nvis); | 335 vi = XGetVisualInfo(SDL_Display, VisualIDMask, &template, &nvis); |
336 if (vi) { | 336 if (vi) { |
337 int n = this->hidden->nvisuals; | 337 int n = this->hidden->nvisuals; |
338 this->hidden->visuals[n].depth = vi->depth; | 338 this->hidden->visuals[n].depth = vi->depth; |
339 this->hidden->visuals[n].visual = vi->visual; | 339 this->hidden->visuals[n].visual = vi->visual; |
340 this->hidden->nvisuals++; | 340 this->hidden->nvisuals++; |
341 XFree (vi); | 341 XFree(vi); |
342 } | 342 } |
343 } | 343 } |
344 return (this->hidden->nvisuals); | 344 return (this->hidden->nvisuals); |
345 } | 345 } |
346 | 346 |
347 int | 347 int |
348 X11_GetVisuals (_THIS) | 348 X11_GetVisuals(_THIS) |
349 { | 349 { |
350 /* It's interesting to note that if we allow 32 bit depths, | 350 /* It's interesting to note that if we allow 32 bit depths, |
351 we get a visual with an alpha mask on composite servers. | 351 we get a visual with an alpha mask on composite servers. |
352 static int depth_list[] = { 32, 24, 16, 15, 8 }; | 352 static int depth_list[] = { 32, 24, 16, 15, 8 }; |
353 */ | 353 */ |
356 int use_directcolor = 1; | 356 int use_directcolor = 1; |
357 XPixmapFormatValues *pf; | 357 XPixmapFormatValues *pf; |
358 | 358 |
359 /* Search for the visuals in deepest-first order, so that the first | 359 /* Search for the visuals in deepest-first order, so that the first |
360 will be the richest one */ | 360 will be the richest one */ |
361 if (SDL_getenv ("SDL_VIDEO_X11_NODIRECTCOLOR")) { | 361 if (SDL_getenv("SDL_VIDEO_X11_NODIRECTCOLOR")) { |
362 use_directcolor = 0; | 362 use_directcolor = 0; |
363 } | 363 } |
364 this->hidden->nvisuals = 0; | 364 this->hidden->nvisuals = 0; |
365 if (!add_visual_byid (this, SDL_getenv ("SDL_VIDEO_X11_VISUALID"))) { | 365 if (!add_visual_byid(this, SDL_getenv("SDL_VIDEO_X11_VISUALID"))) { |
366 for (i = 0; i < SDL_arraysize (depth_list); ++i) { | 366 for (i = 0; i < SDL_arraysize(depth_list); ++i) { |
367 if (depth_list[i] > 8) { | 367 if (depth_list[i] > 8) { |
368 if (use_directcolor) { | 368 if (use_directcolor) { |
369 add_visual (this, depth_list[i], DirectColor); | 369 add_visual(this, depth_list[i], DirectColor); |
370 } | 370 } |
371 add_visual (this, depth_list[i], TrueColor); | 371 add_visual(this, depth_list[i], TrueColor); |
372 } else { | 372 } else { |
373 add_visual (this, depth_list[i], PseudoColor); | 373 add_visual(this, depth_list[i], PseudoColor); |
374 add_visual (this, depth_list[i], StaticColor); | 374 add_visual(this, depth_list[i], StaticColor); |
375 } | 375 } |
376 } | 376 } |
377 } | 377 } |
378 if (this->hidden->nvisuals == 0) { | 378 if (this->hidden->nvisuals == 0) { |
379 SDL_SetError ("Found no sufficiently capable X11 visuals"); | 379 SDL_SetError("Found no sufficiently capable X11 visuals"); |
380 return -1; | 380 return -1; |
381 } | 381 } |
382 | 382 |
383 /* look up the pixel quantum for each depth */ | 383 /* look up the pixel quantum for each depth */ |
384 pf = XListPixmapFormats (SDL_Display, &np); | 384 pf = XListPixmapFormats(SDL_Display, &np); |
385 for (i = 0; i < this->hidden->nvisuals; i++) { | 385 for (i = 0; i < this->hidden->nvisuals; i++) { |
386 int d = this->hidden->visuals[i].depth; | 386 int d = this->hidden->visuals[i].depth; |
387 for (j = 0; j < np; j++) | 387 for (j = 0; j < np; j++) |
388 if (pf[j].depth == d) | 388 if (pf[j].depth == d) |
389 break; | 389 break; |
390 this->hidden->visuals[i].bpp = j < np ? pf[j].bits_per_pixel : d; | 390 this->hidden->visuals[i].bpp = j < np ? pf[j].bits_per_pixel : d; |
391 } | 391 } |
392 | 392 |
393 XFree (pf); | 393 XFree(pf); |
394 return 0; | 394 return 0; |
395 } | 395 } |
396 | 396 |
397 /* Global for the error handler */ | 397 /* Global for the error handler */ |
398 int vm_event, vm_error = -1; | 398 int vm_event, vm_error = -1; |
399 | 399 |
400 #if SDL_VIDEO_DRIVER_X11_XINERAMA | 400 #if SDL_VIDEO_DRIVER_X11_XINERAMA |
401 static int | 401 static int |
402 CheckXinerama (_THIS, int *major, int *minor) | 402 CheckXinerama(_THIS, int *major, int *minor) |
403 { | 403 { |
404 const char *env; | 404 const char *env; |
405 | 405 |
406 /* Default the extension not available */ | 406 /* Default the extension not available */ |
407 *major = *minor = 0; | 407 *major = *minor = 0; |
408 | 408 |
409 /* Allow environment override */ | 409 /* Allow environment override */ |
410 env = getenv ("SDL_VIDEO_X11_XINERAMA"); | 410 env = getenv("SDL_VIDEO_X11_XINERAMA"); |
411 if (env && !SDL_atoi (env)) { | 411 if (env && !SDL_atoi(env)) { |
412 return 0; | 412 return 0; |
413 } | 413 } |
414 | 414 |
415 /* Query the extension version */ | 415 /* Query the extension version */ |
416 if (!SDL_NAME (XineramaQueryExtension) (SDL_Display, major, minor) || | 416 if (!SDL_NAME(XineramaQueryExtension) (SDL_Display, major, minor) || |
417 !SDL_NAME (XineramaIsActive) (SDL_Display)) { | 417 !SDL_NAME(XineramaIsActive) (SDL_Display)) { |
418 return 0; | 418 return 0; |
419 } | 419 } |
420 return 1; | 420 return 1; |
421 } | 421 } |
422 #endif /* SDL_VIDEO_DRIVER_X11_XINERAMA */ | 422 #endif /* SDL_VIDEO_DRIVER_X11_XINERAMA */ |
423 | 423 |
424 #if SDL_VIDEO_DRIVER_X11_XRANDR | 424 #if SDL_VIDEO_DRIVER_X11_XRANDR |
425 static int | 425 static int |
426 CheckXRandR (_THIS, int *major, int *minor) | 426 CheckXRandR(_THIS, int *major, int *minor) |
427 { | 427 { |
428 const char *env; | 428 const char *env; |
429 | 429 |
430 /* Default the extension not available */ | 430 /* Default the extension not available */ |
431 *major = *minor = 0; | 431 *major = *minor = 0; |
432 | 432 |
433 /* Allow environment override */ | 433 /* Allow environment override */ |
434 env = getenv ("SDL_VIDEO_X11_XRANDR"); | 434 env = getenv("SDL_VIDEO_X11_XRANDR"); |
435 if (env && !SDL_atoi (env)) { | 435 if (env && !SDL_atoi(env)) { |
436 return 0; | 436 return 0; |
437 } | 437 } |
438 | 438 |
439 /* This defaults off now, due to KDE window maximize problems */ | 439 /* This defaults off now, due to KDE window maximize problems */ |
440 if (!env) { | 440 if (!env) { |
444 if (!SDL_X11_HAVE_XRANDR) { | 444 if (!SDL_X11_HAVE_XRANDR) { |
445 return 0; | 445 return 0; |
446 } | 446 } |
447 | 447 |
448 /* Query the extension version */ | 448 /* Query the extension version */ |
449 if (!XRRQueryVersion (SDL_Display, major, minor)) { | 449 if (!XRRQueryVersion(SDL_Display, major, minor)) { |
450 return 0; | 450 return 0; |
451 } | 451 } |
452 return 1; | 452 return 1; |
453 } | 453 } |
454 #endif /* SDL_VIDEO_DRIVER_X11_XRANDR */ | 454 #endif /* SDL_VIDEO_DRIVER_X11_XRANDR */ |
455 | 455 |
456 #if SDL_VIDEO_DRIVER_X11_VIDMODE | 456 #if SDL_VIDEO_DRIVER_X11_VIDMODE |
457 static int | 457 static int |
458 CheckVidMode (_THIS, int *major, int *minor) | 458 CheckVidMode(_THIS, int *major, int *minor) |
459 { | 459 { |
460 const char *env; | 460 const char *env; |
461 | 461 |
462 /* Default the extension not available */ | 462 /* Default the extension not available */ |
463 *major = *minor = 0; | 463 *major = *minor = 0; |
464 | 464 |
465 /* Allow environment override */ | 465 /* Allow environment override */ |
466 env = getenv ("SDL_VIDEO_X11_VIDMODE"); | 466 env = getenv("SDL_VIDEO_X11_VIDMODE"); |
467 if (env && !SDL_atoi (env)) { | 467 if (env && !SDL_atoi(env)) { |
468 return 0; | 468 return 0; |
469 } | 469 } |
470 | 470 |
471 /* Metro-X 4.3.0 and earlier has a broken implementation of | 471 /* Metro-X 4.3.0 and earlier has a broken implementation of |
472 XF86VidModeGetAllModeLines() - it hangs the client. | 472 XF86VidModeGetAllModeLines() - it hangs the client. |
473 */ | 473 */ |
474 if (SDL_strcmp (ServerVendor (SDL_Display), "Metro Link Incorporated") == | 474 if (SDL_strcmp(ServerVendor(SDL_Display), "Metro Link Incorporated") == 0) { |
475 0) { | |
476 FILE *metro_fp; | 475 FILE *metro_fp; |
477 | 476 |
478 metro_fp = fopen ("/usr/X11R6/lib/X11/Metro/.version", "r"); | 477 metro_fp = fopen("/usr/X11R6/lib/X11/Metro/.version", "r"); |
479 if (metro_fp != NULL) { | 478 if (metro_fp != NULL) { |
480 int major, minor, patch, version; | 479 int major, minor, patch, version; |
481 major = 0; | 480 major = 0; |
482 minor = 0; | 481 minor = 0; |
483 patch = 0; | 482 patch = 0; |
484 fscanf (metro_fp, "%d.%d.%d", &major, &minor, &patch); | 483 fscanf(metro_fp, "%d.%d.%d", &major, &minor, &patch); |
485 fclose (metro_fp); | 484 fclose(metro_fp); |
486 version = major * 100 + minor * 10 + patch; | 485 version = major * 100 + minor * 10 + patch; |
487 if (version < 431) { | 486 if (version < 431) { |
488 return 0; | 487 return 0; |
489 } | 488 } |
490 } | 489 } |
491 } | 490 } |
492 | 491 |
493 /* Query the extension version */ | 492 /* Query the extension version */ |
494 vm_error = -1; | 493 vm_error = -1; |
495 if (!SDL_NAME (XF86VidModeQueryExtension) | 494 if (!SDL_NAME(XF86VidModeQueryExtension) |
496 (SDL_Display, &vm_event, &vm_error) | 495 (SDL_Display, &vm_event, &vm_error) |
497 || !SDL_NAME (XF86VidModeQueryVersion) (SDL_Display, major, minor)) { | 496 || !SDL_NAME(XF86VidModeQueryVersion) (SDL_Display, major, minor)) { |
498 return 0; | 497 return 0; |
499 } | 498 } |
500 return 1; | 499 return 1; |
501 } | 500 } |
502 #endif /* SDL_VIDEO_DRIVER_X11_VIDMODE */ | 501 #endif /* SDL_VIDEO_DRIVER_X11_VIDMODE */ |
503 | 502 |
504 #if SDL_VIDEO_DRIVER_X11_XME | 503 #if SDL_VIDEO_DRIVER_X11_XME |
505 static int | 504 static int |
506 CheckXME (_THIS, int *major, int *minor) | 505 CheckXME(_THIS, int *major, int *minor) |
507 { | 506 { |
508 const char *env; | 507 const char *env; |
509 | 508 |
510 /* Default the extension not available */ | 509 /* Default the extension not available */ |
511 *major = *minor = 0; | 510 *major = *minor = 0; |
512 | 511 |
513 /* Allow environment override */ | 512 /* Allow environment override */ |
514 env = getenv ("SDL_VIDEO_X11_VIDMODE"); | 513 env = getenv("SDL_VIDEO_X11_VIDMODE"); |
515 if (env && !SDL_atoi (env)) { | 514 if (env && !SDL_atoi(env)) { |
516 return 0; | 515 return 0; |
517 } | 516 } |
518 | 517 |
519 /* Query the extension version */ | 518 /* Query the extension version */ |
520 if (!XiGMiscQueryVersion (SDL_Display, major, minor)) { | 519 if (!XiGMiscQueryVersion(SDL_Display, major, minor)) { |
521 return 0; | 520 return 0; |
522 } | 521 } |
523 return 1; | 522 return 1; |
524 } | 523 } |
525 #endif /* SDL_VIDEO_DRIVER_X11_XME */ | 524 #endif /* SDL_VIDEO_DRIVER_X11_XME */ |
526 | 525 |
527 int | 526 int |
528 X11_GetVideoModes (_THIS) | 527 X11_GetVideoModes(_THIS) |
529 { | 528 { |
530 #if SDL_VIDEO_DRIVER_X11_XINERAMA | 529 #if SDL_VIDEO_DRIVER_X11_XINERAMA |
531 int xinerama_major, xinerama_minor; | 530 int xinerama_major, xinerama_minor; |
532 #endif | 531 #endif |
533 #if SDL_VIDEO_DRIVER_X11_XRANDR | 532 #if SDL_VIDEO_DRIVER_X11_XRANDR |
538 short *rates; | 537 short *rates; |
539 #endif | 538 #endif |
540 #if SDL_VIDEO_DRIVER_X11_VIDMODE | 539 #if SDL_VIDEO_DRIVER_X11_VIDMODE |
541 int vm_major, vm_minor; | 540 int vm_major, vm_minor; |
542 int nmodes; | 541 int nmodes; |
543 SDL_NAME (XF86VidModeModeInfo) ** modes; | 542 SDL_NAME(XF86VidModeModeInfo) ** modes; |
544 #endif | 543 #endif |
545 #if SDL_VIDEO_DRIVER_X11_XME | 544 #if SDL_VIDEO_DRIVER_X11_XME |
546 int xme_major, xme_minor; | 545 int xme_major, xme_minor; |
547 int ractive, nummodes; | 546 int ractive, nummodes; |
548 XiGMiscResolutionInfo *modelist; | 547 XiGMiscResolutionInfo *modelist; |
554 | 553 |
555 use_xinerama = 0; | 554 use_xinerama = 0; |
556 use_xrandr = 0; | 555 use_xrandr = 0; |
557 use_vidmode = 0; | 556 use_vidmode = 0; |
558 use_xme = 0; | 557 use_xme = 0; |
559 screen_w = DisplayWidth (SDL_Display, SDL_Screen); | 558 screen_w = DisplayWidth(SDL_Display, SDL_Screen); |
560 screen_h = DisplayHeight (SDL_Display, SDL_Screen); | 559 screen_h = DisplayHeight(SDL_Display, SDL_Screen); |
561 | 560 |
562 mode.format = this->displays[this->current_display].desktop_mode.format; | 561 mode.format = this->displays[this->current_display].desktop_mode.format; |
563 mode.w = screen_w; | 562 mode.w = screen_w; |
564 mode.h = screen_h; | 563 mode.h = screen_h; |
565 mode.refresh_rate = 0; | 564 mode.refresh_rate = 0; |
566 SDL_AddDisplayMode (0, &mode); | 565 SDL_AddDisplayMode(0, &mode); |
567 | 566 |
568 #if SDL_VIDEO_DRIVER_X11_XINERAMA | 567 #if SDL_VIDEO_DRIVER_X11_XINERAMA |
569 /* Query Xinerama extention */ | 568 /* Query Xinerama extention */ |
570 if (CheckXinerama (this, &xinerama_major, &xinerama_minor)) { | 569 if (CheckXinerama(this, &xinerama_major, &xinerama_minor)) { |
571 int screens; | 570 int screens; |
572 | 571 |
573 #ifdef X11MODES_DEBUG | 572 #ifdef X11MODES_DEBUG |
574 printf ("X11 detected Xinerama:\n"); | 573 printf("X11 detected Xinerama:\n"); |
575 #endif | 574 #endif |
576 xinerama = SDL_NAME (XineramaQueryScreens) (SDL_Display, &screens); | 575 xinerama = SDL_NAME(XineramaQueryScreens) (SDL_Display, &screens); |
577 for (i = 0; i < screens; i++) { | 576 for (i = 0; i < screens; i++) { |
578 #ifdef X11MODES_DEBUG | 577 #ifdef X11MODES_DEBUG |
579 printf ("xinerama %d: %dx%d+%d+%d\n", | 578 printf("xinerama %d: %dx%d+%d+%d\n", |
580 xinerama[i].screen_number, | 579 xinerama[i].screen_number, |
581 xinerama[i].width, xinerama[i].height, | 580 xinerama[i].width, xinerama[i].height, |
582 xinerama[i].x_org, xinerama[i].y_org); | 581 xinerama[i].x_org, xinerama[i].y_org); |
583 #endif | 582 #endif |
584 if (xinerama[i].screen_number != 0) { | 583 if (xinerama[i].screen_number != 0) { |
585 SDL_AddVideoDisplay (&mode); | 584 SDL_AddVideoDisplay(&mode); |
586 } | 585 } |
587 mode.w = xinerama[i].width; | 586 mode.w = xinerama[i].width; |
588 mode.h = xinerama[i].height; | 587 mode.h = xinerama[i].height; |
589 SDL_AddDisplayMode (xinerama[i].screen_number, &mode); | 588 SDL_AddDisplayMode(xinerama[i].screen_number, &mode); |
590 } | 589 } |
591 use_xinerama = 1; | 590 use_xinerama = 1; |
592 } | 591 } |
593 #endif /* SDL_VIDEO_DRIVER_X11_XINERAMA */ | 592 #endif /* SDL_VIDEO_DRIVER_X11_XINERAMA */ |
594 | 593 |
595 #if SDL_VIDEO_DRIVER_X11_XRANDR | 594 #if SDL_VIDEO_DRIVER_X11_XRANDR |
596 /* XRandR */ | 595 /* XRandR */ |
597 /* require at least XRandR v1.0 (arbitrary) */ | 596 /* require at least XRandR v1.0 (arbitrary) */ |
598 if (CheckXRandR (this, &xrandr_major, &xrandr_minor) | 597 if (CheckXRandR(this, &xrandr_major, &xrandr_minor) |
599 && (xrandr_major >= 1)) { | 598 && (xrandr_major >= 1)) { |
600 #ifdef X11MODES_DEBUG | 599 #ifdef X11MODES_DEBUG |
601 fprintf (stderr, "XRANDR: XRRQueryVersion: V%d.%d\n", | 600 fprintf(stderr, "XRANDR: XRRQueryVersion: V%d.%d\n", |
602 xrandr_major, xrandr_minor); | 601 xrandr_major, xrandr_minor); |
603 #endif | 602 #endif |
604 | 603 |
605 /* save the screen configuration since we must reference it | 604 /* save the screen configuration since we must reference it |
606 each time we toggle modes. | 605 each time we toggle modes. |
607 */ | 606 */ |
608 screen_config = XRRGetScreenInfo (SDL_Display, SDL_Root); | 607 screen_config = XRRGetScreenInfo(SDL_Display, SDL_Root); |
609 | 608 |
610 /* retrieve the list of resolution */ | 609 /* retrieve the list of resolution */ |
611 sizes = XRRConfigSizes (screen_config, &nsizes); | 610 sizes = XRRConfigSizes(screen_config, &nsizes); |
612 if (nsizes > 0) { | 611 if (nsizes > 0) { |
613 for (i = 0; i < nsizes; i++) { | 612 for (i = 0; i < nsizes; i++) { |
614 mode.w = sizes[i].width; | 613 mode.w = sizes[i].width; |
615 mode.h = sizes[i].height; | 614 mode.h = sizes[i].height; |
616 | 615 |
617 rates = XRRConfigRates (screen_config, i, &nrates); | 616 rates = XRRConfigRates(screen_config, i, &nrates); |
618 if (nrates == 0) { | 617 if (nrates == 0) { |
619 mode.refresh_rate = 0; | 618 mode.refresh_rate = 0; |
620 SDL_AddDisplayMode (0, &mode); | 619 SDL_AddDisplayMode(0, &mode); |
621 } else { | 620 } else { |
622 int j; | 621 int j; |
623 for (j = 0; j < nrates; ++j) { | 622 for (j = 0; j < nrates; ++j) { |
624 mode.refresh_rate = rates[j]; | 623 mode.refresh_rate = rates[j]; |
625 SDL_AddDisplayMode (0, &mode); | 624 SDL_AddDisplayMode(0, &mode); |
626 } | 625 } |
627 } | 626 } |
628 } | 627 } |
629 | 628 |
630 use_xrandr = xrandr_major * 100 + xrandr_minor; | 629 use_xrandr = xrandr_major * 100 + xrandr_minor; |
631 saved_size_id = | 630 saved_size_id = |
632 XRRConfigCurrentConfiguration (screen_config, | 631 XRRConfigCurrentConfiguration(screen_config, &saved_rotation); |
633 &saved_rotation); | |
634 } | 632 } |
635 } | 633 } |
636 #endif /* SDL_VIDEO_DRIVER_X11_XRANDR */ | 634 #endif /* SDL_VIDEO_DRIVER_X11_XRANDR */ |
637 | 635 |
638 #if SDL_VIDEO_DRIVER_X11_VIDMODE | 636 #if SDL_VIDEO_DRIVER_X11_VIDMODE |
639 /* XVidMode */ | 637 /* XVidMode */ |
640 if (!use_xrandr && | 638 if (!use_xrandr && |
641 CheckVidMode (this, &vm_major, &vm_minor) && | 639 CheckVidMode(this, &vm_major, &vm_minor) && |
642 SDL_NAME (XF86VidModeGetAllModeLines) (SDL_Display, SDL_Screen, | 640 SDL_NAME(XF86VidModeGetAllModeLines) (SDL_Display, SDL_Screen, |
643 &nmodes, &modes)) { | 641 &nmodes, &modes)) { |
644 #ifdef X11MODES_DEBUG | 642 #ifdef X11MODES_DEBUG |
645 printf ("VidMode modes: (unsorted)\n"); | 643 printf("VidMode modes: (unsorted)\n"); |
646 for (i = 0; i < nmodes; ++i) { | 644 for (i = 0; i < nmodes; ++i) { |
647 printf ("Mode %d: %d x %d @ %d\n", i, | 645 printf("Mode %d: %d x %d @ %d\n", i, |
648 modes[i]->hdisplay, modes[i]->vdisplay, | 646 modes[i]->hdisplay, modes[i]->vdisplay, |
649 vidmode_refreshrate (modes[i])); | 647 vidmode_refreshrate(modes[i])); |
650 } | 648 } |
651 #endif | 649 #endif |
652 for (i = 0; i < nmodes; ++i) { | 650 for (i = 0; i < nmodes; ++i) { |
653 mode.w = modes[i]->hdisplay; | 651 mode.w = modes[i]->hdisplay; |
654 mode.h = modes[i]->vdisplay; | 652 mode.h = modes[i]->vdisplay; |
655 mode.refresh_rate = vidmode_refreshrate (modes[i]); | 653 mode.refresh_rate = vidmode_refreshrate(modes[i]); |
656 SDL_AddDisplayMode (0, &mode); | 654 SDL_AddDisplayMode(0, &mode); |
657 } | 655 } |
658 XFree (modes); | 656 XFree(modes); |
659 | 657 |
660 use_vidmode = vm_major * 100 + vm_minor; | 658 use_vidmode = vm_major * 100 + vm_minor; |
661 save_mode (this); | 659 save_mode(this); |
662 } | 660 } |
663 #endif /* SDL_VIDEO_DRIVER_X11_VIDMODE */ | 661 #endif /* SDL_VIDEO_DRIVER_X11_VIDMODE */ |
664 | 662 |
665 #if SDL_VIDEO_DRIVER_X11_XME | 663 #if SDL_VIDEO_DRIVER_X11_XME |
666 /* XiG */ | 664 /* XiG */ |
667 modelist = NULL; | 665 modelist = NULL; |
668 /* first lets make sure we have the extension, and it's at least v2.0 */ | 666 /* first lets make sure we have the extension, and it's at least v2.0 */ |
669 if (CheckXME (this, &xme_major, &xme_minor) && xme_major >= 2 && (nummodes = XiGMiscQueryResolutions (SDL_Display, SDL_Screen, 0, /* view */ | 667 if (CheckXME(this, &xme_major, &xme_minor) && xme_major >= 2 && (nummodes = XiGMiscQueryResolutions(SDL_Display, SDL_Screen, 0, /* view */ |
670 &ractive, | 668 &ractive, |
671 &modelist)) | 669 &modelist)) |
672 > 1) { /* then we actually have some */ | 670 > 1) { /* then we actually have some */ |
673 /* We get the list already sorted in descending order. | 671 /* We get the list already sorted in descending order. |
674 We'll copy it in reverse order so SDL is happy */ | 672 We'll copy it in reverse order so SDL is happy */ |
675 #ifdef X11MODES_DEBUG | 673 #ifdef X11MODES_DEBUG |
676 fprintf (stderr, "XME: nummodes = %d, active mode = %d\n", | 674 fprintf(stderr, "XME: nummodes = %d, active mode = %d\n", |
677 nummodes, ractive); | 675 nummodes, ractive); |
678 #endif | 676 #endif |
679 mode.refresh_rate = 0; | 677 mode.refresh_rate = 0; |
680 for (i = 0; i < nummodes; ++i) { | 678 for (i = 0; i < nummodes; ++i) { |
681 #ifdef X11MODES_DEBUG | 679 #ifdef X11MODES_DEBUG |
682 fprintf (stderr, "XME: mode = %4d, w = %4d, h = %4d\n", | 680 fprintf(stderr, "XME: mode = %4d, w = %4d, h = %4d\n", |
683 i, modelist[i].width, modelist[i].height); | 681 i, modelist[i].width, modelist[i].height); |
684 #endif | 682 #endif |
685 mode.w = modelist[i].width; | 683 mode.w = modelist[i].width; |
686 mode.h = modelist[i].height; | 684 mode.h = modelist[i].height; |
687 SDL_AddDisplayMode (0, &mode); | 685 SDL_AddDisplayMode(0, &mode); |
688 } | 686 } |
689 | 687 |
690 use_xme = xme_major * 100 + xme_minor; | 688 use_xme = xme_major * 100 + xme_minor; |
691 saved_res = modelist[ractive]; /* save the current resolution */ | 689 saved_res = modelist[ractive]; /* save the current resolution */ |
692 } | 690 } |
693 if (modelist) { | 691 if (modelist) { |
694 XFree (modelist); | 692 XFree(modelist); |
695 } | 693 } |
696 #endif /* SDL_VIDEO_DRIVER_X11_XME */ | 694 #endif /* SDL_VIDEO_DRIVER_X11_XME */ |
697 | 695 |
698 #ifdef X11MODES_DEBUG | 696 #ifdef X11MODES_DEBUG |
699 if (use_xinerama) { | 697 if (use_xinerama) { |
700 printf ("Xinerama is enabled\n"); | 698 printf("Xinerama is enabled\n"); |
701 } | 699 } |
702 | 700 |
703 if (use_xrandr) { | 701 if (use_xrandr) { |
704 printf ("XRandR is enabled\n"); | 702 printf("XRandR is enabled\n"); |
705 } | 703 } |
706 | 704 |
707 if (use_vidmode) { | 705 if (use_vidmode) { |
708 printf ("VidMode is enabled\n"); | 706 printf("VidMode is enabled\n"); |
709 } | 707 } |
710 | 708 |
711 if (use_xme) { | 709 if (use_xme) { |
712 printf ("Xi Graphics XME fullscreen is enabled\n"); | 710 printf("Xi Graphics XME fullscreen is enabled\n"); |
713 } | 711 } |
714 #endif /* X11MODES_DEBUG */ | 712 #endif /* X11MODES_DEBUG */ |
715 | 713 |
716 return 0; | 714 return 0; |
717 } | 715 } |
718 | 716 |
719 void | 717 void |
720 X11_FreeVideoModes (_THIS) | 718 X11_FreeVideoModes(_THIS) |
721 { | 719 { |
722 #if SDL_VIDEO_DRIVER_X11_XRANDR | 720 #if SDL_VIDEO_DRIVER_X11_XRANDR |
723 /* Free the Xrandr screen configuration */ | 721 /* Free the Xrandr screen configuration */ |
724 if (screen_config) { | 722 if (screen_config) { |
725 XRRFreeScreenConfigInfo (screen_config); | 723 XRRFreeScreenConfigInfo(screen_config); |
726 screen_config = NULL; | 724 screen_config = NULL; |
727 } | 725 } |
728 #endif /* SDL_VIDEO_DRIVER_X11_XRANDR */ | 726 #endif /* SDL_VIDEO_DRIVER_X11_XRANDR */ |
729 } | 727 } |
730 | 728 |
731 int | 729 int |
732 X11_ResizeFullScreen (_THIS) | 730 X11_ResizeFullScreen(_THIS) |
733 { | 731 { |
734 int x = 0, y = 0; | 732 int x = 0, y = 0; |
735 int real_w, real_h; | 733 int real_w, real_h; |
736 int screen_w; | 734 int screen_w; |
737 int screen_h; | 735 int screen_h; |
738 | 736 |
739 screen_w = DisplayWidth (SDL_Display, SDL_Screen); | 737 screen_w = DisplayWidth(SDL_Display, SDL_Screen); |
740 screen_h = DisplayHeight (SDL_Display, SDL_Screen); | 738 screen_h = DisplayHeight(SDL_Display, SDL_Screen); |
741 | 739 |
742 #if SDL_VIDEO_DRIVER_X11_VIDMODE | 740 #if SDL_VIDEO_DRIVER_X11_VIDMODE |
743 if (use_xinerama && | 741 if (use_xinerama && |
744 window_w <= xinerama[this->current_display].width && | 742 window_w <= xinerama[this->current_display].width && |
745 window_h <= xinerama[this->current_display].height) { | 743 window_h <= xinerama[this->current_display].height) { |
747 y = xinerama[this->current_display].y_org; | 745 y = xinerama[this->current_display].y_org; |
748 } | 746 } |
749 #endif | 747 #endif |
750 if (currently_fullscreen) { | 748 if (currently_fullscreen) { |
751 /* Switch resolution and cover it with the FSwindow */ | 749 /* Switch resolution and cover it with the FSwindow */ |
752 move_cursor_to (this, x, y); | 750 move_cursor_to(this, x, y); |
753 set_best_resolution (this, window_w, window_h); | 751 set_best_resolution(this, window_w, window_h); |
754 move_cursor_to (this, x, y); | 752 move_cursor_to(this, x, y); |
755 get_real_resolution (this, &real_w, &real_h); | 753 get_real_resolution(this, &real_w, &real_h); |
756 if (window_w > real_w) { | 754 if (window_w > real_w) { |
757 real_w = MAX (real_w, screen_w); | 755 real_w = MAX(real_w, screen_w); |
758 } | 756 } |
759 if (window_h > real_h) { | 757 if (window_h > real_h) { |
760 real_h = MAX (real_h, screen_h); | 758 real_h = MAX(real_h, screen_h); |
761 } | 759 } |
762 XMoveResizeWindow (SDL_Display, FSwindow, x, y, real_w, real_h); | 760 XMoveResizeWindow(SDL_Display, FSwindow, x, y, real_w, real_h); |
763 move_cursor_to (this, real_w / 2, real_h / 2); | 761 move_cursor_to(this, real_w / 2, real_h / 2); |
764 | 762 |
765 /* Center and reparent the drawing window */ | 763 /* Center and reparent the drawing window */ |
766 x = (real_w - window_w) / 2; | 764 x = (real_w - window_w) / 2; |
767 y = (real_h - window_h) / 2; | 765 y = (real_h - window_h) / 2; |
768 XReparentWindow (SDL_Display, SDL_Window, FSwindow, x, y); | 766 XReparentWindow(SDL_Display, SDL_Window, FSwindow, x, y); |
769 /* FIXME: move the mouse to the old relative location */ | 767 /* FIXME: move the mouse to the old relative location */ |
770 XSync (SDL_Display, True); /* Flush spurious mode change events */ | 768 XSync(SDL_Display, True); /* Flush spurious mode change events */ |
771 } | 769 } |
772 return (1); | 770 return (1); |
773 } | 771 } |
774 | 772 |
775 void | 773 void |
776 X11_QueueEnterFullScreen (_THIS) | 774 X11_QueueEnterFullScreen(_THIS) |
777 { | 775 { |
778 switch_waiting = 0x01 | SDL_FULLSCREEN; | 776 switch_waiting = 0x01 | SDL_FULLSCREEN; |
779 switch_time = SDL_GetTicks () + 1500; | 777 switch_time = SDL_GetTicks() + 1500; |
780 #if 0 /* This causes a BadMatch error if the window is iconified (not needed) */ | 778 #if 0 /* This causes a BadMatch error if the window is iconified (not needed) */ |
781 XSetInputFocus (SDL_Display, WMwindow, RevertToNone, CurrentTime); | 779 XSetInputFocus(SDL_Display, WMwindow, RevertToNone, CurrentTime); |
782 #endif | 780 #endif |
783 } | 781 } |
784 | 782 |
785 int | 783 int |
786 X11_EnterFullScreen (_THIS) | 784 X11_EnterFullScreen(_THIS) |
787 { | 785 { |
788 int okay; | 786 int okay; |
789 #if 0 | 787 #if 0 |
790 Window tmpwin, *windows; | 788 Window tmpwin, *windows; |
791 int i, nwindows; | 789 int i, nwindows; |
799 if (currently_fullscreen) { | 797 if (currently_fullscreen) { |
800 return (okay); | 798 return (okay); |
801 } | 799 } |
802 | 800 |
803 /* Ungrab the input so that we can move the mouse around */ | 801 /* Ungrab the input so that we can move the mouse around */ |
804 X11_GrabInputNoLock (this, SDL_GRAB_OFF); | 802 X11_GrabInputNoLock(this, SDL_GRAB_OFF); |
805 | 803 |
806 #if SDL_VIDEO_DRIVER_X11_VIDMODE | 804 #if SDL_VIDEO_DRIVER_X11_VIDMODE |
807 if (use_xinerama && | 805 if (use_xinerama && |
808 window_w <= xinerama[this->current_display].width && | 806 window_w <= xinerama[this->current_display].width && |
809 window_h <= xinerama[this->current_display].height) { | 807 window_h <= xinerama[this->current_display].height) { |
810 x = xinerama[this->current_display].x_org; | 808 x = xinerama[this->current_display].x_org; |
811 y = xinerama[this->current_display].y_org; | 809 y = xinerama[this->current_display].y_org; |
812 } | 810 } |
813 #endif | 811 #endif |
814 /* Map the fullscreen window to blank the screen */ | 812 /* Map the fullscreen window to blank the screen */ |
815 screen_w = DisplayWidth (SDL_Display, SDL_Screen); | 813 screen_w = DisplayWidth(SDL_Display, SDL_Screen); |
816 screen_h = DisplayHeight (SDL_Display, SDL_Screen); | 814 screen_h = DisplayHeight(SDL_Display, SDL_Screen); |
817 get_real_resolution (this, &real_w, &real_h); | 815 get_real_resolution(this, &real_w, &real_h); |
818 if (window_w > real_w) { | 816 if (window_w > real_w) { |
819 real_w = MAX (real_w, screen_w); | 817 real_w = MAX(real_w, screen_w); |
820 } | 818 } |
821 if (window_h > real_h) { | 819 if (window_h > real_h) { |
822 real_h = MAX (real_h, screen_h); | 820 real_h = MAX(real_h, screen_h); |
823 } | 821 } |
824 XMoveResizeWindow (SDL_Display, FSwindow, x, y, real_w, real_h); | 822 XMoveResizeWindow(SDL_Display, FSwindow, x, y, real_w, real_h); |
825 XMapRaised (SDL_Display, FSwindow); | 823 XMapRaised(SDL_Display, FSwindow); |
826 X11_WaitMapped (this, FSwindow); | 824 X11_WaitMapped(this, FSwindow); |
827 | 825 |
828 #if 0 /* This seems to break WindowMaker in focus-follows-mouse mode */ | 826 #if 0 /* This seems to break WindowMaker in focus-follows-mouse mode */ |
829 /* Make sure we got to the top of the window stack */ | 827 /* Make sure we got to the top of the window stack */ |
830 if (XQueryTree (SDL_Display, SDL_Root, &tmpwin, &tmpwin, | 828 if (XQueryTree(SDL_Display, SDL_Root, &tmpwin, &tmpwin, |
831 &windows, &nwindows) && windows) { | 829 &windows, &nwindows) && windows) { |
832 /* If not, try to put us there - if fail... oh well */ | 830 /* If not, try to put us there - if fail... oh well */ |
833 if (windows[nwindows - 1] != FSwindow) { | 831 if (windows[nwindows - 1] != FSwindow) { |
834 tmpwin = windows[nwindows - 1]; | 832 tmpwin = windows[nwindows - 1]; |
835 for (i = 0; i < nwindows; ++i) { | 833 for (i = 0; i < nwindows; ++i) { |
836 if (windows[i] == FSwindow) { | 834 if (windows[i] == FSwindow) { |
837 SDL_memcpy (&windows[i], &windows[i + 1], | 835 SDL_memcpy(&windows[i], &windows[i + 1], |
838 (nwindows - i - 1) * sizeof (windows[i])); | 836 (nwindows - i - 1) * sizeof(windows[i])); |
839 break; | 837 break; |
840 } | 838 } |
841 } | 839 } |
842 windows[nwindows - 1] = FSwindow; | 840 windows[nwindows - 1] = FSwindow; |
843 XRestackWindows (SDL_Display, windows, nwindows); | 841 XRestackWindows(SDL_Display, windows, nwindows); |
844 XSync (SDL_Display, False); | 842 XSync(SDL_Display, False); |
845 } | 843 } |
846 XFree (windows); | 844 XFree(windows); |
847 } | 845 } |
848 #else | 846 #else |
849 XRaiseWindow (SDL_Display, FSwindow); | 847 XRaiseWindow(SDL_Display, FSwindow); |
850 #endif | 848 #endif |
851 | 849 |
852 #if SDL_VIDEO_DRIVER_X11_VIDMODE | 850 #if SDL_VIDEO_DRIVER_X11_VIDMODE |
853 /* Save the current video mode */ | 851 /* Save the current video mode */ |
854 if (use_vidmode) { | 852 if (use_vidmode) { |
855 SDL_NAME (XF86VidModeLockModeSwitch) (SDL_Display, SDL_Screen, True); | 853 SDL_NAME(XF86VidModeLockModeSwitch) (SDL_Display, SDL_Screen, True); |
856 } | 854 } |
857 #endif | 855 #endif |
858 currently_fullscreen = 1; | 856 currently_fullscreen = 1; |
859 | 857 |
860 /* Set the new resolution */ | 858 /* Set the new resolution */ |
861 okay = X11_ResizeFullScreen (this); | 859 okay = X11_ResizeFullScreen(this); |
862 if (!okay) { | 860 if (!okay) { |
863 X11_LeaveFullScreen (this); | 861 X11_LeaveFullScreen(this); |
864 } | 862 } |
865 /* Set the colormap */ | 863 /* Set the colormap */ |
866 if (SDL_XColorMap) { | 864 if (SDL_XColorMap) { |
867 XInstallColormap (SDL_Display, SDL_XColorMap); | 865 XInstallColormap(SDL_Display, SDL_XColorMap); |
868 } | 866 } |
869 if (okay) { | 867 if (okay) { |
870 X11_GrabInputNoLock (this, | 868 X11_GrabInputNoLock(this, |
871 SDL_CurrentWindow. | 869 SDL_CurrentWindow. |
872 input_grab | SDL_GRAB_FULLSCREEN); | 870 input_grab | SDL_GRAB_FULLSCREEN); |
873 } | 871 } |
874 | 872 |
875 /* We may need to refresh the screen at this point (no backing store) | 873 /* We may need to refresh the screen at this point (no backing store) |
876 We also don't get an event, which is why we explicitly refresh. */ | 874 We also don't get an event, which is why we explicitly refresh. */ |
877 if (SDL_VideoSurface) { | 875 if (SDL_VideoSurface) { |
878 if (SDL_VideoSurface->flags & SDL_INTERNALOPENGL) { | 876 if (SDL_VideoSurface->flags & SDL_INTERNALOPENGL) { |
879 SDL_PrivateExpose (); | 877 SDL_PrivateExpose(); |
880 } else { | 878 } else { |
881 X11_RefreshDisplay (this); | 879 X11_RefreshDisplay(this); |
882 } | 880 } |
883 } | 881 } |
884 | 882 |
885 return (okay); | 883 return (okay); |
886 } | 884 } |
887 | 885 |
888 int | 886 int |
889 X11_LeaveFullScreen (_THIS) | 887 X11_LeaveFullScreen(_THIS) |
890 { | 888 { |
891 if (currently_fullscreen) { | 889 if (currently_fullscreen) { |
892 XReparentWindow (SDL_Display, SDL_Window, WMwindow, 0, 0); | 890 XReparentWindow(SDL_Display, SDL_Window, WMwindow, 0, 0); |
893 #if SDL_VIDEO_DRIVER_X11_VIDMODE | 891 #if SDL_VIDEO_DRIVER_X11_VIDMODE |
894 if (use_vidmode) { | 892 if (use_vidmode) { |
895 restore_mode (this); | 893 restore_mode(this); |
896 SDL_NAME (XF86VidModeLockModeSwitch) (SDL_Display, SDL_Screen, | 894 SDL_NAME(XF86VidModeLockModeSwitch) (SDL_Display, SDL_Screen, |
897 False); | 895 False); |
898 } | 896 } |
899 #endif | 897 #endif |
900 | 898 |
901 #if SDL_VIDEO_DRIVER_X11_XME | 899 #if SDL_VIDEO_DRIVER_X11_XME |
902 if (use_xme) { | 900 if (use_xme) { |
903 int rw, rh; | 901 int rw, rh; |
904 | 902 |
905 /* check current mode so we can avoid uneccessary mode changes */ | 903 /* check current mode so we can avoid uneccessary mode changes */ |
906 get_real_resolution (this, &rw, &rh); | 904 get_real_resolution(this, &rw, &rh); |
907 | 905 |
908 if (rw != saved_res.width || rh != saved_res.height) { | 906 if (rw != saved_res.width || rh != saved_res.height) { |
909 XiGMiscChangeResolution (SDL_Display, SDL_Screen, 0, /* view */ | 907 XiGMiscChangeResolution(SDL_Display, SDL_Screen, 0, /* view */ |
910 saved_res.width, | 908 saved_res.width, saved_res.height, 0); |
911 saved_res.height, 0); | 909 XSync(SDL_Display, False); |
912 XSync (SDL_Display, False); | |
913 } | 910 } |
914 } | 911 } |
915 #endif | 912 #endif |
916 | 913 |
917 #if SDL_VIDEO_DRIVER_X11_XRANDR | 914 #if SDL_VIDEO_DRIVER_X11_XRANDR |
918 if (use_xrandr) { | 915 if (use_xrandr) { |
919 XRRSetScreenConfig (SDL_Display, screen_config, SDL_Root, | 916 XRRSetScreenConfig(SDL_Display, screen_config, SDL_Root, |
920 saved_size_id, saved_rotation, CurrentTime); | 917 saved_size_id, saved_rotation, CurrentTime); |
921 } | 918 } |
922 #endif | 919 #endif |
923 | 920 |
924 XUnmapWindow (SDL_Display, FSwindow); | 921 XUnmapWindow(SDL_Display, FSwindow); |
925 X11_WaitUnmapped (this, FSwindow); | 922 X11_WaitUnmapped(this, FSwindow); |
926 XSync (SDL_Display, True); /* Flush spurious mode change events */ | 923 XSync(SDL_Display, True); /* Flush spurious mode change events */ |
927 currently_fullscreen = 0; | 924 currently_fullscreen = 0; |
928 } | 925 } |
929 /* If we get popped out of fullscreen mode for some reason, input_grab | 926 /* If we get popped out of fullscreen mode for some reason, input_grab |
930 will still have the SDL_GRAB_FULLSCREEN flag set, since this is only | 927 will still have the SDL_GRAB_FULLSCREEN flag set, since this is only |
931 temporary. In this case, release the grab unless the input has been | 928 temporary. In this case, release the grab unless the input has been |
932 explicitly grabbed. | 929 explicitly grabbed. |
933 */ | 930 */ |
934 X11_GrabInputNoLock (this, | 931 X11_GrabInputNoLock(this, |
935 SDL_CurrentWindow.input_grab & ~SDL_GRAB_FULLSCREEN); | 932 SDL_CurrentWindow.input_grab & ~SDL_GRAB_FULLSCREEN); |
936 | 933 |
937 /* We may need to refresh the screen at this point (no backing store) | 934 /* We may need to refresh the screen at this point (no backing store) |
938 We also don't get an event, which is why we explicitly refresh. */ | 935 We also don't get an event, which is why we explicitly refresh. */ |
939 if (SDL_VideoSurface) { | 936 if (SDL_VideoSurface) { |
940 if (SDL_VideoSurface->flags & SDL_INTERNALOPENGL) { | 937 if (SDL_VideoSurface->flags & SDL_INTERNALOPENGL) { |
941 SDL_PrivateExpose (); | 938 SDL_PrivateExpose(); |
942 } else { | 939 } else { |
943 X11_RefreshDisplay (this); | 940 X11_RefreshDisplay(this); |
944 } | 941 } |
945 } | 942 } |
946 | 943 |
947 return (0); | 944 return (0); |
948 } | 945 } |
949 | 946 |
950 Uint32 | 947 Uint32 |
951 X11_VisualToFormat (const Visual * visual, int depth, int bpp) | 948 X11_VisualToFormat(const Visual * visual, int depth, int bpp) |
952 { | 949 { |
953 Uint32 Rmask = visual->red_mask; | 950 Uint32 Rmask = visual->red_mask; |
954 Uint32 Gmask = visual->green_mask; | 951 Uint32 Gmask = visual->green_mask; |
955 Uint32 Bmask = visual->blue_mask; | 952 Uint32 Bmask = visual->blue_mask; |
956 Uint32 Amask; | 953 Uint32 Amask; |
958 if (depth == 32) { | 955 if (depth == 32) { |
959 Amask = (0xFFFFFFFF & ~(Rmask | Gmask | Bmask)); | 956 Amask = (0xFFFFFFFF & ~(Rmask | Gmask | Bmask)); |
960 } else { | 957 } else { |
961 Amask = 0; | 958 Amask = 0; |
962 } | 959 } |
963 return (SDL_MasksToPixelFormatEnum (bpp, Rmask, Gmask, Bmask, Amask)); | 960 return (SDL_MasksToPixelFormatEnum(bpp, Rmask, Gmask, Bmask, Amask)); |
964 } | 961 } |
965 | 962 |
966 /* vi: set ts=4 sw=4 expandtab: */ | 963 /* vi: set ts=4 sw=4 expandtab: */ |