diff --git a/sdlsyswm.inc b/sdlsyswm.inc index 28a9ca02..b1d08f2f 100644 --- a/sdlsyswm.inc +++ b/sdlsyswm.inc @@ -4,22 +4,63 @@ {$DEFINE SDL_VIDEO_DRIVER_WINDOWS} {$ENDIF} -{$IF DEFINED (LINUX) OR DEFINED(UNIX) AND NOT DEFINED(ANDROID)} - {$IFNDEF DARWIN} +{$IF DEFINED (LINUX) OR DEFINED(UNIX)} + {$IF NOT (DEFINED(DARWIN) OR DEFINED(ANDROID))} {$DEFINE SDL_VIDEO_DRIVER_X11} {$ENDIF} {$IFEND} +(* + * Disabled because FPC does not ship a DirectFB unit. + * If you have some working DirectDB bindings, feel welcome to enable this and check if it breaks anything. + *) +{$UNDEFINE SDL_VIDEO_DRIVER_DIRECTFB} + {$IFDEF DARWIN} {$DEFINE SDL_VIDEO_DRIVER_COCOA} {$ENDIF} +(* + * Disabled because it's a Mac-specific video driver and we have no means of testing it. + * If you own a Mac, feel welcome to enable this and check if it actually compiles and doesn't break anything. + *) +{$UNDEFINE SDL_VIDEO_DRIVER_UIKIT} + +(* + * Disabled because FPC does not ship a Wayland unit. + * If you have some working Wayland bindings, feel welcome to enable this, + * check if it actually compiles and doesn't break anything. + *) +{$UNDEFINE SDL_VIDEO_DRIVER_WAYLAND} + +(* + * Disabled because FPC does not ship a Mir unit. + * Also, support for Mir has been removed in SDL 2.0.10. + *) +{$UNDEFINE SDL_VIDEO_DRIVER_MIR} + +(* + * Disabled because FPC does not support WinRT. + *) +{$UNDEFINE SDL_VIDEO_DRIVER_WINRT} + {$IFDEF ANDROID} {$DEFINE SDL_VIDEO_DRIVER_ANDROID} {$ENDIF} -{$IFDEF VIVANTE} - {$DEFINE SDL_VIDEO_DRIVER_VIVANTE} +(* + * Disabled because this is an embedded platform and we have no means of testing this. + * If you're actually working with Vivante, feel welcome to enable this + * and check if it compiles and works properly. + *) +{$UNDEFINE SDL_VIDEO_DRIVER_VIVANTE} + +{$IFDEF OS2} + {$DEFINE SDL_VIDEO_DRIVER_OS2} +{$ENDIF} + +{$IFDEF HAIKU} + {$DEFINE SDL_VIDEO_DRIVER_HAIKU} {$ENDIF} @@ -34,110 +75,66 @@ Type SDL_SYSWM_DIRECTFB, SDL_SYSWM_COCOA, SDL_SYSWM_UIKIT, - SDL_SYSWM_WAYLAND, // Since SDL 2.0.2 + SDL_SYSWM_WAYLAND, // Since SDL 2.0.2 - REMOVED in SDL 2.0.10! SDL_SYSWM_MIR, // Since SDL 2.0.2 SDL_SYSWM_WINRT, // Since SDL 2.0.3 SDL_SYSWM_ANDROID, // Since SDL 2.0.4 - SDL_SYSWM_VIVANTE // Since SDL 2.0.5 + SDL_SYSWM_VIVANTE, // Since SDL 2.0.5 + SDL_SYSWM_OS2, // Since SDL 2.0.6 + SDL_SYSWM_HAIKU // Since SDL 2.0.12 ); -/// sdl_syswm.h uses anonymous structs, declared right in SDL_SysWMmsg. -/// Since Pascal does not allow this, we workaround by introducing named types -/// before the proper TSDL_SysWMmsg definition. +/// sdl_syswm.h uses anonymous structs, declared right in SDL_SysWMmsg and SDL_SysWMinfo. +/// Since Pascal does not allow this, we workaround by introducing named types. {$IFDEF SDL_VIDEO_DRIVER_WINDOWS} __SYSWM_WINDOWS = record hwnd: HWND; {**< The window for the message } - msg: uInt; {**< The type of message *} + msg: uInt; {**< The type of message *} wParam: WPARAM; {**< WORD message parameter *} lParam: LPARAM; {**< WORD message parameter *} end; -{$ENDIF} -{$IFDEF SDL_VIDEO_DRIVER_X11} - __SYSWM_X11 = record - event: {$IFDEF FPC} TXEvent {$ELSE} XEvent {$ENDIF}; - end; -{$ENDIF} -{$IFDEF SDL_VIDEO_DRIVER_DIRECTFB} - __SYSWM_DIRECTFB = record - event: DFBEvent; - end; -{$ENDIF} -{$IFDEF SDL_VIDEO_DRIVER_COCOA} - __SYSWM_COCOA = record - (* No Cocoa window events yet *) - dummy: integer; - end; -{$ENDIF} -{$IFDEF SDL_VIDEO_DRIVER_UIKIT} - __SYSWM_UIKIT = record - (* No UIKit window events yet *) - dummy: integer; - end; -{$ENDIF} -{$IFDEF SDL_VIDEO_DRIVER_VIVANTE} - __SYSWM_VIVANTE = record - (* No Vivante window events yet *) - dummy: integer; - end; -{$ENDIF} - -{** - * The custom event structure. - *} - PSDL_SysWMmsg = ^TSDL_SysWMmsg; - TSDL_SysWMmsg = record - version: TSDL_version; - subsystem: TSDL_SYSWM_TYPE; - {$IFDEF SDL_VIDEO_DRIVER_WINDOWS} - win: __SYSWM_WINDOWS; - {$ELSE} {$IFDEF SDL_VIDEO_DRIVER_X11} - x11: __SYSWM_X11; - {$ELSE} {$IFDEF SDL_VIDEO_DRIVER_DIRECTFB} - dfb: __SYSWM_DIRECTFB; - {$ELSE} {$IFDEF SDL_VIDEO_DRIVER_COCOA} - cocoa: __SYSWM_COCOA; - {$ELSE} {$IFDEF SDL_VIDEO_DRIVER_UIKIT} - uikit: __SYSWM_UIKIT; - {$ELSE} {$IFDEF SDL_VIDEO_DRIVER_VIVANTE} - vivante: __SYSWM_VIVANTE; - {$ELSE} - (* Cannot have empty record case *) - dummy: integer; - {$ENDIF} {$ENDIF} {$ENDIF} {$ENDIF} {$ENDIF} {$ENDIF} - end; - -/// Once again, sdl_syswm.h uses anonymous structs, declared right in SDL_SysWMinfo. -/// We workaround by introducing named types before the proper TSDL_SysWMinfo definition. -{$IFDEF SDL_VIDEO_DRIVER_WINDOWS} __WMINFO_WINDOWS = record window: HWND; {**< The window handle *} hdc: HDC; {**< The window device context *} end; {$ENDIF} -{$IFDEF SDL_VIDEO_DRIVER_WINRT} // Since SDL 2.0.3 - __WMINFO_WINRT = record - window: IInspectable; {**< The WinRT CoreWindow *} - end; -{$ENDIF} + {$IFDEF SDL_VIDEO_DRIVER_X11} + __SYSWM_X11 = record + event: {$IFDEF FPC} TXEvent {$ELSE} XEvent {$ENDIF}; + end; __WMINFO_X11 = record display: PDisplay; {**< The X11 display *} window: TWindow; {**< The X11 window *} end; {$ENDIF} + {$IFDEF SDL_VIDEO_DRIVER_DIRECTFB} - __WMINFO_DFB = record + __SYSWM_DIRECTFB = record + event: DFBEvent; + end; + __WMINFO_DIRECTFB = record dfb: IDirectFB; {**< The directfb main interface *} window: IDirectFBWindow; {**< The directfb window handle *} surface: IDirectFBSurface; {**< The directfb client surface *} end; {$ENDIF} + {$IFDEF SDL_VIDEO_DRIVER_COCOA} + __SYSWM_COCOA = record + (* No Cocoa window events yet *) + dummy: integer; + end; __WMINFO_COCOA = record - window: NSWindow; {* The Cocoa window *} + window: NSWindow; {* The Cocoa window *} end; {$ENDIF} + {$IFDEF SDL_VIDEO_DRIVER_UIKIT} + __SYSWM_UIKIT = record + (* No UIKit window events yet *) + dummy: integer; + end; __WMINFO_UIKIT = record window: UIWindow; {* The UIKit window *} framebuffer: GLuint; {* The GL view's Framebuffer Object. It must be bound when rendering to the screen using GL. *} @@ -145,32 +142,92 @@ Type resolveFramebuffer: GLuint; {* The Framebuffer Object which holds the resolve color Renderbuffer, when MSAA is used. *} end; {$ENDIF} -{$IFDEF SDL_VIDEO_DRIVER_WAYLAND} // Since SDL 2.0.2 + +{$IFDEF SDL_VIDEO_DRIVER_WAYLAND} __WMINFO_WAYLAND = record display: wl_display; {**< Wayland display *} surface: wl_surface; {**< Wayland surface *} shell_surface: wl_shell_surface; {**< Wayland shell_surface (window manager handle) *} end; {$ENDIF} -{$IFDEF SDL_VIDEO_DRIVER_MIR} // Since SDL 2.0.2 + +{$IFDEF SDL_VIDEO_DRIVER_MIR} __WMINFO_MIR = record connection: PMirConnection; {**< Mir display server connection *} surface: PMirSurface; {**< Mir surface *} end; {$ENDIF} + +{$IFDEF SDL_VIDEO_DRIVER_WINRT} + __WMINFO_WINRT = record + window: IInspectable; {**< The WinRT CoreWindow *} + end; +{$ENDIF} + {$IFDEF SDL_VIDEO_DRIVER_ANDROID} __WMINFO_ANDROID = record window: Pointer; // PANativeWindow; surface: Pointer; // PEGLSurface; end; {$ENDIF} + {$IFDEF SDL_VIDEO_DRIVER_VIVANTE} + __SYSWM_VIVANTE = record + (* No Vivante window events yet *) + dummy: integer; + end; __WMINFO_VIVANTE = record display: EGLNativeDisplayType; window: EGLNativeWindowType; end; {$ENDIF} +{$IFDEF SDL_VIDEO_DRIVER_OS2} + __SYSWM_OS2 = record + fFrame: Boolean; {**< TRUE if hwnd is a frame window *} + hwnd: HWND; {**< The window receiving the message *} + msg: uInt; {**< The message identifier *} + mp1: MPARAM; {**< The first first message parameter *} + mp2: MPARAM; {**< The second first message parameter *} + end; + __WMINFO_OS2 = record + hwnd: HWND; {**< The window handle *} + hwndFrame: HWND; {**< The frame window handle *} + end; +{$ENDIF} + + +{** + * The custom event structure. + *} + PSDL_SysWMmsg = ^TSDL_SysWMmsg; + TSDL_SysWMmsg = record + version: TSDL_version; + case subsystem: TSDL_SYSWM_TYPE of + {$IFDEF SDL_VIDEO_DRIVER_WINDOWS} + SDL_SYSWM_WINDOWS: (win: __SYSWM_WINDOWS); + {$ENDIF} + {$IFDEF SDL_VIDEO_DRIVER_X11} + SDL_SYSWM_X11: (x11: __SYSWM_X11); + {$ENDIF} + {$IFDEF SDL_VIDEO_DRIVER_DIRECTFB} + SDL_SYSWM_DIRECTFB: (dfb: __SYSWM_DIRECTFB); + {$ENDIF} + {$IFDEF SDL_VIDEO_DRIVER_COCOA} + SDL_SYSWM_COCOA: (cocoa: __SYSWM_COCOA); + {$ENDIF} + {$IFDEF SDL_VIDEO_DRIVER_UIKIT} + SDL_SYSWM_UIKIT: (uikit: __SYSWM_UIKIT); + {$ENDIF} + {$IFDEF SDL_VIDEO_DRIVER_VIVANTE} + SDL_SYSWM_VIVANTE: (vivante: __SYSWM_VIVANTE); + {$ENDIF} + {$IFDEF SDL_VIDEO_DRIVER_OS2} + SDL_SYSWM_OS2: (os2: __SYSWM_OS2); + {$ENDIF} + SDL_SYSWM_UNKNOWN: (dummy: integer); + end; + {** * The custom window manager information structure. * @@ -180,31 +237,42 @@ Type PSDL_SysWMinfo = ^TSDL_SysWMinfo; TSDL_SysWMinfo = record version: TSDL_version; - subsystem: TSDL_SYSWM_TYPE; - {$IFDEF SDL_VIDEO_DRIVER_WINDOWS} - win : __WMINFO_WINDOWS; - {$ELSE} {$IFDEF SDL_VIDEO_DRIVER_WINRT} - winrt : __WMINFO_WINRT; - {$ELSE} {$IFDEF SDL_VIDEO_DRIVER_X11} - x11 : __WMINFO_X11; - {$ELSE} {$IFDEF SDL_VIDEO_DRIVER_DIRECTFB} - dfb : __WMINFO_DFB; - {$ELSE} {$IFDEF SDL_VIDEO_DRIVER_COCOA} - cocoa : __WMINFO_COCOA; - {$ELSE} {$IFDEF SDL_VIDEO_DRIVER_UIKIT} - uikit : __WMINFO_UIKIT; - {$ELSE} {$IFDEF SDL_VIDEO_DRIVER_WAYLAND} - wl : __WMINFO_WAYLAND; - {$ELSE} {$IFDEF SDL_VIDEO_DRIVER_MIR} - mir : __WMINFO_MIR; - {$ELSE} {$IFDEF SDL_VIDEO_DRIVER_ANDROID} - android: __WMINFO_ANDROID; - {$ELSE} {$IFDEF SDL_VIDEO_DRIVER_VIVANTE} - vivante: __WMINFO_VIVANTE; - {$ELSE} - (* Cannot have empty record case *) - dummy: integer; - {$ENDIF} {$ENDIF} {$ENDIF} {$ENDIF} {$ENDIF} {$ENDIF} {$ENDIF} {$ENDIF} {$ENDIF} {$ENDIF} + case subsystem: TSDL_SYSWM_TYPE of + {$IFDEF SDL_VIDEO_DRIVER_WINDOWS} + SDL_SYSWM_WINDOWS: (win : __WMINFO_WINDOWS); + {$ENDIF} + {$IFDEF SDL_VIDEO_DRIVER_WINRT} + SDL_SYSWM_WINRT: (winrt : __WMINFO_WINRT); + {$ENDIF} + {$IFDEF SDL_VIDEO_DRIVER_X11} + SDL_SYSWM_X11: (x11 : __WMINFO_X11); + {$ENDIF} + {$IFDEF SDL_VIDEO_DRIVER_DIRECTFB} + SDL_SYSWM_DIRECTFB: (dfb : __WMINFO_DIRECTFB); + {$ENDIF} + {$IFDEF SDL_VIDEO_DRIVER_COCOA} + SDL_SYSWM_COCOA: (cocoa : __WMINFO_COCOA); + {$ENDIF} + {$IFDEF SDL_VIDEO_DRIVER_UIKIT} + SDL_SYSWM_UIKIT: (uikit : __WMINFO_UIKIT); + {$ENDIF} + {$IFDEF SDL_VIDEO_DRIVER_WAYLAND} + SDL_SYSWM_WAYLAND: (wl : __WMINFO_WAYLAND); + {$ENDIF} + {$IFDEF SDL_VIDEO_DRIVER_MIR} + SDL_SYSWM_MIR: (mir : __WMINFO_MIR); + {$ENDIF} + {$IFDEF SDL_VIDEO_DRIVER_ANDROID} + SDL_SYSWM_ANDROID: (android: __WMINFO_ANDROID); + {$ENDIF} + {$IFDEF SDL_VIDEO_DRIVER_VIVANTE} + SDL_SYSWM_VIVANTE: (vivante: __WMINFO_VIVANTE); + {$ENDIF} + {$IFDEF SDL_VIDEO_DRIVER_OS2} + SDL_SYSWM_OS2: (os2: __WMINFO_OS2); + {$ENDIF} + (* Ensure this union is always 64 bytes (8 64-bit pointers) *) + SDL_SYSWM_UNKNOWN: (dummy: array[0..63] of Byte); end; {* Function prototypes *}