upgrade SDL to version 2.0.8
[platform/upstream/SDL.git] / include / SDL_syswm.h
1 /*
2   Simple DirectMedia Layer
3   Copyright (C) 1997-2018 Sam Lantinga <slouken@libsdl.org>
4
5   This software is provided 'as-is', without any express or implied
6   warranty.  In no event will the authors be held liable for any damages
7   arising from the use of this software.
8
9   Permission is granted to anyone to use this software for any purpose,
10   including commercial applications, and to alter it and redistribute it
11   freely, subject to the following restrictions:
12
13   1. The origin of this software must not be misrepresented; you must not
14      claim that you wrote the original software. If you use this software
15      in a product, an acknowledgment in the product documentation would be
16      appreciated but is not required.
17   2. Altered source versions must be plainly marked as such, and must not be
18      misrepresented as being the original software.
19   3. This notice may not be removed or altered from any source distribution.
20 */
21
22 /**
23  *  \file SDL_syswm.h
24  *
25  *  Include file for SDL custom system window manager hooks.
26  */
27
28 #ifndef SDL_syswm_h_
29 #define SDL_syswm_h_
30
31 #include "SDL_stdinc.h"
32 #include "SDL_error.h"
33 #include "SDL_video.h"
34 #include "SDL_version.h"
35
36 #include "begin_code.h"
37 /* Set up for C function definitions, even when using C++ */
38 #ifdef __cplusplus
39 extern "C" {
40 #endif
41
42 /**
43  *  \file SDL_syswm.h
44  *
45  *  Your application has access to a special type of event ::SDL_SYSWMEVENT,
46  *  which contains window-manager specific information and arrives whenever
47  *  an unhandled window event occurs.  This event is ignored by default, but
48  *  you can enable it with SDL_EventState().
49  */
50 #ifdef SDL_PROTOTYPES_ONLY
51 struct SDL_SysWMinfo;
52 #else
53
54 #if defined(SDL_VIDEO_DRIVER_WINDOWS)
55 #ifndef WIN32_LEAN_AND_MEAN
56 #define WIN32_LEAN_AND_MEAN
57 #endif
58 #include <windows.h>
59 #endif
60
61 #if defined(SDL_VIDEO_DRIVER_WINRT)
62 #include <Inspectable.h>
63 #endif
64
65 /* This is the structure for custom window manager events */
66 #if defined(SDL_VIDEO_DRIVER_X11)
67 #if defined(__APPLE__) && defined(__MACH__)
68 /* conflicts with Quickdraw.h */
69 #define Cursor X11Cursor
70 #endif
71
72 #include <X11/Xlib.h>
73 #include <X11/Xatom.h>
74
75 #if defined(__APPLE__) && defined(__MACH__)
76 /* matches the re-define above */
77 #undef Cursor
78 #endif
79
80 #endif /* defined(SDL_VIDEO_DRIVER_X11) */
81
82 #if defined(SDL_VIDEO_DRIVER_DIRECTFB)
83 #include <directfb.h>
84 #endif
85
86 #if defined(SDL_VIDEO_DRIVER_COCOA)
87 #ifdef __OBJC__
88 @class NSWindow;
89 #else
90 typedef struct _NSWindow NSWindow;
91 #endif
92 #endif
93
94 #if defined(SDL_VIDEO_DRIVER_UIKIT)
95 #ifdef __OBJC__
96 #include <UIKit/UIKit.h>
97 #else
98 typedef struct _UIWindow UIWindow;
99 typedef struct _UIViewController UIViewController;
100 #endif
101 typedef Uint32 GLuint;
102 #endif
103
104 #if defined(SDL_VIDEO_DRIVER_ANDROID)
105 typedef struct ANativeWindow ANativeWindow;
106 typedef void *EGLSurface;
107 #endif
108
109 #if defined(SDL_VIDEO_DRIVER_VIVANTE)
110 #include "SDL_egl.h"
111 #endif
112
113 /**
114  *  These are the various supported windowing subsystems
115  */
116 typedef enum
117 {
118     SDL_SYSWM_UNKNOWN,
119     SDL_SYSWM_WINDOWS,
120     SDL_SYSWM_X11,
121     SDL_SYSWM_DIRECTFB,
122     SDL_SYSWM_COCOA,
123     SDL_SYSWM_UIKIT,
124     SDL_SYSWM_WAYLAND,
125     SDL_SYSWM_MIR,
126     SDL_SYSWM_WINRT,
127     SDL_SYSWM_ANDROID,
128     SDL_SYSWM_VIVANTE,
129     SDL_SYSWM_TIZEN,
130     SDL_SYSWM_OS2
131 } SDL_SYSWM_TYPE;
132
133 /**
134  *  The custom event structure.
135  */
136 struct SDL_SysWMmsg
137 {
138     SDL_version version;
139     SDL_SYSWM_TYPE subsystem;
140     union
141     {
142 #if defined(SDL_VIDEO_DRIVER_WINDOWS)
143         struct {
144             HWND hwnd;                  /**< The window for the message */
145             UINT msg;                   /**< The type of message */
146             WPARAM wParam;              /**< WORD message parameter */
147             LPARAM lParam;              /**< LONG message parameter */
148         } win;
149 #endif
150 #if defined(SDL_VIDEO_DRIVER_X11)
151         struct {
152             XEvent event;
153         } x11;
154 #endif
155 #if defined(SDL_VIDEO_DRIVER_DIRECTFB)
156         struct {
157             DFBEvent event;
158         } dfb;
159 #endif
160 #if defined(SDL_VIDEO_DRIVER_COCOA)
161         struct
162         {
163             /* Latest version of Xcode clang complains about empty structs in C v. C++:
164                  error: empty struct has size 0 in C, size 1 in C++
165              */
166             int dummy;
167             /* No Cocoa window events yet */
168         } cocoa;
169 #endif
170 #if defined(SDL_VIDEO_DRIVER_UIKIT)
171         struct
172         {
173             int dummy;
174             /* No UIKit window events yet */
175         } uikit;
176 #endif
177 #if defined(SDL_VIDEO_DRIVER_VIVANTE)
178         struct
179         {
180             int dummy;
181             /* No Vivante window events yet */
182         } vivante;
183 #endif
184         /* Can't have an empty union */
185         int dummy;
186     } msg;
187 };
188
189 /**
190  *  The custom window manager information structure.
191  *
192  *  When this structure is returned, it holds information about which
193  *  low level system it is using, and will be one of SDL_SYSWM_TYPE.
194  */
195 struct SDL_SysWMinfo
196 {
197     SDL_version version;
198     SDL_SYSWM_TYPE subsystem;
199     union
200     {
201 #if defined(SDL_VIDEO_DRIVER_WINDOWS)
202         struct
203         {
204             HWND window;                /**< The window handle */
205             HDC hdc;                    /**< The window device context */
206             HINSTANCE hinstance;        /**< The instance handle */
207         } win;
208 #endif
209 #if defined(SDL_VIDEO_DRIVER_WINRT)
210         struct
211         {
212             IInspectable * window;      /**< The WinRT CoreWindow */
213         } winrt;
214 #endif
215 #if defined(SDL_VIDEO_DRIVER_X11)
216         struct
217         {
218             Display *display;           /**< The X11 display */
219             Window window;              /**< The X11 window */
220         } x11;
221 #endif
222 #if defined(SDL_VIDEO_DRIVER_DIRECTFB)
223         struct
224         {
225             IDirectFB *dfb;             /**< The directfb main interface */
226             IDirectFBWindow *window;    /**< The directfb window handle */
227             IDirectFBSurface *surface;  /**< The directfb client surface */
228         } dfb;
229 #endif
230 #if defined(SDL_VIDEO_DRIVER_COCOA)
231         struct
232         {
233 #if defined(__OBJC__) && defined(__has_feature) && __has_feature(objc_arc)
234             NSWindow __unsafe_unretained *window; /**< The Cocoa window */
235 #else
236             NSWindow *window;                     /**< The Cocoa window */
237 #endif
238         } cocoa;
239 #endif
240 #if defined(SDL_VIDEO_DRIVER_UIKIT)
241         struct
242         {
243 #if defined(__OBJC__) && defined(__has_feature) && __has_feature(objc_arc)
244             UIWindow __unsafe_unretained *window; /**< The UIKit window */
245 #else
246             UIWindow *window;                     /**< The UIKit window */
247 #endif
248             GLuint framebuffer; /**< The GL view's Framebuffer Object. It must be bound when rendering to the screen using GL. */
249             GLuint colorbuffer; /**< The GL view's color Renderbuffer Object. It must be bound when SDL_GL_SwapWindow is called. */
250             GLuint resolveFramebuffer; /**< The Framebuffer Object which holds the resolve color Renderbuffer, when MSAA is used. */
251         } uikit;
252 #endif
253 #if defined(SDL_VIDEO_DRIVER_WAYLAND)
254         struct
255         {
256             struct wl_display *display;            /**< Wayland display */
257             struct wl_surface *surface;            /**< Wayland surface */
258             struct wl_shell_surface *shell_surface; /**< Wayland shell_surface (window manager handle) */
259         } wl;
260 #endif
261 #if defined(SDL_VIDEO_DRIVER_MIR)
262         struct
263         {
264             struct MirConnection *connection;  /**< Mir display server connection */
265             struct MirSurface *surface;  /**< Mir surface */
266         } mir;
267 #endif
268
269 #if defined(SDL_VIDEO_DRIVER_ANDROID)
270         struct
271         {
272             ANativeWindow *window;
273             EGLSurface surface;
274         } android;
275 #endif
276 #if defined(SDL_VIDEO_DRIVER_TIZEN)
277         struct
278         {
279 //            struct wl_display *display;              /**< Wayland display */
280 //            struct wl_surface *surface;              /**< Wayland surface */
281 //            struct wl_shell_surface *shell_surface;  /**< Wayland shell_surface (window manager handle) */
282
283             /* For GLES */
284             void*  egl_display;                      /**< EGLDispaly when OPENGLES is enabled */
285             void*  egl_surface;                      /**< EGLSurface when OPENGLES is enabled for this wl_surface */
286         } tizen;
287 #endif
288
289 #if defined(SDL_VIDEO_DRIVER_VIVANTE)
290         struct
291         {
292             EGLNativeDisplayType display;
293             EGLNativeWindowType window;
294         } vivante;
295 #endif
296
297         /* Make sure this union is always 64 bytes (8 64-bit pointers). */
298         /* Be careful not to overflow this if you add a new target! */
299         Uint8 dummy[64];
300     } info;
301 };
302
303 #endif /* SDL_PROTOTYPES_ONLY */
304
305 typedef struct SDL_SysWMinfo SDL_SysWMinfo;
306
307 /* Function prototypes */
308 /**
309  *  \brief This function allows access to driver-dependent window information.
310  *
311  *  \param window The window about which information is being requested
312  *  \param info This structure must be initialized with the SDL version, and is
313  *              then filled in with information about the given window.
314  *
315  *  \return SDL_TRUE if the function is implemented and the version member of
316  *          the \c info struct is valid, SDL_FALSE otherwise.
317  *
318  *  You typically use this function like this:
319  *  \code
320  *  SDL_SysWMinfo info;
321  *  SDL_VERSION(&info.version);
322  *  if ( SDL_GetWindowWMInfo(window, &info) ) { ... }
323  *  \endcode
324  */
325 extern DECLSPEC SDL_bool SDLCALL SDL_GetWindowWMInfo(SDL_Window * window,
326                                                      SDL_SysWMinfo * info);
327
328
329 /* Ends C function definitions when using C++ */
330 #ifdef __cplusplus
331 }
332 #endif
333 #include "close_code.h"
334
335 #endif /* SDL_syswm_h_ */
336
337 /* vi: set ts=4 sw=4 expandtab: */