include/SDL_syswm.h
author Ryan C. Gordon <icculus@icculus.org>
Thu, 08 Sep 2005 06:16:14 +0000
changeset 1133 609c060fd2a2
parent 1035 974ba6ae0fa3
child 1312 c9b51268668f
permissions -rw-r--r--
The MacOSX Carbon/Cocoa/X11 all in one library patch. Relevant emails:


To: SDL Developers <sdl@libsdl.org>
From: =?ISO-8859-1?Q?Anders_F_Bj=F6rklund?= <afb@algonet.se>
Date: Mon, 30 May 2005 23:29:04 +0200
Subject: [SDL] Mac OS X Video Drivers [patch]

I've updated/added the Carbon and X11 video drivers
to the Mac OS X port of SDL 1.2 (the CVS version),
and made the Cocoa driver and runtime *optional*.

The default is still Cocoa, and the "Quartz" driver.
But you can now also use "toolbox" for Carbon, and
"x11" for running with Apple's (or other) X11 server:

export SDL_VIDEODRIVER=x11
export SDL_VIDEO_GL_DRIVER=/usr/X11R6/lib/libGL.dylib

It also checks if the frameworks are available, by a:
#include <Carbon/Carbon.h> or #import <Cocoa/Cocoa.h>
(this should make it configure on plain Darwin as well?)


Here are the new configure targets:
--enable-video-cocoa use Cocoa/Quartz video driver default=yes
--enable-video-carbon use Carbon/QuickDraw video driver default=yes
--enable-video-x11 use X11 video driver default=no

./configure --enable-video-cocoa --enable-video-carbon
--enable-video-x11 \
--x-includes=/usr/X11R6/include --x-libraries=/usr/X11R6/lib

The Carbon version is just an updated version of the old
SDL driver for Mac OS 9, and could probably be improved...
(but it does work, including the Carbon version of SDLmain)

If you disable cocoa, you can run with -framework Carbon only,
and the C version of SDL_main.c. And if you disable carbon too,
you can still use the X11 version which doesn't require SDLmain.

I updated the DrawSprocket version, but did not include it.
(no blitters or VRAM GWorlds etc. available on OS X anyway)
Besides for Mac OS 9, I don't think there's any use for it ?

And note that any performance on Mac OS X equals OpenGL anyway...
You can get "fair" software SDL results on captured CG displays,
but for decent frame rates you need to be using GL for rendering.


Finally, here is the patch itself:
http://www.algonet.se/~afb/SDL-12CVS-macvideo.patch

--anders

PS. It says "video", but as usual it applies to mouse/keyboard too.


------


To: A list for developers using the SDL library <sdl@libsdl.org>
From: =?ISO-8859-1?Q?Anders_F_Bj=F6rklund?= <afb@algonet.se>
Date: Sun, 4 Sep 2005 10:02:15 +0200
Subject: [SDL] Updated Mac patch

Updated the previous Mac patch to disable Carbon by default.
Also "fixed" the SDL.spec again, so that it builds on Darwin.

