This repository has been archived by the owner on Feb 11, 2021. It is now read-only.
/
SDL_syswm.h
242 lines (215 loc) · 6.02 KB
1
2
/*
SDL - Simple DirectMedia Layer
3
Copyright (C) 1997-2011 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
11
12
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
Lesser General Public License for more details.
14
15
16
17
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18
19
Sam Lantinga
20
slouken@libsdl.org
21
22
*/
23
/**
24
25
26
* \file SDL_syswm.h
*
* Include file for SDL custom system window manager hooks.
27
*/
28
29
30
31
#ifndef _SDL_syswm_h
#define _SDL_syswm_h
32
#include "SDL_stdinc.h"
33
#include "SDL_error.h"
34
#include "SDL_video.h"
35
36
37
38
39
#include "SDL_version.h"
#include "begin_code.h"
/* Set up for C function definitions, even when using C++ */
#ifdef __cplusplus
40
/* *INDENT-OFF* */
41
extern "C" {
42
/* *INDENT-ON* */
43
44
#endif
45
46
47
48
49
50
51
52
/**
* \file SDL_syswm.h
*
* Your application has access to a special type of event ::SDL_SYSWMEVENT,
* which contains window-manager specific information and arrives whenever
* an unhandled window event occurs. This event is ignored by default, but
* you can enable it with SDL_EventState().
*/
53
54
55
56
#ifdef SDL_PROTOTYPES_ONLY
struct SDL_SysWMinfo;
#else
57
#if defined(SDL_VIDEO_DRIVER_WINDOWS)
58
59
60
61
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#endif
62
/* This is the structure for custom window manager events */
63
#if defined(SDL_VIDEO_DRIVER_X11)
64
#if defined(__APPLE__) && defined(__MACH__)
65
/* conflicts with Quickdraw.h */
66
67
68
#define Cursor X11Cursor
#endif
69
70
71
#include <X11/Xlib.h>
#include <X11/Xatom.h>
72
#if defined(__APPLE__) && defined(__MACH__)
73
/* matches the re-define above */
74
75
76
#undef Cursor
#endif
77
78
79
#endif /* defined(SDL_VIDEO_DRIVER_X11) */
#if defined(SDL_VIDEO_DRIVER_DIRECTFB)
80
#include <directfb.h>
81
#endif
82
83
84
85
86
87
88
89
90
#if defined(SDL_VIDEO_DRIVER_COCOA)
#ifdef __OBJC__
#include <Cocoa/Cocoa.h>
#else
typedef struct _NSWindow NSWindow;
#endif
#endif
91
92
93
94
95
96
97
98
#if defined(SDL_VIDEO_DRIVER_UIKIT)
#ifdef __OBJC__
#include <UIKit/UIKit.h>
#else
typedef struct _UIWindow UIWindow;
#endif
#endif
99
/**
100
* These are the various supported windowing subsystems
101
*/
102
103
typedef enum
{
104
105
SDL_SYSWM_UNKNOWN,
SDL_SYSWM_WINDOWS,
106
107
SDL_SYSWM_X11,
SDL_SYSWM_DIRECTFB,
108
SDL_SYSWM_COCOA,
109
SDL_SYSWM_UIKIT,
110
111
} SDL_SYSWM_TYPE;
112
/**
113
* The custom event structure.
114
*/
115
116
117
118
119
120
struct SDL_SysWMmsg
{
SDL_version version;
SDL_SYSWM_TYPE subsystem;
union
{
121
#if defined(SDL_VIDEO_DRIVER_WINDOWS)
122
123
124
125
126
127
struct {
HWND hwnd; /**< The window for the message */
UINT msg; /**< The type of message */
WPARAM wParam; /**< WORD message parameter */
LPARAM lParam; /**< LONG message parameter */
} win;
128
129
#endif
#if defined(SDL_VIDEO_DRIVER_X11)
130
131
132
struct {
XEvent event;
} x11;
133
134
#endif
#if defined(SDL_VIDEO_DRIVER_DIRECTFB)
135
136
137
struct {
DFBEvent event;
} dfb;
138
139
#endif
#if defined(SDL_VIDEO_DRIVER_COCOA)
140
141
142
143
struct
{
/* No Cocoa window events yet */
} cocoa;
144
145
#endif
#if defined(SDL_VIDEO_DRIVER_UIKIT)
146
147
148
149
struct
{
/* No UIKit window events yet */
} uikit;
150
#endif
151
152
/* Can't have an empty union */
int dummy;
153
} msg;
154
155
};
156
/**
157
* The custom window manager information structure.
158
159
160
*
* When this structure is returned, it holds information about which
* low level system it is using, and will be one of SDL_SYSWM_TYPE.
161
*/
162
163
164
165
166
167
struct SDL_SysWMinfo
{
SDL_version version;
SDL_SYSWM_TYPE subsystem;
union
{
168
#if defined(SDL_VIDEO_DRIVER_WINDOWS)
169
170
struct
{
171
HWND window; /**< The window handle */
172
} win;
173
174
#endif
#if defined(SDL_VIDEO_DRIVER_X11)
175
176
struct
{
177
Display *display; /**< The X11 display */
178
Window window; /**< The X11 window */
179
} x11;
180
181
#endif
#if defined(SDL_VIDEO_DRIVER_DIRECTFB)
182
183
struct
{
184
185
186
IDirectFB *dfb; /**< The directfb main interface */
IDirectFBWindow *window; /**< The directfb window handle */
IDirectFBSurface *surface; /**< The directfb client surface */
187
} dfb;
188
189
#endif
#if defined(SDL_VIDEO_DRIVER_COCOA)
190
191
struct
{
192
NSWindow *window; /* The Cocoa window */
193
} cocoa;
194
195
#endif
#if defined(SDL_VIDEO_DRIVER_UIKIT)
196
197
198
199
struct
{
UIWindow *window; /* The UIKit window */
} uikit;
200
#endif
201
202
/* Can't have an empty union */
int dummy;
203
} info;
204
};
205
206
207
#endif /* SDL_PROTOTYPES_ONLY */
208
209
typedef struct SDL_SysWMinfo SDL_SysWMinfo;
210
/* Function prototypes */
211
/**
212
213
* \brief This function allows access to driver-dependent window information.
*
214
* \param window The window about which information is being requested
215
216
217
218
219
220
221
222
* \param info This structure must be initialized with the SDL version, and is
* then filled in with information about the given window.
*
* \return SDL_TRUE if the function is implemented and the version member of
* the \c info struct is valid, SDL_FALSE otherwise.
*
* You typically use this function like this:
* \code
223
* SDL_SysWMinfo info;
224
225
226
* SDL_VERSION(&info.version);
* if ( SDL_GetWindowWMInfo(&info) ) { ... }
* \endcode
227
*/
228
extern DECLSPEC SDL_bool SDLCALL SDL_GetWindowWMInfo(SDL_Window * window,
229
SDL_SysWMinfo * info);
230
231
232
233
/* Ends C function definitions when using C++ */
#ifdef __cplusplus
234
/* *INDENT-OFF* */
235
}
236
/* *INDENT-ON* */
237
238
239
240
#endif
#include "close_code.h"
#endif /* _SDL_syswm_h */
241
242
/* vi: set ts=4 sw=4 expandtab: */