44 { $DEFINE SDL_VIDEO_DRIVER_WINDOWS}
55{ $ENDIF}
66
7- { $IF DEFINED (LINUX) OR DEFINED(UNIX) AND NOT DEFINED(ANDROID) }
8- { $IFNDEF DARWIN}
7+ { $IF DEFINED (LINUX) OR DEFINED(UNIX)}
8+ { $IF NOT (DEFINED( DARWIN) OR DEFINED(ANDROID)) }
99 { $DEFINE SDL_VIDEO_DRIVER_X11}
1010 { $ENDIF}
1111{ $IFEND}
1212
13+ (*
14+ * Disabled because FPC does not ship a DirectFB unit.
15+ * If you have some working DirectDB bindings, feel welcome to enable this and check if it breaks anything.
16+ *)
17+ { $UNDEFINE SDL_VIDEO_DRIVER_DIRECTFB}
18+
1319{ $IFDEF DARWIN}
1420 { $DEFINE SDL_VIDEO_DRIVER_COCOA}
1521{ $ENDIF}
1622
23+ (*
24+ * Disabled because it's a Mac-specific video driver and we have no means of testing it.
25+ * If you own a Mac, feel welcome to enable this and check if it actually compiles and doesn't break anything.
26+ *)
27+ { $UNDEFINE SDL_VIDEO_DRIVER_UIKIT}
28+
29+ (*
30+ * Disabled because FPC does not ship a Wayland unit.
31+ * If you have some working Wayland bindings, feel welcome to enable this,
32+ * check if it actually compiles and doesn't break anything.
33+ *)
34+ { $UNDEFINE SDL_VIDEO_DRIVER_WAYLAND}
35+
36+ (*
37+ * Disabled because FPC does not ship a Mir unit.
38+ * Also, support for Mir has been removed in SDL 2.0.10.
39+ *)
40+ { $UNDEFINE SDL_VIDEO_DRIVER_MIR}
41+
42+ (*
43+ * Disabled because FPC does not support WinRT.
44+ *)
45+ { $UNDEFINE SDL_VIDEO_DRIVER_WINRT}
46+
1747{ $IFDEF ANDROID}
1848 { $DEFINE SDL_VIDEO_DRIVER_ANDROID}
1949{ $ENDIF}
2050
21- { $IFDEF VIVANTE}
22- { $DEFINE SDL_VIDEO_DRIVER_VIVANTE}
51+ (*
52+ * Disabled because this is an embedded platform and we have no means of testing this.
53+ * If you're actually working with Vivante, feel welcome to enable this
54+ * and check if it compiles and works properly.
55+ *)
56+ { $UNDEFINE SDL_VIDEO_DRIVER_VIVANTE}
57+
58+ { $IFDEF OS2}
59+ { $DEFINE SDL_VIDEO_DRIVER_OS2}
60+ { $ENDIF}
61+
62+ { $IFDEF HAIKU}
63+ { $DEFINE SDL_VIDEO_DRIVER_HAIKU}
2364{ $ENDIF}
2465
2566
@@ -34,143 +75,159 @@ Type
3475 SDL_SYSWM_DIRECTFB,
3576 SDL_SYSWM_COCOA,
3677 SDL_SYSWM_UIKIT,
37- SDL_SYSWM_WAYLAND, // Since SDL 2.0.2
78+ SDL_SYSWM_WAYLAND, // Since SDL 2.0.2 - REMOVED in SDL 2.0.10!
3879 SDL_SYSWM_MIR, // Since SDL 2.0.2
3980 SDL_SYSWM_WINRT, // Since SDL 2.0.3
4081 SDL_SYSWM_ANDROID, // Since SDL 2.0.4
41- SDL_SYSWM_VIVANTE // Since SDL 2.0.5
82+ SDL_SYSWM_VIVANTE, // Since SDL 2.0.5
83+ SDL_SYSWM_OS2, // Since SDL 2.0.6
84+ SDL_SYSWM_HAIKU // Since SDL 2.0.12
4285 );
4386
44- // / sdl_syswm.h uses anonymous structs, declared right in SDL_SysWMmsg.
45- // / Since Pascal does not allow this, we workaround by introducing named types
46- // / before the proper TSDL_SysWMmsg definition.
87+ // / sdl_syswm.h uses anonymous structs, declared right in SDL_SysWMmsg and SDL_SysWMinfo.
88+ // / Since Pascal does not allow this, we workaround by introducing named types.
4789{ $IFDEF SDL_VIDEO_DRIVER_WINDOWS}
4890 __SYSWM_WINDOWS = record
4991 hwnd: HWND; { **< The window for the message }
50- msg: uInt; { **< The type of message *}
92+ msg: uInt; { **< The type of message *}
5193 wParam: WPARAM; { **< WORD message parameter *}
5294 lParam: LPARAM; { **< WORD message parameter *}
5395 end ;
54- { $ENDIF}
55- { $IFDEF SDL_VIDEO_DRIVER_X11}
56- __SYSWM_X11 = record
57- event: { $IFDEF FPC} TXEvent { $ELSE} XEvent { $ENDIF} ;
58- end ;
59- { $ENDIF}
60- { $IFDEF SDL_VIDEO_DRIVER_DIRECTFB}
61- __SYSWM_DIRECTFB = record
62- event: DFBEvent;
63- end ;
64- { $ENDIF}
65- { $IFDEF SDL_VIDEO_DRIVER_COCOA}
66- __SYSWM_COCOA = record
67- (* No Cocoa window events yet *)
68- dummy: integer;
69- end ;
70- { $ENDIF}
71- { $IFDEF SDL_VIDEO_DRIVER_UIKIT}
72- __SYSWM_UIKIT = record
73- (* No UIKit window events yet *)
74- dummy: integer;
75- end ;
76- { $ENDIF}
77- { $IFDEF SDL_VIDEO_DRIVER_VIVANTE}
78- __SYSWM_VIVANTE = record
79- (* No Vivante window events yet *)
80- dummy: integer;
81- end ;
82- { $ENDIF}
83-
84- { **
85- * The custom event structure.
86- *}
87- PSDL_SysWMmsg = ^TSDL_SysWMmsg;
88- TSDL_SysWMmsg = record
89- version: TSDL_version;
90- subsystem: TSDL_SYSWM_TYPE;
91- { $IFDEF SDL_VIDEO_DRIVER_WINDOWS}
92- win: __SYSWM_WINDOWS;
93- { $ELSE} { $IFDEF SDL_VIDEO_DRIVER_X11}
94- x11: __SYSWM_X11;
95- { $ELSE} { $IFDEF SDL_VIDEO_DRIVER_DIRECTFB}
96- dfb: __SYSWM_DIRECTFB;
97- { $ELSE} { $IFDEF SDL_VIDEO_DRIVER_COCOA}
98- cocoa: __SYSWM_COCOA;
99- { $ELSE} { $IFDEF SDL_VIDEO_DRIVER_UIKIT}
100- uikit: __SYSWM_UIKIT;
101- { $ELSE} { $IFDEF SDL_VIDEO_DRIVER_VIVANTE}
102- vivante: __SYSWM_VIVANTE;
103- { $ELSE}
104- (* Cannot have empty record case *)
105- dummy: integer;
106- { $ENDIF} { $ENDIF} { $ENDIF} { $ENDIF} { $ENDIF} { $ENDIF}
107- end ;
108-
109- // / Once again, sdl_syswm.h uses anonymous structs, declared right in SDL_SysWMinfo.
110- // / We workaround by introducing named types before the proper TSDL_SysWMinfo definition.
111- { $IFDEF SDL_VIDEO_DRIVER_WINDOWS}
11296 __WMINFO_WINDOWS = record
11397 window: HWND; { **< The window handle *}
11498 hdc: HDC; { **< The window device context *}
11599 end ;
116100{ $ENDIF}
117- { $IFDEF SDL_VIDEO_DRIVER_WINRT} // Since SDL 2.0.3
118- __WMINFO_WINRT = record
119- window: IInspectable; { **< The WinRT CoreWindow *}
120- end ;
121- { $ENDIF}
101+
122102{ $IFDEF SDL_VIDEO_DRIVER_X11}
103+ __SYSWM_X11 = record
104+ event: { $IFDEF FPC} TXEvent { $ELSE} XEvent { $ENDIF} ;
105+ end ;
123106 __WMINFO_X11 = record
124107 display: PDisplay; { **< The X11 display *}
125108 window: TWindow; { **< The X11 window *}
126109 end ;
127110{ $ENDIF}
111+
128112{ $IFDEF SDL_VIDEO_DRIVER_DIRECTFB}
129- __WMINFO_DFB = record
113+ __SYSWM_DIRECTFB = record
114+ event: DFBEvent;
115+ end ;
116+ __WMINFO_DIRECTFB = record
130117 dfb: IDirectFB; { **< The directfb main interface *}
131118 window: IDirectFBWindow; { **< The directfb window handle *}
132119 surface: IDirectFBSurface; { **< The directfb client surface *}
133120 end ;
134121{ $ENDIF}
122+
135123{ $IFDEF SDL_VIDEO_DRIVER_COCOA}
124+ __SYSWM_COCOA = record
125+ (* No Cocoa window events yet *)
126+ dummy: integer;
127+ end ;
136128 __WMINFO_COCOA = record
137- window: NSWindow; { * The Cocoa window *}
129+ window: NSWindow; { * The Cocoa window *}
138130 end ;
139131{ $ENDIF}
132+
140133{ $IFDEF SDL_VIDEO_DRIVER_UIKIT}
134+ __SYSWM_UIKIT = record
135+ (* No UIKit window events yet *)
136+ dummy: integer;
137+ end ;
141138 __WMINFO_UIKIT = record
142139 window: UIWindow; { * The UIKit window *}
143140 framebuffer: GLuint; { * The GL view's Framebuffer Object. It must be bound when rendering to the screen using GL. *}
144141 colorbuffer: GLuint; { * The GL view's color Renderbuffer Object. It must be bound when SDL_GL_SwapWindow is called. *}
145142 resolveFramebuffer: GLuint; { * The Framebuffer Object which holds the resolve color Renderbuffer, when MSAA is used. *}
146143 end ;
147144{ $ENDIF}
148- { $IFDEF SDL_VIDEO_DRIVER_WAYLAND} // Since SDL 2.0.2
145+
146+ { $IFDEF SDL_VIDEO_DRIVER_WAYLAND}
149147 __WMINFO_WAYLAND = record
150148 display: wl_display; { **< Wayland display *}
151149 surface: wl_surface; { **< Wayland surface *}
152150 shell_surface: wl_shell_surface; { **< Wayland shell_surface (window manager handle) *}
153151 end ;
154152{ $ENDIF}
155- { $IFDEF SDL_VIDEO_DRIVER_MIR} // Since SDL 2.0.2
153+
154+ { $IFDEF SDL_VIDEO_DRIVER_MIR}
156155 __WMINFO_MIR = record
157156 connection: PMirConnection; { **< Mir display server connection *}
158157 surface: PMirSurface; { **< Mir surface *}
159158 end ;
160159{ $ENDIF}
160+
161+ { $IFDEF SDL_VIDEO_DRIVER_WINRT}
162+ __WMINFO_WINRT = record
163+ window: IInspectable; { **< The WinRT CoreWindow *}
164+ end ;
165+ { $ENDIF}
166+
161167{ $IFDEF SDL_VIDEO_DRIVER_ANDROID}
162168 __WMINFO_ANDROID = record
163169 window: Pointer; // PANativeWindow;
164170 surface: Pointer; // PEGLSurface;
165171 end ;
166172{ $ENDIF}
173+
167174{ $IFDEF SDL_VIDEO_DRIVER_VIVANTE}
175+ __SYSWM_VIVANTE = record
176+ (* No Vivante window events yet *)
177+ dummy: integer;
178+ end ;
168179 __WMINFO_VIVANTE = record
169180 display: EGLNativeDisplayType;
170181 window: EGLNativeWindowType;
171182 end ;
172183{ $ENDIF}
173184
185+ { $IFDEF SDL_VIDEO_DRIVER_OS2}
186+ __SYSWM_OS2 = record
187+ fFrame: Boolean; { **< TRUE if hwnd is a frame window *}
188+ hwnd: HWND; { **< The window receiving the message *}
189+ msg: uInt; { **< The message identifier *}
190+ mp1: MPARAM; { **< The first first message parameter *}
191+ mp2: MPARAM; { **< The second first message parameter *}
192+ end ;
193+ __WMINFO_OS2 = record
194+ hwnd: HWND; { **< The window handle *}
195+ hwndFrame: HWND; { **< The frame window handle *}
196+ end ;
197+ { $ENDIF}
198+
199+
200+ { **
201+ * The custom event structure.
202+ *}
203+ PSDL_SysWMmsg = ^TSDL_SysWMmsg;
204+ TSDL_SysWMmsg = record
205+ version: TSDL_version;
206+ case subsystem: TSDL_SYSWM_TYPE of
207+ { $IFDEF SDL_VIDEO_DRIVER_WINDOWS}
208+ SDL_SYSWM_WINDOWS: (win: __SYSWM_WINDOWS);
209+ { $ENDIF}
210+ { $IFDEF SDL_VIDEO_DRIVER_X11}
211+ SDL_SYSWM_X11: (x11: __SYSWM_X11);
212+ { $ENDIF}
213+ { $IFDEF SDL_VIDEO_DRIVER_DIRECTFB}
214+ SDL_SYSWM_DIRECTFB: (dfb: __SYSWM_DIRECTFB);
215+ { $ENDIF}
216+ { $IFDEF SDL_VIDEO_DRIVER_COCOA}
217+ SDL_SYSWM_COCOA: (cocoa: __SYSWM_COCOA);
218+ { $ENDIF}
219+ { $IFDEF SDL_VIDEO_DRIVER_UIKIT}
220+ SDL_SYSWM_UIKIT: (uikit: __SYSWM_UIKIT);
221+ { $ENDIF}
222+ { $IFDEF SDL_VIDEO_DRIVER_VIVANTE}
223+ SDL_SYSWM_VIVANTE: (vivante: __SYSWM_VIVANTE);
224+ { $ENDIF}
225+ { $IFDEF SDL_VIDEO_DRIVER_OS2}
226+ SDL_SYSWM_OS2: (os2: __SYSWM_OS2);
227+ { $ENDIF}
228+ SDL_SYSWM_UNKNOWN: (dummy: integer);
229+ end ;
230+
174231{ **
175232 * The custom window manager information structure.
176233 *
@@ -180,31 +237,42 @@ Type
180237 PSDL_SysWMinfo = ^TSDL_SysWMinfo;
181238 TSDL_SysWMinfo = record
182239 version: TSDL_version;
183- subsystem: TSDL_SYSWM_TYPE;
184- { $IFDEF SDL_VIDEO_DRIVER_WINDOWS}
185- win : __WMINFO_WINDOWS;
186- { $ELSE} { $IFDEF SDL_VIDEO_DRIVER_WINRT}
187- winrt : __WMINFO_WINRT;
188- { $ELSE} { $IFDEF SDL_VIDEO_DRIVER_X11}
189- x11 : __WMINFO_X11;
190- { $ELSE} { $IFDEF SDL_VIDEO_DRIVER_DIRECTFB}
191- dfb : __WMINFO_DFB;
192- { $ELSE} { $IFDEF SDL_VIDEO_DRIVER_COCOA}
193- cocoa : __WMINFO_COCOA;
194- { $ELSE} { $IFDEF SDL_VIDEO_DRIVER_UIKIT}
195- uikit : __WMINFO_UIKIT;
196- { $ELSE} { $IFDEF SDL_VIDEO_DRIVER_WAYLAND}
197- wl : __WMINFO_WAYLAND;
198- { $ELSE} { $IFDEF SDL_VIDEO_DRIVER_MIR}
199- mir : __WMINFO_MIR;
200- { $ELSE} { $IFDEF SDL_VIDEO_DRIVER_ANDROID}
201- android: __WMINFO_ANDROID;
202- { $ELSE} { $IFDEF SDL_VIDEO_DRIVER_VIVANTE}
203- vivante: __WMINFO_VIVANTE;
204- { $ELSE}
205- (* Cannot have empty record case *)
206- dummy: integer;
207- { $ENDIF} { $ENDIF} { $ENDIF} { $ENDIF} { $ENDIF} { $ENDIF} { $ENDIF} { $ENDIF} { $ENDIF} { $ENDIF}
240+ case subsystem: TSDL_SYSWM_TYPE of
241+ { $IFDEF SDL_VIDEO_DRIVER_WINDOWS}
242+ SDL_SYSWM_WINDOWS: (win : __WMINFO_WINDOWS);
243+ { $ENDIF}
244+ { $IFDEF SDL_VIDEO_DRIVER_WINRT}
245+ SDL_SYSWM_WINRT: (winrt : __WMINFO_WINRT);
246+ { $ENDIF}
247+ { $IFDEF SDL_VIDEO_DRIVER_X11}
248+ SDL_SYSWM_X11: (x11 : __WMINFO_X11);
249+ { $ENDIF}
250+ { $IFDEF SDL_VIDEO_DRIVER_DIRECTFB}
251+ SDL_SYSWM_DIRECTFB: (dfb : __WMINFO_DIRECTFB);
252+ { $ENDIF}
253+ { $IFDEF SDL_VIDEO_DRIVER_COCOA}
254+ SDL_SYSWM_COCOA: (cocoa : __WMINFO_COCOA);
255+ { $ENDIF}
256+ { $IFDEF SDL_VIDEO_DRIVER_UIKIT}
257+ SDL_SYSWM_UIKIT: (uikit : __WMINFO_UIKIT);
258+ { $ENDIF}
259+ { $IFDEF SDL_VIDEO_DRIVER_WAYLAND}
260+ SDL_SYSWM_WAYLAND: (wl : __WMINFO_WAYLAND);
261+ { $ENDIF}
262+ { $IFDEF SDL_VIDEO_DRIVER_MIR}
263+ SDL_SYSWM_MIR: (mir : __WMINFO_MIR);
264+ { $ENDIF}
265+ { $IFDEF SDL_VIDEO_DRIVER_ANDROID}
266+ SDL_SYSWM_ANDROID: (android: __WMINFO_ANDROID);
267+ { $ENDIF}
268+ { $IFDEF SDL_VIDEO_DRIVER_VIVANTE}
269+ SDL_SYSWM_VIVANTE: (vivante: __WMINFO_VIVANTE);
270+ { $ENDIF}
271+ { $IFDEF SDL_VIDEO_DRIVER_OS2}
272+ SDL_SYSWM_OS2: (os2: __WMINFO_OS2);
273+ { $ENDIF}
274+ (* Ensure this union is always 64 bytes (8 64-bit pointers) *)
275+ SDL_SYSWM_UNKNOWN: (dummy: array [0 ..63 ] of Byte);
208276 end ;
209277
210278{ * Function prototypes *}
0 commit comments