author | Sam Lantinga <slouken@libsdl.org> |
Wed, 28 Jul 2010 00:54:23 -0700 | |
changeset 4618 | 844b5ef4b149 |
parent 4523 | 657bea918a30 |
parent 4593 | 3892fe2f6537 |
child 5149 | be02be2ea897 |
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 |
3697 | 3 |
Copyright (C) 1997-2010 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 |
|
4519 | 26 |
/*#define X11MODES_DEBUG*/ |
1950
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
27 |
|
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
28 |
static int |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
29 |
get_visualinfo(Display * display, int screen, XVisualInfo * vinfo) |
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 |
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
|
32 |
int depth; |
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 |
/* Look for an exact visual, if requested */ |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
35 |
if (visual_id) { |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
36 |
XVisualInfo *vi, template; |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
37 |
int nvis; |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
38 |
|
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
39 |
SDL_zero(template); |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
40 |
template.visualid = SDL_strtol(visual_id, NULL, 0); |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
41 |
vi = XGetVisualInfo(display, VisualIDMask, &template, &nvis); |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
42 |
if (vi) { |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
43 |
*vinfo = *vi; |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
44 |
XFree(vi); |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
45 |
return 0; |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
46 |
} |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
47 |
} |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
48 |
|
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
49 |
depth = DefaultDepth(display, screen); |
2963
ee331407574f
Don't use DirectColor visuals until we implement DirectColor colormap support
Sam Lantinga <slouken@libsdl.org>
parents:
2954
diff
changeset
|
50 |
if ((X11_UseDirectColorVisuals() && |
1950
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
51 |
XMatchVisualInfo(display, screen, depth, DirectColor, vinfo)) || |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
52 |
XMatchVisualInfo(display, screen, depth, TrueColor, vinfo) || |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
53 |
XMatchVisualInfo(display, screen, depth, PseudoColor, vinfo) || |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
54 |
XMatchVisualInfo(display, screen, depth, StaticColor, vinfo)) { |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
55 |
return 0; |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
56 |
} |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
57 |
return -1; |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
58 |
} |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
59 |
|
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
|
60 |
static Uint32 |
2874 | 61 |
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
|
62 |
{ |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
63 |
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
|
64 |
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
|
65 |
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
|
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 |
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
|
68 |
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
|
69 |
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
|
70 |
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
|
71 |
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
|
72 |
} 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
|
73 |
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
|
74 |
} |
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 |
|
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 |
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
|
77 |
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
|
78 |
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
|
79 |
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
|
80 |
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
|
81 |
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
|
82 |
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
|
83 |
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
|
84 |
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
|
85 |
} |
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 |
} |
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 |
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
|
88 |
} |
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 |
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
|
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 |
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
|
95 |
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
|
96 |
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
|
97 |
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
|
98 |
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
|
99 |
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
|
100 |
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
|
101 |
} 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
|
102 |
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
|
103 |
} |
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 |
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
|
105 |
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
|
106 |
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
|
107 |
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
|
108 |
} 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
|
109 |
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
|
110 |
} |
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 |
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
|
112 |
} |
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 |
} |
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 |
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
|
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 |
|
3521
76f9b76ddf0f
Don't add any renderers if you can't add any displays
Sam Lantinga <slouken@libsdl.org>
parents:
3500
diff
changeset
|
118 |
int |
1950
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
119 |
X11_InitModes(_THIS) |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
120 |
{ |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
121 |
SDL_VideoData *data = (SDL_VideoData *) _this->driverdata; |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
122 |
int screen; |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
123 |
|
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
124 |
for (screen = 0; screen < ScreenCount(data->display); ++screen) { |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
125 |
XVisualInfo vinfo; |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
126 |
SDL_VideoDisplay display; |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
127 |
SDL_DisplayData *displaydata; |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
128 |
SDL_DisplayMode mode; |
2916
ffdd533f7add
Fixed pitch alignment problem causing MITSHM error on 16-bit displays
Sam Lantinga <slouken@libsdl.org>
parents:
2906
diff
changeset
|
129 |
XPixmapFormatValues *pixmapFormats; |
ffdd533f7add
Fixed pitch alignment problem causing MITSHM error on 16-bit displays
Sam Lantinga <slouken@libsdl.org>
parents:
2906
diff
changeset
|
130 |
int i, n; |
1950
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
131 |
|
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
132 |
if (get_visualinfo(data->display, screen, &vinfo) < 0) { |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
133 |
continue; |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
134 |
} |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
135 |
|
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
|
136 |
mode.format = X11_GetPixelFormatFromVisualInfo(data->display, &vinfo); |
1950
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
137 |
mode.w = DisplayWidth(data->display, screen); |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
138 |
mode.h = DisplayHeight(data->display, screen); |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
139 |
mode.refresh_rate = 0; |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
140 |
mode.driverdata = NULL; |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
141 |
|
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
142 |
displaydata = (SDL_DisplayData *) SDL_malloc(sizeof(*displaydata)); |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
143 |
if (!displaydata) { |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
144 |
continue; |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
145 |
} |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
146 |
displaydata->screen = screen; |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
147 |
displaydata->visual = vinfo.visual; |
1951
7177581dc9fa
Initial work on X11 window code in.
Sam Lantinga <slouken@libsdl.org>
parents:
1950
diff
changeset
|
148 |
displaydata->depth = vinfo.depth; |
1950
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
149 |
|
2920 | 150 |
displaydata->scanline_pad = SDL_BYTESPERPIXEL(mode.format) * 8; |
2916
ffdd533f7add
Fixed pitch alignment problem causing MITSHM error on 16-bit displays
Sam Lantinga <slouken@libsdl.org>
parents:
2906
diff
changeset
|
151 |
pixmapFormats = XListPixmapFormats(data->display, &n); |
ffdd533f7add
Fixed pitch alignment problem causing MITSHM error on 16-bit displays
Sam Lantinga <slouken@libsdl.org>
parents:
2906
diff
changeset
|
152 |
if (pixmapFormats) { |
ffdd533f7add
Fixed pitch alignment problem causing MITSHM error on 16-bit displays
Sam Lantinga <slouken@libsdl.org>
parents:
2906
diff
changeset
|
153 |
for (i = 0; i < n; ++i) { |
ffdd533f7add
Fixed pitch alignment problem causing MITSHM error on 16-bit displays
Sam Lantinga <slouken@libsdl.org>
parents:
2906
diff
changeset
|
154 |
if (pixmapFormats[i].depth == displaydata->depth) { |
ffdd533f7add
Fixed pitch alignment problem causing MITSHM error on 16-bit displays
Sam Lantinga <slouken@libsdl.org>
parents:
2906
diff
changeset
|
155 |
displaydata->scanline_pad = pixmapFormats[i].scanline_pad; |
ffdd533f7add
Fixed pitch alignment problem causing MITSHM error on 16-bit displays
Sam Lantinga <slouken@libsdl.org>
parents:
2906
diff
changeset
|
156 |
break; |
ffdd533f7add
Fixed pitch alignment problem causing MITSHM error on 16-bit displays
Sam Lantinga <slouken@libsdl.org>
parents:
2906
diff
changeset
|
157 |
} |
ffdd533f7add
Fixed pitch alignment problem causing MITSHM error on 16-bit displays
Sam Lantinga <slouken@libsdl.org>
parents:
2906
diff
changeset
|
158 |
} |
ffdd533f7add
Fixed pitch alignment problem causing MITSHM error on 16-bit displays
Sam Lantinga <slouken@libsdl.org>
parents:
2906
diff
changeset
|
159 |
XFree(pixmapFormats); |
ffdd533f7add
Fixed pitch alignment problem causing MITSHM error on 16-bit displays
Sam Lantinga <slouken@libsdl.org>
parents:
2906
diff
changeset
|
160 |
} |
ffdd533f7add
Fixed pitch alignment problem causing MITSHM error on 16-bit displays
Sam Lantinga <slouken@libsdl.org>
parents:
2906
diff
changeset
|
161 |
|
1950
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
162 |
SDL_zero(display); |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
163 |
display.desktop_mode = mode; |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
164 |
display.current_mode = mode; |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
165 |
display.driverdata = displaydata; |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
166 |
SDL_AddVideoDisplay(&display); |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
167 |
} |
3521
76f9b76ddf0f
Don't add any renderers if you can't add any displays
Sam Lantinga <slouken@libsdl.org>
parents:
3500
diff
changeset
|
168 |
if (_this->num_displays == 0) { |
76f9b76ddf0f
Don't add any renderers if you can't add any displays
Sam Lantinga <slouken@libsdl.org>
parents:
3500
diff
changeset
|
169 |
SDL_SetError("No available displays"); |
76f9b76ddf0f
Don't add any renderers if you can't add any displays
Sam Lantinga <slouken@libsdl.org>
parents:
3500
diff
changeset
|
170 |
return -1; |
76f9b76ddf0f
Don't add any renderers if you can't add any displays
Sam Lantinga <slouken@libsdl.org>
parents:
3500
diff
changeset
|
171 |
} |
76f9b76ddf0f
Don't add any renderers if you can't add any displays
Sam Lantinga <slouken@libsdl.org>
parents:
3500
diff
changeset
|
172 |
return 0; |
1950
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
173 |
} |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
174 |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
175 |
/* Global for the error handler */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
176 |
int vm_event, vm_error = -1; |
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 |
#if SDL_VIDEO_DRIVER_X11_XINERAMA |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
179 |
static SDL_bool |
2874 | 180 |
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
|
181 |
{ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
182 |
const char *env; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
183 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
184 |
/* Default the extension not available */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
185 |
*major = *minor = 0; |
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 |
/* Allow environment override */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
188 |
env = getenv("SDL_VIDEO_X11_XINERAMA"); |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
189 |
if (env && !SDL_atoi(env)) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
190 |
return SDL_FALSE; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
191 |
} |
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 |
/* Query the extension version */ |
2874 | 194 |
if (!SDL_NAME(XineramaQueryExtension) (display, major, minor) || |
195 |
!SDL_NAME(XineramaIsActive) (display)) { |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
196 |
return SDL_FALSE; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
197 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
198 |
return SDL_TRUE; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
199 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
200 |
#endif /* SDL_VIDEO_DRIVER_X11_XINERAMA */ |
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_VIDEO_DRIVER_X11_XRANDR |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
203 |
static SDL_bool |
2874 | 204 |
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
|
205 |
{ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
206 |
const char *env; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
207 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
208 |
/* Default the extension not available */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
209 |
*major = *minor = 0; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
210 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
211 |
/* Allow environment override */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
212 |
env = getenv("SDL_VIDEO_X11_XRANDR"); |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
213 |
if (env && !SDL_atoi(env)) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
214 |
return SDL_FALSE; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
215 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
216 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
217 |
if (!SDL_X11_HAVE_XRANDR) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
218 |
return SDL_FALSE; |
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 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
221 |
/* Query the extension version */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
222 |
if (!XRRQueryVersion(display, major, minor)) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
223 |
return SDL_FALSE; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
224 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
225 |
return SDL_TRUE; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
226 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
227 |
#endif /* SDL_VIDEO_DRIVER_X11_XRANDR */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
228 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
229 |
#if SDL_VIDEO_DRIVER_X11_VIDMODE |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
230 |
static SDL_bool |
2874 | 231 |
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
|
232 |
{ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
233 |
const char *env; |
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 |
/* Default the extension not available */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
236 |
*major = *minor = 0; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
237 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
238 |
/* Allow environment override */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
239 |
env = getenv("SDL_VIDEO_X11_VIDMODE"); |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
240 |
if (env && !SDL_atoi(env)) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
241 |
return SDL_FALSE; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
242 |
} |
2874 | 243 |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
244 |
/* Query the extension version */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
245 |
vm_error = -1; |
2874 | 246 |
if (!SDL_NAME(XF86VidModeQueryExtension) (display, &vm_event, &vm_error) |
247 |
|| !SDL_NAME(XF86VidModeQueryVersion) (display, major, minor)) { |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
248 |
return SDL_FALSE; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
249 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
250 |
return SDL_TRUE; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
251 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
252 |
|
4518
a956a315fe67
Lots of prep for the "real" way to support fullscreen mode on modern window managers.
Sam Lantinga <slouken@libsdl.org>
parents:
3697
diff
changeset
|
253 |
static |
2874 | 254 |
Bool SDL_NAME(XF86VidModeGetModeInfo) (Display * dpy, int scr, |
255 |
SDL_NAME(XF86VidModeModeInfo) * info) |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
256 |
{ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
257 |
Bool retval; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
258 |
int dotclock; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
259 |
SDL_NAME(XF86VidModeModeLine) l; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
260 |
SDL_zerop(info); |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
261 |
SDL_zero(l); |
2874 | 262 |
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
|
263 |
info->dotclock = dotclock; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
264 |
info->hdisplay = l.hdisplay; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
265 |
info->hsyncstart = l.hsyncstart; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
266 |
info->hsyncend = l.hsyncend; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
267 |
info->htotal = l.htotal; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
268 |
info->hskew = l.hskew; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
269 |
info->vdisplay = l.vdisplay; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
270 |
info->vsyncstart = l.vsyncstart; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
271 |
info->vsyncend = l.vsyncend; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
272 |
info->vtotal = l.vtotal; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
273 |
info->flags = l.flags; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
274 |
info->privsize = l.privsize; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
275 |
info->private = l.private; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
276 |
return retval; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
277 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
278 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
279 |
static int |
2874 | 280 |
calculate_rate(SDL_NAME(XF86VidModeModeInfo) * info) |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
281 |
{ |
2874 | 282 |
return (info->htotal |
283 |
&& info->vtotal) ? (1000 * info->dotclock / (info->htotal * |
|
284 |
info->vtotal)) : 0; |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
285 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
286 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
287 |
static void |
2874 | 288 |
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
|
289 |
{ |
2874 | 290 |
SDL_NAME(XF86VidModeGetModeInfo) (display, data->screen, |
291 |
&data->saved_mode); |
|
292 |
SDL_NAME(XF86VidModeGetViewPort) (display, data->screen, |
|
293 |
&data->saved_view.x, |
|
294 |
&data->saved_view.y); |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
295 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
296 |
|
4518
a956a315fe67
Lots of prep for the "real" way to support fullscreen mode on modern window managers.
Sam Lantinga <slouken@libsdl.org>
parents:
3697
diff
changeset
|
297 |
/* |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
298 |
static void |
2874 | 299 |
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
|
300 |
{ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
301 |
SDL_NAME(XF86VidModeModeInfo) mode; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
302 |
|
2874 | 303 |
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
|
304 |
if (SDL_memcmp(&mode, &data->saved_mode, sizeof(mode)) != 0) { |
2874 | 305 |
SDL_NAME(XF86VidModeSwitchToMode) (display, data->screen, |
306 |
&data->saved_mode); |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
307 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
308 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
309 |
if ((data->saved_view.x != 0) || (data->saved_view.y != 0)) { |
2874 | 310 |
SDL_NAME(XF86VidModeSetViewPort) (display, data->screen, |
311 |
data->saved_view.x, |
|
312 |
data->saved_view.y); |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
313 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
314 |
} |
4518
a956a315fe67
Lots of prep for the "real" way to support fullscreen mode on modern window managers.
Sam Lantinga <slouken@libsdl.org>
parents:
3697
diff
changeset
|
315 |
*/ |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
316 |
#endif /* SDL_VIDEO_DRIVER_X11_VIDMODE */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
317 |
|
1950
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
318 |
void |
3500
4b594623401b
Work in progress on multi-display support:
Sam Lantinga <slouken@libsdl.org>
parents:
2963
diff
changeset
|
319 |
X11_GetDisplayModes(_THIS, SDL_VideoDisplay * sdl_display) |
1950
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
320 |
{ |
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
|
321 |
Display *display = ((SDL_VideoData *) _this->driverdata)->display; |
3500
4b594623401b
Work in progress on multi-display support:
Sam Lantinga <slouken@libsdl.org>
parents:
2963
diff
changeset
|
322 |
SDL_DisplayData *data = (SDL_DisplayData *) sdl_display->driverdata; |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
323 |
#if SDL_VIDEO_DRIVER_X11_XINERAMA |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
324 |
int xinerama_major, xinerama_minor; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
325 |
int screens; |
2874 | 326 |
SDL_NAME(XineramaScreenInfo) * xinerama; |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
327 |
#endif |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
328 |
#if SDL_VIDEO_DRIVER_X11_XRANDR |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
329 |
int xrandr_major, xrandr_minor; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
330 |
int nsizes, nrates; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
331 |
XRRScreenSize *sizes; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
332 |
short *rates; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
333 |
#endif |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
334 |
#if SDL_VIDEO_DRIVER_X11_VIDMODE |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
335 |
int vm_major, vm_minor; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
336 |
int nmodes; |
2874 | 337 |
SDL_NAME(XF86VidModeModeInfo) ** modes; |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
338 |
#endif |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
339 |
int screen_w; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
340 |
int screen_h; |
1950
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
341 |
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
|
342 |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
343 |
/* 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
|
344 |
* 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
|
345 |
* 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
|
346 |
* 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
|
347 |
* (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
|
348 |
*/ |
3500
4b594623401b
Work in progress on multi-display support:
Sam Lantinga <slouken@libsdl.org>
parents:
2963
diff
changeset
|
349 |
mode.format = sdl_display->current_mode.format; |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
350 |
mode.driverdata = NULL; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
351 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
352 |
data->use_xinerama = 0; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
353 |
data->use_xrandr = 0; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
354 |
data->use_vidmode = 0; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
355 |
screen_w = DisplayWidth(display, data->screen); |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
356 |
screen_h = DisplayHeight(display, data->screen); |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
357 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
358 |
#if SDL_VIDEO_DRIVER_X11_XINERAMA |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
359 |
/* Query Xinerama extention */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
360 |
if (CheckXinerama(display, &xinerama_major, &xinerama_minor)) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
361 |
#ifdef X11MODES_DEBUG |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
362 |
printf("X11 detected Xinerama:\n"); |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
363 |
#endif |
2874 | 364 |
xinerama = SDL_NAME(XineramaQueryScreens) (display, &screens); |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
365 |
if (xinerama) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
366 |
int i; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
367 |
for (i = 0; i < screens; i++) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
368 |
#ifdef X11MODES_DEBUG |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
369 |
printf("xinerama %d: %dx%d+%d+%d\n", |
2874 | 370 |
xinerama[i].screen_number, |
371 |
xinerama[i].width, xinerama[i].height, |
|
372 |
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
|
373 |
#endif |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
374 |
if (xinerama[i].screen_number == data->screen) { |
2874 | 375 |
data->use_xinerama = |
376 |
xinerama_major * 100 + xinerama_minor; |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
377 |
data->xinerama_info = xinerama[i]; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
378 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
379 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
380 |
XFree(xinerama); |
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 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
383 |
if (data->use_xinerama) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
384 |
/* Add the full xinerama mode */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
385 |
if (screen_w > data->xinerama_info.width || |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
386 |
screen_h > data->xinerama_info.height) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
387 |
mode.w = screen_w; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
388 |
mode.h = screen_h; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
389 |
mode.refresh_rate = 0; |
3500
4b594623401b
Work in progress on multi-display support:
Sam Lantinga <slouken@libsdl.org>
parents:
2963
diff
changeset
|
390 |
SDL_AddDisplayMode(sdl_display, &mode); |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
391 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
392 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
393 |
/* Add the head xinerama mode */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
394 |
mode.w = data->xinerama_info.width; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
395 |
mode.h = data->xinerama_info.height; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
396 |
mode.refresh_rate = 0; |
3500
4b594623401b
Work in progress on multi-display support:
Sam Lantinga <slouken@libsdl.org>
parents:
2963
diff
changeset
|
397 |
SDL_AddDisplayMode(sdl_display, &mode); |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
398 |
} |
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 |
#endif /* SDL_VIDEO_DRIVER_X11_XINERAMA */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
401 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
402 |
#if SDL_VIDEO_DRIVER_X11_XRANDR |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
403 |
/* XRandR */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
404 |
/* require at least XRandR v1.0 (arbitrary) */ |
2874 | 405 |
if (CheckXRandR(display, &xrandr_major, &xrandr_minor) |
406 |
&& xrandr_major >= 1) { |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
407 |
#ifdef X11MODES_DEBUG |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
408 |
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
|
409 |
xrandr_major, xrandr_minor); |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
410 |
#endif |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
411 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
412 |
/* 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
|
413 |
each time we toggle modes. |
2874 | 414 |
*/ |
415 |
data->screen_config = |
|
416 |
XRRGetScreenInfo(display, RootWindow(display, data->screen)); |
|
2873
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 |
/* retrieve the list of resolution */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
419 |
sizes = XRRConfigSizes(data->screen_config, &nsizes); |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
420 |
if (nsizes > 0) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
421 |
int i, j; |
2874 | 422 |
for (i = 0; i < nsizes; i++) { |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
423 |
mode.w = sizes[i].width; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
424 |
mode.h = sizes[i].height; |
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 |
rates = XRRConfigRates(data->screen_config, i, &nrates); |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
427 |
for (j = 0; j < nrates; ++j) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
428 |
mode.refresh_rate = rates[j]; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
429 |
#ifdef X11MODES_DEBUG |
2874 | 430 |
fprintf(stderr, |
431 |
"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
|
432 |
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
|
433 |
#endif |
3500
4b594623401b
Work in progress on multi-display support:
Sam Lantinga <slouken@libsdl.org>
parents:
2963
diff
changeset
|
434 |
SDL_AddDisplayMode(sdl_display, &mode); |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
435 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
436 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
437 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
438 |
data->use_xrandr = xrandr_major * 100 + xrandr_minor; |
2874 | 439 |
data->saved_size = |
440 |
XRRConfigCurrentConfiguration(data->screen_config, |
|
441 |
&data->saved_rotation); |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
442 |
data->saved_rate = XRRConfigCurrentRate(data->screen_config); |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
443 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
444 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
445 |
#endif /* SDL_VIDEO_DRIVER_X11_XRANDR */ |
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 |
#if SDL_VIDEO_DRIVER_X11_VIDMODE |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
448 |
/* XVidMode */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
449 |
if (!data->use_xrandr && |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
450 |
#if SDL_VIDEO_DRIVER_X11_XINERAMA |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
451 |
(!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
|
452 |
#endif |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
453 |
CheckVidMode(display, &vm_major, &vm_minor) && |
2874 | 454 |
SDL_NAME(XF86VidModeGetAllModeLines) (display, data->screen, &nmodes, |
455 |
&modes)) { |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
456 |
int i; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
457 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
458 |
#ifdef X11MODES_DEBUG |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
459 |
printf("VidMode modes: (unsorted)\n"); |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
460 |
for (i = 0; i < nmodes; ++i) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
461 |
printf("Mode %d: %d x %d @ %d\n", i, |
2874 | 462 |
modes[i]->hdisplay, modes[i]->vdisplay, |
463 |
calculate_rate(modes[i])); |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
464 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
465 |
#endif |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
466 |
for (i = 0; i < nmodes; ++i) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
467 |
mode.w = modes[i]->hdisplay; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
468 |
mode.h = modes[i]->vdisplay; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
469 |
mode.refresh_rate = calculate_rate(modes[i]); |
3500
4b594623401b
Work in progress on multi-display support:
Sam Lantinga <slouken@libsdl.org>
parents:
2963
diff
changeset
|
470 |
SDL_AddDisplayMode(sdl_display, &mode); |
2873
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 |
XFree(modes); |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
473 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
474 |
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
|
475 |
save_mode(display, data); |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
476 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
477 |
#endif /* SDL_VIDEO_DRIVER_X11_VIDMODE */ |
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 |
if (!data->use_xrandr && !data->use_vidmode) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
480 |
mode.w = screen_w; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
481 |
mode.h = screen_h; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
482 |
mode.refresh_rate = 0; |
3500
4b594623401b
Work in progress on multi-display support:
Sam Lantinga <slouken@libsdl.org>
parents:
2963
diff
changeset
|
483 |
SDL_AddDisplayMode(sdl_display, &mode); |
2874 | 484 |
} |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
485 |
#ifdef X11MODES_DEBUG |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
486 |
if (data->use_xinerama) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
487 |
printf("Xinerama is enabled\n"); |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
488 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
489 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
490 |
if (data->use_xrandr) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
491 |
printf("XRandR is enabled\n"); |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
492 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
493 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
494 |
if (data->use_vidmode) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
495 |
printf("VidMode is enabled\n"); |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
496 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
497 |
#endif /* X11MODES_DEBUG */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
498 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
499 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
500 |
static void |
2874 | 501 |
get_real_resolution(Display * display, SDL_DisplayData * data, int *w, int *h, |
502 |
int *rate) |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
503 |
{ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
504 |
#if SDL_VIDEO_DRIVER_X11_XRANDR |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
505 |
if (data->use_xrandr) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
506 |
int nsizes; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
507 |
XRRScreenSize *sizes; |
2874 | 508 |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
509 |
sizes = XRRConfigSizes(data->screen_config, &nsizes); |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
510 |
if (nsizes > 0) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
511 |
int cur_size; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
512 |
Rotation cur_rotation; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
513 |
|
2874 | 514 |
cur_size = |
515 |
XRRConfigCurrentConfiguration(data->screen_config, |
|
516 |
&cur_rotation); |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
517 |
*w = sizes[cur_size].width; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
518 |
*h = sizes[cur_size].height; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
519 |
*rate = XRRConfigCurrentRate(data->screen_config); |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
520 |
#ifdef X11MODES_DEBUG |
2874 | 521 |
fprintf(stderr, |
522 |
"XRANDR: get_real_resolution: w = %d, h = %d, rate = %d\n", |
|
523 |
*w, *h, *rate); |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
524 |
#endif |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
525 |
return; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
526 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
527 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
528 |
#endif /* SDL_VIDEO_DRIVER_X11_XRANDR */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
529 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
530 |
#if SDL_VIDEO_DRIVER_X11_VIDMODE |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
531 |
if (data->use_vidmode) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
532 |
SDL_NAME(XF86VidModeModeInfo) mode; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
533 |
|
2874 | 534 |
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
|
535 |
*w = mode.hdisplay; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
536 |
*h = mode.vdisplay; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
537 |
*rate = calculate_rate(&mode); |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
538 |
return; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
539 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
540 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
541 |
#endif /* SDL_VIDEO_DRIVER_X11_VIDMODE */ |
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 |
#if SDL_VIDEO_DRIVER_X11_XINERAMA |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
544 |
if (data->use_xinerama) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
545 |
*w = data->xinerama_info.width; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
546 |
*h = data->xinerama_info.height; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
547 |
*rate = 0; |
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 |
#endif /* SDL_VIDEO_DRIVER_X11_XINERAMA */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
551 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
552 |
*w = DisplayWidth(display, data->screen); |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
553 |
*h = DisplayHeight(display, data->screen); |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
554 |
*rate = 0; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
555 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
556 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
557 |
static void |
2874 | 558 |
set_best_resolution(Display * display, SDL_DisplayData * data, int w, int h, |
559 |
int rate) |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
560 |
{ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
561 |
int real_w, real_h, real_rate; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
562 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
563 |
/* 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
|
564 |
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
|
565 |
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
|
566 |
return; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
567 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
568 |
#if SDL_VIDEO_DRIVER_X11_XRANDR |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
569 |
if (data->use_xrandr) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
570 |
#ifdef X11MODES_DEBUG |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
571 |
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
|
572 |
w, h); |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
573 |
#endif |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
574 |
int i, nsizes, nrates; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
575 |
int best; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
576 |
int best_rate; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
577 |
XRRScreenSize *sizes; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
578 |
short *rates; |
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 |
/* 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
|
581 |
best = -1; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
582 |
sizes = XRRConfigSizes(data->screen_config, &nsizes); |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
583 |
for (i = 0; i < nsizes; ++i) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
584 |
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
|
585 |
continue; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
586 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
587 |
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
|
588 |
best = i; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
589 |
break; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
590 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
591 |
if (best == -1 || |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
592 |
(sizes[i].width < sizes[best].width) || |
2874 | 593 |
(sizes[i].width == sizes[best].width |
594 |
&& sizes[i].height < sizes[best].height)) { |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
595 |
best = i; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
596 |
} |
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 |
if (best >= 0) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
600 |
best_rate = 0; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
601 |
rates = XRRConfigRates(data->screen_config, best, &nrates); |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
602 |
for (i = 0; i < nrates; ++i) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
603 |
if (rates[i] == rate) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
604 |
best_rate = rate; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
605 |
break; |
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 |
if (!rate) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
608 |
/* Higher is better, right? */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
609 |
if (rates[i] > best_rate) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
610 |
best_rate = rates[i]; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
611 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
612 |
} else { |
2874 | 613 |
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
|
614 |
best_rate = rates[i]; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
615 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
616 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
617 |
} |
2874 | 618 |
XRRSetScreenConfigAndRate(display, data->screen_config, |
619 |
RootWindow(display, data->screen), best, |
|
620 |
data->saved_rotation, best_rate, |
|
621 |
CurrentTime); |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
622 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
623 |
return; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
624 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
625 |
#endif /* SDL_VIDEO_DRIVER_X11_XRANDR */ |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
626 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
627 |
#if SDL_VIDEO_DRIVER_X11_VIDMODE |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
628 |
if (data->use_vidmode) { |
2874 | 629 |
SDL_NAME(XF86VidModeModeInfo) ** modes; |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
630 |
int i, nmodes; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
631 |
int best; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
632 |
|
2874 | 633 |
if (SDL_NAME(XF86VidModeGetAllModeLines) |
634 |
(display, data->screen, &nmodes, &modes)) { |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
635 |
best = -1; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
636 |
for (i = 0; i < nmodes; ++i) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
637 |
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
|
638 |
continue; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
639 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
640 |
if (best == -1 || |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
641 |
(modes[i]->hdisplay < modes[best]->hdisplay) || |
2874 | 642 |
(modes[i]->hdisplay == modes[best]->hdisplay |
643 |
&& modes[i]->vdisplay < modes[best]->vdisplay)) { |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
644 |
best = i; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
645 |
continue; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
646 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
647 |
if ((modes[i]->hdisplay == modes[best]->hdisplay) && |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
648 |
(modes[i]->vdisplay == modes[best]->vdisplay)) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
649 |
if (!rate) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
650 |
/* Higher is better, right? */ |
2874 | 651 |
if (calculate_rate(modes[i]) > |
652 |
calculate_rate(modes[best])) { |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
653 |
best = i; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
654 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
655 |
} else { |
2874 | 656 |
if (SDL_abs(calculate_rate(modes[i]) - rate) < |
657 |
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
|
658 |
best = i; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
659 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
660 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
661 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
662 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
663 |
if (best >= 0) { |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
664 |
#ifdef X11MODES_DEBUG |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
665 |
printf("Best Mode %d: %d x %d @ %d\n", best, |
2874 | 666 |
modes[best]->hdisplay, modes[best]->vdisplay, |
667 |
calculate_rate(modes[best])); |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
668 |
#endif |
2874 | 669 |
SDL_NAME(XF86VidModeSwitchToMode) (display, data->screen, |
670 |
modes[best]); |
|
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
671 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
672 |
XFree(modes); |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
673 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
674 |
return; |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
675 |
} |
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
676 |
#endif /* SDL_VIDEO_DRIVER_X11_VIDMODE */ |
1950
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
677 |
} |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
678 |
|
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
679 |
int |
3500
4b594623401b
Work in progress on multi-display support:
Sam Lantinga <slouken@libsdl.org>
parents:
2963
diff
changeset
|
680 |
X11_SetDisplayMode(_THIS, SDL_VideoDisplay * sdl_display, SDL_DisplayMode * mode) |
1950
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
681 |
{ |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
682 |
Display *display = ((SDL_VideoData *) _this->driverdata)->display; |
3500
4b594623401b
Work in progress on multi-display support:
Sam Lantinga <slouken@libsdl.org>
parents:
2963
diff
changeset
|
683 |
SDL_DisplayData *data = (SDL_DisplayData *) sdl_display->driverdata; |
2873
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
684 |
|
b33e38aaa027
Progress on fullscreen mode switching on X11
Sam Lantinga <slouken@libsdl.org>
parents:
2870
diff
changeset
|
685 |
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
|
686 |
return 0; |
1950
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
687 |
} |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
688 |
|
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
689 |
void |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
690 |
X11_QuitModes(_THIS) |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
691 |
{ |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
692 |
} |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
693 |
|
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
694 |
/* vi: set ts=4 sw=4 expandtab: */ |