b37ad8c5e6e4104f38a10c5adbb84ba3b8baaec2
[freeglut] / src / mswin / freeglut_internal_mswin.h
1 /*\r
2  * freeglut_internal_mswin.h\r
3  *\r
4  * The freeglut library private include file.\r
5  *\r
6  * Copyright (c) 2012 Stephen J. Baker. All Rights Reserved.\r
7  * Written by John F. Fay, <fayjf@sourceforge.net>\r
8  * Creation date: Thu Jan 19, 2012\r
9  *\r
10  * Permission is hereby granted, free of charge, to any person obtaining a\r
11  * copy of this software and associated documentation files (the "Software"),\r
12  * to deal in the Software without restriction, including without limitation\r
13  * the rights to use, copy, modify, merge, publish, distribute, sublicense,\r
14  * and/or sell copies of the Software, and to permit persons to whom the\r
15  * Software is furnished to do so, subject to the following conditions:\r
16  *\r
17  * The above copyright notice and this permission notice shall be included\r
18  * in all copies or substantial portions of the Software.\r
19  *\r
20  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r
21  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
22  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL\r
23  * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r
24  * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
25  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
26  */\r
27 \r
28 #ifndef  FREEGLUT_INTERNAL_MSWIN_H\r
29 #define  FREEGLUT_INTERNAL_MSWIN_H\r
30 \r
31 \r
32 /* All Win32 headers depend on the huge windows.h recursive include.\r
33  * Note: Lower-case header names are used, for best cross-platform\r
34  * compatibility.\r
35  */\r
36 #if !defined(_WIN32_WCE)\r
37 #    include <windows.h>\r
38 #    include <windowsx.h>\r
39 #    include <mmsystem.h>\r
40 /* CYGWIN does not have tchar.h, but has TEXT(x), defined in winnt.h. */\r
41 #    ifndef __CYGWIN__\r
42 #      include <tchar.h>\r
43 #    else\r
44 #      define _TEXT(x) TEXT(x)\r
45 #      define _T(x)    TEXT(x)\r
46 #    endif\r
47 \r
48 #endif\r
49 \r
50 \r
51 #define  HAVE_VFPRINTF 1\r
52 \r
53 /* MinGW may lack a prototype for ChangeDisplaySettingsEx() (depending on the version?) */\r
54 #if !defined(ChangeDisplaySettingsEx)\r
55 LONG WINAPI ChangeDisplaySettingsExA(LPCSTR,LPDEVMODEA,HWND,DWORD,LPVOID);\r
56 LONG WINAPI ChangeDisplaySettingsExW(LPCWSTR,LPDEVMODEW,HWND,DWORD,LPVOID);\r
57 #    ifdef UNICODE\r
58 #        define ChangeDisplaySettingsEx ChangeDisplaySettingsExW\r
59 #    else\r
60 #        define ChangeDisplaySettingsEx ChangeDisplaySettingsExA\r
61 #    endif\r
62 #endif\r
63 \r
64 \r
65 /* Structure Definitions */\r
66 \r
67 typedef struct tagSFG_PlatformDisplay SFG_PlatformDisplay;\r
68 struct tagSFG_PlatformDisplay\r
69 {\r
70     HINSTANCE       Instance;           /* The application's instance        */\r
71     DEVMODE         DisplayMode;        /* Desktop's display settings        */\r
72     char           *DisplayName;        /* Display name for multi display support*/ \r
73 };\r
74 \r
75 /*\r
76  * Make "freeglut" window handle and context types so that we don't need so\r
77  * much conditionally-compiled code later in the library.\r
78  */\r
79 typedef HWND    SFG_WindowHandleType ;\r
80 typedef HGLRC   SFG_WindowContextType ;\r
81 typedef struct tagSFG_PlatformContext SFG_PlatformContext;\r
82 struct tagSFG_PlatformContext\r
83 {\r
84     HDC             Device;          /* The window's device context         */\r
85 };\r
86 \r
87 \r
88 /* Window's state description. This structure should be kept portable. */\r
89 typedef struct tagSFG_PlatformWindowState SFG_PlatformWindowState;\r
90 struct tagSFG_PlatformWindowState\r
91 {\r
92     RECT            OldRect;            /* window rect - stored before the window is made fullscreen */\r
93     DWORD           OldStyle;           /* window style - stored before the window is made fullscreen */\r
94 };\r
95 \r
96 \r
97 \r
98 /* Joystick-Specific Definitions */\r
99 #if !defined(_WIN32_WCE)\r
100 #    define _JS_MAX_AXES  8\r
101 typedef struct tagSFG_PlatformJoystick SFG_PlatformJoystick;\r
102 struct tagSFG_PlatformJoystick\r
103 {\r
104     JOYCAPS     jsCaps;\r
105     JOYINFOEX   js;\r
106     UINT        js_id;\r
107 };\r
108 #endif\r
109 \r
110 \r
111 /* Menu font and color definitions */\r
112 #define  FREEGLUT_MENU_FONT    GLUT_BITMAP_8_BY_13\r
113 \r
114 #define  FREEGLUT_MENU_PEN_FORE_COLORS   {0.0f,  0.0f,  0.0f,  1.0f}\r
115 #define  FREEGLUT_MENU_PEN_BACK_COLORS   {0.85f, 0.85f, 0.85f, 1.0f}\r
116 #define  FREEGLUT_MENU_PEN_HFORE_COLORS  {1.0f,  1.0f,  1.0f,  1.0f}\r
117 #define  FREEGLUT_MENU_PEN_HBACK_COLORS  {0.15f, 0.15f, 0.45f, 1.0f}\r
118 \r
119 \r
120 /* Function to be called on exit */\r
121 extern void (__cdecl *__glutExitFunc)( int return_value );\r
122 \r
123 \r
124 #endif  /* FREEGLUT_INTERNAL_MSWIN_H */