]>
Commit | Line | Data |
---|---|---|
10a0e290 BB |
1 | /* |
2 | SDL - Simple DirectMedia Layer | |
3 | Copyright (C) 1997-2006 Sam Lantinga | |
4 | ||
5 | This library is free software; you can redistribute it and/or | |
6 | modify it under the terms of the GNU Lesser General Public | |
7 | License as published by the Free Software Foundation; either | |
8 | version 2.1 of the License, or (at your option) any later version. | |
9 | ||
10 | This library is distributed in the hope that it will be useful, | |
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
13 | Lesser General Public License for more details. | |
14 | ||
15 | You should have received a copy of the GNU Lesser General Public | |
16 | License along with this library; if not, write to the Free Software | |
17 | Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | |
18 | ||
19 | Sam Lantinga | |
20 | slouken@libsdl.org | |
21 | */ | |
22 | ||
23 | /* Include file for SDL custom system window manager hooks */ | |
24 | ||
25 | #ifndef _SDL_syswm_h | |
26 | #define _SDL_syswm_h | |
27 | ||
28 | #include "SDL_stdinc.h" | |
29 | #include "SDL_error.h" | |
30 | #include "SDL_version.h" | |
31 | ||
32 | #include "begin_code.h" | |
33 | /* Set up for C function definitions, even when using C++ */ | |
34 | #ifdef __cplusplus | |
35 | extern "C" { | |
36 | #endif | |
37 | ||
38 | /* Your application has access to a special type of event 'SDL_SYSWMEVENT', | |
39 | which contains window-manager specific information and arrives whenever | |
40 | an unhandled window event occurs. This event is ignored by default, but | |
41 | you can enable it with SDL_EventState() | |
42 | */ | |
43 | #ifdef SDL_PROTOTYPES_ONLY | |
44 | struct SDL_SysWMinfo; | |
45 | typedef struct SDL_SysWMinfo SDL_SysWMinfo; | |
46 | #else | |
47 | ||
48 | /* This is the structure for custom window manager events */ | |
49 | #if defined(SDL_VIDEO_DRIVER_X11) | |
50 | #if defined(__APPLE__) && defined(__MACH__) | |
51 | /* conflicts with Quickdraw.h */ | |
52 | #define Cursor X11Cursor | |
53 | #endif | |
54 | ||
55 | #include <X11/Xlib.h> | |
56 | #include <X11/Xatom.h> | |
57 | ||
58 | #if defined(__APPLE__) && defined(__MACH__) | |
59 | /* matches the re-define above */ | |
60 | #undef Cursor | |
61 | #endif | |
62 | ||
63 | /* These are the various supported subsystems under UNIX */ | |
64 | typedef enum { | |
65 | SDL_SYSWM_X11 | |
66 | } SDL_SYSWM_TYPE; | |
67 | ||
68 | /* The UNIX custom event structure */ | |
69 | struct SDL_SysWMmsg { | |
70 | SDL_version version; | |
71 | SDL_SYSWM_TYPE subsystem; | |
72 | union { | |
73 | XEvent xevent; | |
74 | } event; | |
75 | }; | |
76 | ||
77 | /* The UNIX custom window manager information structure. | |
78 | When this structure is returned, it holds information about which | |
79 | low level system it is using, and will be one of SDL_SYSWM_TYPE. | |
80 | */ | |
81 | typedef struct SDL_SysWMinfo { | |
82 | SDL_version version; | |
83 | SDL_SYSWM_TYPE subsystem; | |
84 | union { | |
85 | struct { | |
86 | Display *display; /* The X11 display */ | |
87 | Window window; /* The X11 display window */ | |
88 | /* These locking functions should be called around | |
89 | any X11 functions using the display variable, | |
90 | but not the gfxdisplay variable. | |
91 | They lock the event thread, so should not be | |
92 | called around event functions or from event filters. | |
93 | */ | |
94 | void (*lock_func)(void); | |
95 | void (*unlock_func)(void); | |
96 | ||
97 | /* Introduced in SDL 1.0.2 */ | |
98 | Window fswindow; /* The X11 fullscreen window */ | |
99 | Window wmwindow; /* The X11 managed input window */ | |
100 | ||
101 | /* Introduced in SDL 1.2.12 */ | |
102 | Display *gfxdisplay; /* The X11 display to which rendering is done */ | |
103 | } x11; | |
104 | } info; | |
105 | } SDL_SysWMinfo; | |
106 | ||
107 | #elif defined(SDL_VIDEO_DRIVER_NANOX) | |
108 | #include <microwin/nano-X.h> | |
109 | ||
110 | /* The generic custom event structure */ | |
111 | struct SDL_SysWMmsg { | |
112 | SDL_version version; | |
113 | int data; | |
114 | }; | |
115 | ||
116 | /* The windows custom window manager information structure */ | |
117 | typedef struct SDL_SysWMinfo { | |
118 | SDL_version version ; | |
119 | GR_WINDOW_ID window ; /* The display window */ | |
120 | } SDL_SysWMinfo; | |
121 | ||
122 | #elif defined(SDL_VIDEO_DRIVER_WINDIB) || defined(SDL_VIDEO_DRIVER_DDRAW) || defined(SDL_VIDEO_DRIVER_GAPI) | |
123 | #define WIN32_LEAN_AND_MEAN | |
124 | #include <windows.h> | |
125 | ||
126 | /* The windows custom event structure */ | |
127 | struct SDL_SysWMmsg { | |
128 | SDL_version version; | |
129 | HWND hwnd; /* The window for the message */ | |
130 | UINT msg; /* The type of message */ | |
131 | WPARAM wParam; /* WORD message parameter */ | |
132 | LPARAM lParam; /* LONG message parameter */ | |
133 | }; | |
134 | ||
135 | /* The windows custom window manager information structure */ | |
136 | typedef struct SDL_SysWMinfo { | |
137 | SDL_version version; | |
138 | HWND window; /* The Win32 display window */ | |
139 | HGLRC hglrc; /* The OpenGL context, if any */ | |
140 | } SDL_SysWMinfo; | |
141 | ||
142 | #elif defined(SDL_VIDEO_DRIVER_RISCOS) | |
143 | ||
144 | /* RISC OS custom event structure */ | |
145 | struct SDL_SysWMmsg { | |
146 | SDL_version version; | |
147 | int eventCode; /* The window for the message */ | |
148 | int pollBlock[64]; | |
149 | }; | |
150 | ||
151 | /* The RISC OS custom window manager information structure */ | |
152 | typedef struct SDL_SysWMinfo { | |
153 | SDL_version version; | |
154 | int wimpVersion; /* Wimp version running under */ | |
155 | int taskHandle; /* The RISC OS task handle */ | |
156 | int window; /* The RISC OS display window */ | |
157 | } SDL_SysWMinfo; | |
158 | ||
159 | #elif defined(SDL_VIDEO_DRIVER_PHOTON) | |
160 | #include <sys/neutrino.h> | |
161 | #include <Ph.h> | |
162 | ||
163 | /* The QNX custom event structure */ | |
164 | struct SDL_SysWMmsg { | |
165 | SDL_version version; | |
166 | int data; | |
167 | }; | |
168 | ||
169 | /* The QNX custom window manager information structure */ | |
170 | typedef struct SDL_SysWMinfo { | |
171 | SDL_version version; | |
172 | int data; | |
173 | } SDL_SysWMinfo; | |
174 | ||
175 | #else | |
176 | ||
177 | /* The generic custom event structure */ | |
178 | struct SDL_SysWMmsg { | |
179 | SDL_version version; | |
180 | int data; | |
181 | }; | |
182 | ||
183 | /* The generic custom window manager information structure */ | |
184 | typedef struct SDL_SysWMinfo { | |
185 | SDL_version version; | |
186 | int data; | |
187 | } SDL_SysWMinfo; | |
188 | ||
189 | #endif /* video driver type */ | |
190 | ||
191 | #endif /* SDL_PROTOTYPES_ONLY */ | |
192 | ||
193 | /* Function prototypes */ | |
194 | /* | |
195 | * This function gives you custom hooks into the window manager information. | |
196 | * It fills the structure pointed to by 'info' with custom information and | |
197 | * returns 1 if the function is implemented. If it's not implemented, or | |
198 | * the version member of the 'info' structure is invalid, it returns 0. | |
199 | * | |
200 | * You typically use this function like this: | |
201 | * SDL_SysWMInfo info; | |
202 | * SDL_VERSION(&info.version); | |
203 | * if ( SDL_GetWMInfo(&info) ) { ... } | |
204 | */ | |
205 | extern DECLSPEC int SDLCALL SDL_GetWMInfo(SDL_SysWMinfo *info); | |
206 | ||
207 | ||
208 | /* Ends C function definitions when using C++ */ | |
209 | #ifdef __cplusplus | |
210 | } | |
211 | #endif | |
212 | #include "close_code.h" | |
213 | ||
214 | #endif /* _SDL_syswm_h */ |