http://www.algonet.se/~afb/SDL-1.2.9-mac.patch
Also applied fine to SDL12 CVS, when I tried it.
     1 /*
     2     SDL - Simple DirectMedia Layer
     3     Copyright (C) 1997-2004 Sam Lantinga
     4 
     5     This library is free software; you can redistribute it and/or
     6     modify it under the terms of the GNU Library General Public
     7     License as published by the Free Software Foundation; either
     8     version 2 of the License, or (at your option) any later version.
     9 
    10     This library is distributed in the hope that it will be useful,
    11     but WITHOUT ANY WARRANTY; without even the implied warranty of
    12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    13     Library General Public License for more details.
    14 
    15     You should have received a copy of the GNU Library General Public
    16     License along with this library; if not, write to the Free
    17     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
    18 
    19     Sam Lantinga
    20     slouken@libsdl.org
    21 */
    22 
    23 #ifdef SAVE_RCSID
    24 static char rcsid =
    25  "@(#) $Id$";
    26 #endif
    27 
    28 /* Include file for SDL custom system window manager hooks */
    29 
    30 #ifndef _SDL_syswm_h
    31 #define _SDL_syswm_h
    32 
    33 #include "SDL_version.h"
    34 
    35 #include "begin_code.h"
    36 /* Set up for C function definitions, even when using C++ */
    37 #ifdef __cplusplus
    38 extern "C" {
    39 #endif
    40 
    41 /* Your application has access to a special type of event 'SDL_SYSWMEVENT',
    42    which contains window-manager specific information and arrives whenever
    43    an unhandled window event occurs.  This event is ignored by default, but
    44    you can enable it with SDL_EventState()
    45 */
    46 #ifdef SDL_PROTOTYPES_ONLY
    47 struct SDL_SysWMinfo;
    48 typedef struct SDL_SysWMinfo SDL_SysWMinfo;
    49 #else
    50 
    51 #if defined(__APPLE__) && defined(__MACH__)
    52 // conflicts with Quickdraw.h
    53 #define Cursor X11Cursor
    54 #endif
    55 
    56 /* This is the structure for custom window manager events */
    57 #if (defined(unix) || defined(__unix__) || defined(_AIX) || \
    58          defined(__OpenBSD__) || defined(__NetBSD__) || \
    59          (defined(__APPLE__) && defined(__MACH__))) && \
    60     (!defined(DISABLE_X11) && !defined(__CYGWIN32__) && !defined(ENABLE_NANOX) && \
    61          !defined(__QNXNTO__))
    62  /* AIX is unix, of course, but the native compiler CSet doesn't define unix */
    63 #include <X11/Xlib.h>
    64 #include <X11/Xatom.h>
    65 
    66 #if defined(__APPLE__) && defined(__MACH__)
    67 // matches the re-define above
    68 #undef Cursor
    69 #endif
    70 
    71 /* These are the various supported subsystems under UNIX */
    72 typedef enum {
    73 	SDL_SYSWM_X11
    74 } SDL_SYSWM_TYPE;
    75 
    76 /* The UNIX custom event structure */
    77 struct SDL_SysWMmsg {
    78 	SDL_version version;
    79 	SDL_SYSWM_TYPE subsystem;
    80 	union {
    81 	    XEvent xevent;
    82 	} event;
    83 };
    84 
    85 /* The UNIX custom window manager information structure.
    86    When this structure is returned, it holds information about which
    87    low level system it is using, and will be one of SDL_SYSWM_TYPE.
    88  */
    89 typedef struct SDL_SysWMinfo {
    90 	SDL_version version;
    91 	SDL_SYSWM_TYPE subsystem;
    92 	union {
    93 	    struct {
    94 	    	Display *display;	/* The X11 display */
    95 	    	Window window;		/* The X11 display window */
    96 		/* These locking functions should be called around
    97                    any X11 functions using the display variable.
    98                    They lock the event thread, so should not be
    99 		   called around event functions or from event filters.
   100 		 */
   101 		void (*lock_func)(void);
   102 		void (*unlock_func)(void);
   103 
   104 		/* Introduced in SDL 1.0.2 */
   105 	    	Window fswindow;	/* The X11 fullscreen window */
   106 	    	Window wmwindow;	/* The X11 managed input window */
   107 	    } x11;
   108 	} info;
   109 } SDL_SysWMinfo;
   110 
   111 #elif defined(ENABLE_NANOX)
   112 #include <microwin/nano-X.h>
   113 
   114 /* The generic custom event structure */
   115 struct SDL_SysWMmsg {
   116 	SDL_version version;
   117 	int data;
   118 };
   119 
   120 /* The windows custom window manager information structure */
   121 typedef struct SDL_SysWMinfo {
   122 	SDL_version version ;
   123 	GR_WINDOW_ID window ;	/* The display window */
   124 } SDL_SysWMinfo;
   125 
   126 #elif defined(WIN32)
   127 #define WIN32_LEAN_AND_MEAN
   128 #include <windows.h>
   129 
   130 /* The windows custom event structure */
   131 struct SDL_SysWMmsg {
   132 	SDL_version version;
   133 	HWND hwnd;			/* The window for the message */
   134 	UINT msg;			/* The type of message */
   135 	WPARAM wParam;			/* WORD message parameter */
   136 	LPARAM lParam;			/* LONG message parameter */
   137 };
   138 
   139 /* The windows custom window manager information structure */
   140 typedef struct SDL_SysWMinfo {
   141 	SDL_version version;
   142 	HWND window;			/* The Win32 display window */
   143 	HGLRC hglrc;			/* The OpenGL context, if any */
   144 } SDL_SysWMinfo;
   145 
   146 #elif defined(__riscos__)
   147 
   148 /* RISC OS custom event structure */
   149 struct SDL_SysWMmsg {
   150 	SDL_version version;
   151 	int eventCode;		/* The window for the message */
   152 	int pollBlock[64];
   153 };
   154 
   155 /* The RISC OS custom window manager information structure */
   156 typedef struct SDL_SysWMinfo {
   157 	SDL_version version;
   158 	int wimpVersion;    /* Wimp version running under */
   159 	int taskHandle;     /* The RISC OS task handle */
   160 	int window;		/* The RISC OS display window */
   161 } SDL_SysWMinfo;
   162 
   163 #elif defined(__QNXNTO__)
   164 #include <sys/neutrino.h>
   165 #include <Ph.h>
   166 
   167 /* The QNX custom event structure */
   168 struct SDL_SysWMmsg {
   169 	SDL_version version;
   170 	int data;
   171 };
   172 
   173 /* The QNX custom window manager information structure */
   174 typedef struct SDL_SysWMinfo {
   175 	SDL_version version;
   176 	int data;
   177 } SDL_SysWMinfo;
   178 
   179 #else
   180 
   181 /* The generic custom event structure */
   182 struct SDL_SysWMmsg {
   183 	SDL_version version;
   184 	int data;
   185 };
   186 
   187 /* The generic custom window manager information structure */
   188 typedef struct SDL_SysWMinfo {
   189 	SDL_version version;
   190 	int data;
   191 } SDL_SysWMinfo;
   192 
   193 #endif /* OS type */
   194 
   195 #endif /* SDL_PROTOTYPES_ONLY */
   196 
   197 /* Function prototypes */
   198 /*
   199  * This function gives you custom hooks into the window manager information.
   200  * It fills the structure pointed to by 'info' with custom information and
   201  * returns 1 if the function is implemented.  If it's not implemented, or
   202  * the version member of the 'info' structure is invalid, it returns 0. 
   203  *
   204  * You typically use this function like this:
   205  * SDL_SysWMInfo info;
   206  * SDL_VERSION(&info.version);
   207  * if ( SDL_GetWMInfo(&info) ) { ... }
   208  */
   209 extern DECLSPEC int SDLCALL SDL_GetWMInfo(SDL_SysWMinfo *info);
   210 
   211 
   212 /* Ends C function definitions when using C++ */
   213 #ifdef __cplusplus
   214 }
   215 #endif
   216 #include "close_code.h"
   217 
   218 #endif /* _SDL_syswm_h */