Home | History | Annotate | Download | only in SDL
      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 (at) 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
    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