1 /* 2 SDL - Simple DirectMedia Layer 3 Copyright (C) 1997-2012 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 /** @file SDL_syswm.h 24 * Include file for SDL custom system window manager hooks 25 */ 26 27 #ifndef _SDL_syswm_h 28 #define _SDL_syswm_h 29 30 #include "SDL_stdinc.h" 31 #include "SDL_error.h" 32 #include "SDL_version.h" 33 34 #include "begin_code.h" 35 /* Set up for C function definitions, even when using C++ */ 36 #ifdef __cplusplus 37 extern "C" { 38 #endif 39 40 /** @file SDL_syswm.h 41 * Your application has access to a special type of event 'SDL_SYSWMEVENT', 42 * which contains window-manager specific information and arrives whenever 43 * an unhandled window event occurs. This event is ignored by default, but 44 * you can enable it with SDL_EventState() 45 */ 46 #ifdef SDL_PROTOTYPES_ONLY 47 struct SDL_SysWMinfo; 48 typedef struct SDL_SysWMinfo SDL_SysWMinfo; 49 #else 50 51 /* This is the structure for custom window manager events */ 52 #if defined(SDL_VIDEO_DRIVER_X11) 53 #if defined(__APPLE__) && defined(__MACH__) 54 /* conflicts with Quickdraw.h */ 55 #define Cursor X11Cursor 56 #endif 57 58 #include <X11/Xlib.h> 59 #include <X11/Xatom.h> 60 61 #if defined(__APPLE__) && defined(__MACH__) 62 /* matches the re-define above */ 63 #undef Cursor 64 #endif 65 66 /** These are the various supported subsystems under UNIX */ 67 typedef enum { 68 SDL_SYSWM_X11 69 } SDL_SYSWM_TYPE; 70 71 /** The UNIX custom event structure */ 72 struct SDL_SysWMmsg { 73 SDL_version version; 74 SDL_SYSWM_TYPE subsystem; 75 union { 76 XEvent xevent; 77 } event; 78 }; 79 80 /** The UNIX custom window manager information structure. 81 * When this structure is returned, it holds information about which 82 * low level system it is using, and will be one of SDL_SYSWM_TYPE. 83 */ 84 typedef struct SDL_SysWMinfo { 85 SDL_version version; 86 SDL_SYSWM_TYPE subsystem; 87 union { 88 struct { 89 Display *display; /**< The X11 display */ 90 Window window; /**< The X11 display window */ 91 /** These locking functions should be called around 92 * any X11 functions using the display variable, 93 * but not the gfxdisplay variable. 94 * They lock the event thread, so should not be 95 * called around event functions or from event filters. 96 */ 97 /*@{*/ 98 void (*lock_func)(void); 99 void (*unlock_func)(void); 100 /*@}*/ 101 102 /** @name Introduced in SDL 1.0.2 */ 103 /*@{*/ 104 Window fswindow; /**< The X11 fullscreen window */ 105 Window wmwindow; /**< The X11 managed input window */ 106 /*@}*/ 107 108 /** @name Introduced in SDL 1.2.12 */ 109 /*@{*/ 110 Display *gfxdisplay; /**< The X11 display to which rendering is done */ 111 /*@}*/ 112 } x11; 113 } info; 114 } SDL_SysWMinfo; 115 116 #elif defined(SDL_VIDEO_DRIVER_NANOX) 117 #include <microwin/nano-X.h> 118 119 /** The generic custom event structure */ 120 struct SDL_SysWMmsg { 121 SDL_version version; 122 int data; 123 }; 124 125 /** The windows custom window manager information structure */ 126 typedef struct SDL_SysWMinfo { 127 SDL_version version ; 128 GR_WINDOW_ID window ; /* The display window */ 129 } SDL_SysWMinfo; 130 131 #elif defined(SDL_VIDEO_DRIVER_WINDIB) || defined(SDL_VIDEO_DRIVER_DDRAW) || defined(SDL_VIDEO_DRIVER_GAPI) 132 #define WIN32_LEAN_AND_MEAN 1 133 #include <windows.h> 134 135 /** The windows custom event structure */ 136 struct SDL_SysWMmsg { 137 SDL_version version; 138 HWND hwnd; /**< The window for the message */ 139 UINT msg; /**< The type of message */ 140 WPARAM wParam; /**< WORD message parameter */ 141 LPARAM lParam; /**< LONG message parameter */ 142 }; 143 144 /** The windows custom window manager information structure */ 145 typedef struct SDL_SysWMinfo { 146 SDL_version version; 147 HWND window; /**< The Win32 display window */ 148 HGLRC hglrc; /**< The OpenGL context, if any */ 149 } SDL_SysWMinfo; 150 151 #elif defined(SDL_VIDEO_DRIVER_RISCOS) 152 153 /** RISC OS custom event structure */ 154 struct SDL_SysWMmsg { 155 SDL_version version; 156 int eventCode; /**< The window for the message */ 157 int pollBlock[64]; 158 }; 159 160 /** The RISC OS custom window manager information structure */ 161 typedef struct SDL_SysWMinfo { 162 SDL_version version; 163 int wimpVersion; /**< Wimp version running under */ 164 int taskHandle; /**< The RISC OS task handle */ 165 int window; /**< The RISC OS display window */ 166 } SDL_SysWMinfo; 167 168 #elif defined(SDL_VIDEO_DRIVER_PHOTON) 169 #include <sys/neutrino.h> 170 #include <Ph.h> 171 172 /** The QNX custom event structure */ 173 struct SDL_SysWMmsg { 174 SDL_version version; 175 int data; 176 }; 177 178 /** The QNX custom window manager information structure */ 179 typedef struct SDL_SysWMinfo { 180 SDL_version version; 181 int data; 182 } SDL_SysWMinfo; 183 184 #elif defined(SDL_VIDEO_DRIVER_QUARTZ) 185 186 struct SDL_SysWMmsg { 187 SDL_version version; 188 int data; 189 }; 190 191 typedef struct SDL_SysWMinfo { 192 SDL_version version; 193 void* nsWindowPtr; 194 } SDL_SysWMinfo; 195 196 #else 197 198 /** The generic custom event structure */ 199 struct SDL_SysWMmsg { 200 SDL_version version; 201 int data; 202 }; 203 204 /** The generic custom window manager information structure */ 205 typedef struct SDL_SysWMinfo { 206 SDL_version version; 207 int data; 208 } SDL_SysWMinfo; 209 210 #endif /* video driver type */ 211 212 #endif /* SDL_PROTOTYPES_ONLY */ 213 214 /* Function prototypes */ 215 /** 216 * This function gives you custom hooks into the window manager information. 217 * It fills the structure pointed to by 'info' with custom information and 218 * returns 0 if the function is not implemented, 1 if the function is 219 * implemented and no error occurred, and -1 if the version member of 220 * the 'info' structure is not filled in or not supported. 221 * 222 * You typically use this function like this: 223 * @code 224 * SDL_SysWMinfo info; 225 * SDL_VERSION(&info.version); 226 * if ( SDL_GetWMInfo(&info) ) { ... } 227 * @endcode 228 */ 229 extern DECLSPEC int SDLCALL SDL_GetWMInfo(SDL_SysWMinfo *info); 230 231 232 /* Ends C function definitions when using C++ */ 233 #ifdef __cplusplus 234 } 235 #endif 236 #include "close_code.h" 237 238 #endif /* _SDL_syswm_h */ 239