\r
/* -- PLATFORM-SPECIFIC INCLUDES ------------------------------------------- */\r
\r
-/* All Win32 headers depend on the huge windows.h recursive include.\r
- * Note: Lower-case header names are used, for best cross-platform\r
- * compatibility.\r
- */\r
-#if TARGET_HOST_MS_WINDOWS && !defined(_WIN32_WCE)\r
-# include <windows.h>\r
-# include <windowsx.h>\r
-# include <mmsystem.h>\r
-/* CYGWIN does not have tchar.h, but has TEXT(x), defined in winnt.h. */\r
-# ifndef __CYGWIN__\r
-# include <tchar.h>\r
-# else\r
-# define _TEXT(x) TEXT(x)\r
-# define _T(x) TEXT(x)\r
-# endif\r
-\r
-#elif TARGET_HOST_POSIX_X11\r
+#if TARGET_HOST_POSIX_X11\r
# include <GL/glx.h>\r
# include <X11/Xlib.h>\r
# include <X11/Xatom.h>\r
# endif\r
#endif\r
\r
-#if TARGET_HOST_MS_WINDOWS\r
-# define HAVE_VFPRINTF 1\r
-#endif\r
-\r
-/* MinGW may lack a prototype for ChangeDisplaySettingsEx() (depending on the version?) */\r
-#if TARGET_HOST_MS_WINDOWS && !defined(ChangeDisplaySettingsEx)\r
-LONG WINAPI ChangeDisplaySettingsExA(LPCSTR,LPDEVMODEA,HWND,DWORD,LPVOID);\r
-LONG WINAPI ChangeDisplaySettingsExW(LPCWSTR,LPDEVMODEW,HWND,DWORD,LPVOID);\r
-# ifdef UNICODE\r
-# define ChangeDisplaySettingsEx ChangeDisplaySettingsExW\r
-# else\r
-# define ChangeDisplaySettingsEx ChangeDisplaySettingsExA\r
-# endif\r
-#endif\r
-\r
#if defined(_MSC_VER) || defined(__WATCOMC__)\r
/* strdup() is non-standard, for all but POSIX-2001 */\r
#define strdup _strdup\r
*/\r
typedef Window SFG_WindowHandleType ;\r
typedef GLXContext SFG_WindowContextType ;\r
+typedef struct tagSFG_PlatformContext SFG_PlatformContext;\r
+struct tagSFG_PlatformContext\r
+{\r
+ GLXFBConfig* FBConfig; /* The window's FBConfig */\r
+};\r
+\r
\r
\r
#endif\r
SFG_WindowHandleType Handle; /* The window's handle */\r
SFG_WindowContextType Context; /* The window's OpenGL/WGL context */\r
\r
-#if TARGET_HOST_POSIX_X11\r
- GLXFBConfig* FBConfig; /* The window's FBConfig */\r
-#elif TARGET_HOST_MS_WINDOWS\r
- HDC Device; /* The window's device context */\r
-#endif\r
+ SFG_PlatformContext pContext; /* The window's FBConfig (X11) or device context (Windows) */\r
\r
int DoubleBuffered; /* Treat the window as double-buffered */\r
};\r
\r
/* Window's state description. This structure should be kept portable. */\r
+#if TARGET_HOST_POSIX_X11\r
+typedef struct tagSFG_PlatformWindowState SFG_PlatformWindowState;\r
+struct tagSFG_PlatformWindowState\r
+{\r
+ int OldWidth; /* Window width from before a resize */\r
+ int OldHeight; /* " height " " " " */\r
+};\r
+#endif\r
+\r
+\r
typedef struct tagSFG_WindowState SFG_WindowState;\r
struct tagSFG_WindowState\r
{\r
/* Note that on Windows, sizes always refer to the client area, thus without the window decorations */\r
int Width; /* Window's width in pixels */\r
int Height; /* The same about the height */\r
-#if TARGET_HOST_POSIX_X11\r
- int OldWidth; /* Window width from before a resize */\r
- int OldHeight; /* " height " " " " */\r
-#elif TARGET_HOST_MS_WINDOWS\r
- RECT OldRect; /* window rect - stored before the window is made fullscreen */\r
- DWORD OldStyle; /* window style - stored before the window is made fullscreen */\r
-#endif\r
+\r
+ SFG_PlatformWindowState pWState; /* Window width/height (X11) or rectangle/style (Windows) from before a resize */\r
\r
GLboolean Redisplay; /* Do we have to redisplay? */\r
GLboolean Visible; /* Is the window visible now */\r
const SFG_StrokeChar** Characters; /* The characters mapping */\r
};\r
\r
+\r
+/* -- JOYSTICK-SPECIFIC STRUCTURES AND TYPES ------------------------------- */\r
+/* XXX It might be better to poll the operating system for the numbers of buttons and\r
+ * XXX axes and then dynamically allocate the arrays.\r
+ */\r
+#define _JS_MAX_BUTTONS 32\r
+\r
+#if TARGET_HOST_MACINTOSH\r
+# define _JS_MAX_AXES 9\r
+typedef struct tagSFG_PlatformJoystick SFG_PlatformJoystick;\r
+struct tagSFG_PlatformJoystick\r
+{\r
+#define ISP_NUM_AXIS 9\r
+#define ISP_NUM_NEEDS 41\r
+ ISpElementReference isp_elem [ ISP_NUM_NEEDS ];\r
+ ISpNeed isp_needs [ ISP_NUM_NEEDS ];\r
+};\r
+#endif\r
+\r
+#if TARGET_HOST_MAC_OSX\r
+# define _JS_MAX_AXES 16\r
+typedef struct tagSFG_PlatformJoystick SFG_PlatformJoystick;\r
+struct tagSFG_PlatformJoystick\r
+{\r
+ IOHIDDeviceInterface ** hidDev;\r
+ IOHIDElementCookie buttonCookies[41];\r
+ IOHIDElementCookie axisCookies[_JS_MAX_AXES];\r
+/* The next two variables are not used anywhere */\r
+/* long minReport[_JS_MAX_AXES],\r
+ * maxReport[_JS_MAX_AXES];\r
+ */\r
+};\r
+#endif\r
+\r
+#if TARGET_HOST_POSIX_X11\r
+# define _JS_MAX_AXES 16\r
+typedef struct tagSFG_PlatformJoystick SFG_PlatformJoystick;\r
+struct tagSFG_PlatformJoystick\r
+{\r
+# if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__)\r
+ struct os_specific_s *os;\r
+# endif\r
+\r
+# ifdef JS_NEW\r
+ struct js_event js;\r
+ int tmp_buttons;\r
+ float tmp_axes [ _JS_MAX_AXES ];\r
+# else\r
+ struct JS_DATA_TYPE js;\r
+# endif\r
+\r
+ char fname [ 128 ];\r
+ int fd;\r
+};\r
+#endif\r
+\r
+/*\r
+ * Definition of "SFG_Joystick" structure -- based on JS's "jsJoystick" object class.\r
+ * See "js.h" lines 80-178.\r
+ */\r
+typedef struct tagSFG_Joystick SFG_Joystick;\r
+struct tagSFG_Joystick\r
+{\r
+ SFG_PlatformJoystick pJoystick;\r
+\r
+ int id;\r
+ GLboolean error;\r
+ char name [ 128 ];\r
+ int num_axes;\r
+ int num_buttons;\r
+\r
+ float dead_band[ _JS_MAX_AXES ];\r
+ float saturate [ _JS_MAX_AXES ];\r
+ float center [ _JS_MAX_AXES ];\r
+ float max [ _JS_MAX_AXES ];\r
+ float min [ _JS_MAX_AXES ];\r
+};\r
+\r
+\r
+\r
/* -- GLOBAL VARIABLES EXPORTS --------------------------------------------- */\r
\r
/* Freeglut display related stuff (initialized once per session) */\r
\r
SFG_Proc fghGetProcAddress( const char *procName );\r
\r
-#if TARGET_HOST_MS_WINDOWS\r
-extern void (__cdecl *__glutExitFunc)( int return_value );\r
-#endif\r
-\r
#endif /* FREEGLUT_INTERNAL_H */\r
\r
/*** END OF FILE ***/\r