Mercurial > sdl-ios-xcode
changeset 4900:69d9db65f248
Merged the Windows custom window system hooks into the union used by X11.
Added Cocoa custom window system hooks
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Mon, 27 Sep 2010 01:24:05 -0700 |
parents | 5d529386db73 |
children | deadc1219bea |
files | include/SDL_syswm.h src/video/SDL_video.c src/video/cocoa/SDL_cocoawindow.m src/video/win32/SDL_win32events.c src/video/win32/SDL_win32window.c src/video/x11/SDL_x11events.c |
diffstat | 6 files changed, 75 insertions(+), 118 deletions(-) [+] |
line wrap: on
line diff
--- a/include/SDL_syswm.h Mon Sep 27 00:50:46 2010 -0700 +++ b/include/SDL_syswm.h Mon Sep 27 01:24:05 2010 -0700 @@ -54,8 +54,12 @@ struct SDL_SysWMinfo; #else +#if defined(SDL_VIDEO_DRIVER_WIN32) +#define WIN32_LEAN_AND_MEAN +#include <windows.h> +#endif + /* This is the structure for custom window manager events */ -#if defined(SDL_VIDEO_DRIVER_X11) || defined(SDL_VIDEO_DRIVER_DIRECTFB) #if defined(SDL_VIDEO_DRIVER_X11) #if defined(__APPLE__) && defined(__MACH__) /* conflicts with Quickdraw.h */ @@ -75,21 +79,29 @@ #if defined(SDL_VIDEO_DRIVER_DIRECTFB) #include <directfb/directfb.h> #endif + +#if defined(SDL_VIDEO_DRIVER_COCOA) +#ifdef __OBJC__ +#include <Cocoa/Cocoa.h> +#else +typedef struct _NSWindow NSWindow; +#endif +#endif + /** - * These are the various supported subsystems under UNIX. + * These are the various supported windowing subsystems */ typedef enum { -#if defined(SDL_VIDEO_DRIVER_X11) + SDL_SYSWM_UNKNOWN, + SDL_SYSWM_WINDOWS, SDL_SYSWM_X11, -#endif -#if defined(SDL_VIDEO_DRIVER_DIRECTFB) SDL_SYSWM_DIRECTFB, -#endif + SDL_SYSWM_COCOA, } SDL_SYSWM_TYPE; /** - * The UNIX custom event structure. + * The custom event structure. */ struct SDL_SysWMmsg { @@ -97,17 +109,35 @@ SDL_SYSWM_TYPE subsystem; union { +#if defined(SDL_VIDEO_DRIVER_WIN32) + 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; +#endif #if defined(SDL_VIDEO_DRIVER_X11) - XEvent xevent; + struct { + XEvent event; + } x11; #endif #if defined(SDL_VIDEO_DRIVER_DIRECTFB) - DFBEvent dfb_event; + struct { + DFBEvent event; + } dfb; #endif - } event; +#if defined(SDL_VIDEO_DRIVER_COCOA) + struct + { + /* No Cocoa window events yet */ + } cocoa; +#endif + } msg; }; /** - * The UNIX custom window manager information structure. + * The custom window manager information structure. * * When this structure is returned, it holds information about which * low level system it is using, and will be one of SDL_SYSWM_TYPE. @@ -118,11 +148,17 @@ SDL_SYSWM_TYPE subsystem; union { +#if defined(SDL_VIDEO_DRIVER_WIN32) + struct + { + HWND window; /**< The Win32 display window */ + } win; +#endif #if defined(SDL_VIDEO_DRIVER_X11) struct { - Display *display; /**< The X11 display */ - Window window; /**< The X11 display window */ + Display *display; /**< The X11 display */ + Window window; /**< The X11 display window */ } x11; #endif #if defined(SDL_VIDEO_DRIVER_DIRECTFB) @@ -131,106 +167,17 @@ IDirectFB *dfb; /**< The directfb main interface */ IDirectFBWindow *window; /**< The directfb window handle */ IDirectFBSurface *surface; /**< The directfb client surface */ - } directfb; + } dfb; +#endif +#if defined(SDL_VIDEO_DRIVER_COCOA) + struct + { + NSWindow *window; + } cocoa; #endif } info; }; -#elif defined(SDL_VIDEO_DRIVER_WIN32) -#define WIN32_LEAN_AND_MEAN -#include <windows.h> - -/** - * The windows custom event structure. - */ -struct SDL_SysWMmsg -{ - SDL_version version; - HWND hwnd; /**< The window for the message */ - UINT msg; /**< The type of message */ - WPARAM wParam; /**< WORD message parameter */ - LPARAM lParam; /**< LONG message parameter */ -}; - -/** - * The windows custom window manager information structure. - */ -struct SDL_SysWMinfo -{ - SDL_version version; - HWND window; /**< The Win32 display window */ -}; - -#elif defined(SDL_VIDEO_DRIVER_RISCOS) - -/** - * RISC OS custom event structure. - */ -struct SDL_SysWMmsg -{ - SDL_version version; - int eventCode; /**< The window for the message */ - int pollBlock[64]; -}; - -/** - * The RISC OS custom window manager information structure. - */ -struct SDL_SysWMinfo -{ - SDL_version version; - int wimpVersion; /**< Wimp version running under */ - int taskHandle; /**< The RISC OS task handle */ - int window; /**< The RISC OS display window */ -}; - -#elif defined(SDL_VIDEO_DRIVER_PHOTON) || defined(SDL_VIDEO_DRIVER_QNXGF) -#include <sys/neutrino.h> -#if defined(SDL_VIDEO_OPENGL_ES) -#include <gf/gf.h> -#endif /* SDL_VIDEO_OPENGL_ES */ -#include <Ph.h> - -/** - * The QNX custom event structure. - */ -struct SDL_SysWMmsg -{ - SDL_version version; - int data; -}; - -/** - * The QNX Photon custom window manager information structure. - */ -struct SDL_SysWMinfo -{ - SDL_version version; - int data; -}; - -#else - -/** - * The generic custom event structure. - */ -struct SDL_SysWMmsg -{ - SDL_version version; - int data; -}; - -/** - * The generic custom window manager information structure. - */ -struct SDL_SysWMinfo -{ - SDL_version version; - int data; -}; - -#endif /* video driver type */ - #endif /* SDL_PROTOTYPES_ONLY */ typedef struct SDL_SysWMinfo SDL_SysWMinfo;
--- a/src/video/SDL_video.c Mon Sep 27 00:50:46 2010 -0700 +++ b/src/video/SDL_video.c Mon Sep 27 01:24:05 2010 -0700 @@ -40,12 +40,14 @@ #if SDL_VIDEO_OPENGL #include "SDL_opengl.h" +#endif /* SDL_VIDEO_OPENGL */ + +#include "SDL_syswm.h" /* On Windows, windows.h defines CreateWindow */ #ifdef CreateWindow #undef CreateWindow #endif -#endif /* SDL_VIDEO_OPENGL */ /* Available video drivers */ static VideoBootStrap *bootstrap[] = { @@ -3384,6 +3386,11 @@ { CHECK_WINDOW_MAGIC(window, SDL_FALSE); + if (!info) { + return SDL_FALSE; + } + info->subsystem = SDL_SYSWM_UNKNOWN; + if (!_this->GetWindowWMInfo) { return SDL_FALSE; }
--- a/src/video/cocoa/SDL_cocoawindow.m Mon Sep 27 00:50:46 2010 -0700 +++ b/src/video/cocoa/SDL_cocoawindow.m Mon Sep 27 01:24:05 2010 -0700 @@ -704,10 +704,11 @@ SDL_bool Cocoa_GetWindowWMInfo(_THIS, SDL_Window * window, SDL_SysWMinfo * info) { - //NSWindow *nswindow = ((SDL_WindowData *) window->driverdata)->nswindow; + NSWindow *nswindow = ((SDL_WindowData *) window->driverdata)->nswindow; if (info->version.major <= SDL_MAJOR_VERSION) { - //info->window = nswindow; + info->subsystem = SDL_SYSWM_COCOA; + info->info.cocoa.window = nswindow; return SDL_TRUE; } else { SDL_SetError("Application not compiled with SDL %d.%d\n",
--- a/src/video/win32/SDL_win32events.c Mon Sep 27 00:50:46 2010 -0700 +++ b/src/video/win32/SDL_win32events.c Mon Sep 27 01:24:05 2010 -0700 @@ -113,10 +113,11 @@ SDL_SysWMmsg wmmsg; SDL_VERSION(&wmmsg.version); - wmmsg.hwnd = hwnd; - wmmsg.msg = msg; - wmmsg.wParam = wParam; - wmmsg.lParam = lParam; + wmmsg.subsystem = SDL_SYSWM_WINDOWS; + wmmsg.msg.win.hwnd = hwnd; + wmmsg.msg.win.msg = msg; + wmmsg.msg.win.wParam = wParam; + wmmsg.msg.win.lParam = lParam; SDL_SendSysWMEvent(&wmmsg); }
--- a/src/video/win32/SDL_win32window.c Mon Sep 27 00:50:46 2010 -0700 +++ b/src/video/win32/SDL_win32window.c Mon Sep 27 01:24:05 2010 -0700 @@ -551,7 +551,8 @@ { HWND hwnd = ((SDL_WindowData *) window->driverdata)->hwnd; if (info->version.major <= SDL_MAJOR_VERSION) { - info->window = hwnd; + info->subsystem = SDL_SYSWM_WINDOWS; + info->info.win.window = hwnd; return SDL_TRUE; } else { SDL_SetError("Application not compiled with SDL %d.%d\n",
--- a/src/video/x11/SDL_x11events.c Mon Sep 27 00:50:46 2010 -0700 +++ b/src/video/x11/SDL_x11events.c Mon Sep 27 01:24:05 2010 -0700 @@ -90,7 +90,7 @@ SDL_VERSION(&wmmsg.version); wmmsg.subsystem = SDL_SYSWM_X11; - wmmsg.event.xevent = xevent; + wmmsg.msg.x11.event = xevent; SDL_SendSysWMEvent(&wmmsg); }