include/SDL_syswm.h
author Ryan C. Gordon
Thu, 08 Sep 2005 06:49:20 +0000
changeset 1137 0f9d463bf09c
parent 1133 609c060fd2a2
child 1312 c9b51268668f
permissions -rw-r--r--
Byte order detection fixes in SDL_endian.h ...

--ryan.




From: Mike Frysinger <vapier@gentoo.org>
To: sdl@libsdl.org
Date: Thu, 1 Sep 2005 20:25:01 -0400
Subject: [SDL] [patch] add support for arm/thumb and superh to endian

find attached a patch to add support for detecting endian on superh and
arm/thumb ... also, ive incorporated a patch from Fedora which will gather
the correct endian on a linux host from the system endian.h instead of just
trying to maintain an ever-growing list of architectures
-mike
     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 */