*/\r
\r
#include <GL/freeglut.h>\r
-#include "freeglut_internal_mswin.h"\r
+#include "../Common/freeglut_internal.h"\r
\r
\r
extern void fghRedrawWindow ( SFG_Window *window );\r
\r
+extern void fgNewWGLCreateContext( SFG_Window* window );\r
+extern GLboolean fgSetupPixelFormat( SFG_Window* window, GLboolean checkOnly,\r
+ unsigned char layer_type );\r
\r
-void fghPlatformReshapeWindow ( SFG_Window *window, int width, int height )\r
+#ifdef WM_TOUCH\r
+typedef BOOL (WINAPI *pGetTouchInputInfo)(HTOUCHINPUT,UINT,PTOUCHINPUT,int);\r
+typedef BOOL (WINAPI *pCloseTouchInputHandle)(HTOUCHINPUT);\r
+static pGetTouchInputInfo fghGetTouchInputInfo = (pGetTouchInputInfo)0xDEADBEEF;\r
+static pCloseTouchInputHandle fghCloseTouchInputHandle = (pCloseTouchInputHandle)0xDEADBEEF;\r
+#endif\r
+\r
+/* \r
+ * Helper functions for getting client area from the window rect\r
+ * and the window rect from the client area given the style of the window\r
+ * (or a valid window pointer from which the style can be queried).\r
+ */\r
+extern void fghComputeWindowRectFromClientArea_QueryWindow( const SFG_Window *window, RECT *clientRect, BOOL posIsOutside );\r
+extern RECT fghGetClientArea ( const SFG_Window *window, BOOL wantPosOutside );\r
+\r
+\r
+void fgPlatformReshapeWindow ( SFG_Window *window, int width, int height )\r
{\r
RECT windowRect;\r
\r
}\r
\r
\r
-void fghcbPlatformDisplayWindow ( SFG_Window *window )\r
+void fgPlatformDisplayWindow ( SFG_Window *window )\r
{\r
RedrawWindow(\r
window->Window.Handle, NULL, NULL,\r
}\r
\r
\r
-void fghPlatformSleepForEvents( long msec )\r
+unsigned long fgPlatformSystemTime ( void )\r
+{\r
+#if defined(_WIN32_WCE)\r
+ return GetTickCount();\r
+#else\r
+ return timeGetTime();\r
+#endif\r
+}\r
+\r
+\r
+void fgPlatformSleepForEvents( long msec )\r
{\r
MsgWaitForMultipleObjects( 0, NULL, FALSE, msec, QS_ALLINPUT );\r
}\r
\r
\r
-void fghProcessSingleEvent ( void )\r
+void fgPlatformProcessSingleEvent ( void )\r
{\r
MSG stMsg;\r
\r
\r
\r
\r
-void fghMainLoopPreliminaryWork ( void )\r
+void fgPlatformMainLoopPreliminaryWork ( void )\r
{\r
SFG_Window *window = (SFG_Window *)fgStructure.Windows.First ;\r
\r
/*\r
* Determine a GLUT modifer mask based on MS-WINDOWS system info.\r
*/\r
-static int fghGetModifiers (void)\r
+static int fgPlatformGetModifiers (void)\r
{\r
return\r
( ( ( GetKeyState( VK_LSHIFT ) < 0 ) ||\r
/*\r
* The window procedure for handling Win32 events\r
*/\r
-LRESULT CALLBACK fgWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam,\r
- LPARAM lParam )\r
+LRESULT CALLBACK fgPlatformWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam,\r
+ LPARAM lParam )\r
{\r
static unsigned char lControl = 0, rControl = 0, lShift = 0,\r
rShift = 0, lAlt = 0, rAlt = 0;\r
/* The window structure is passed as the creation structure parameter... */\r
window = (SFG_Window *) (((LPCREATESTRUCT) lParam)->lpCreateParams);\r
FREEGLUT_INTERNAL_ERROR_EXIT ( ( window != NULL ), "Cannot create window",\r
- "fgWindowProc" );\r
+ "fgPlatformWindowProc" );\r
\r
window->Window.Handle = hWnd;\r
- window->Window.Device = GetDC( hWnd );\r
+ window->Window.pContext.Device = GetDC( hWnd );\r
if( window->IsMenu )\r
{\r
unsigned int current_DisplayMode = fgState.DisplayMode;\r
fgState.DisplayMode = current_DisplayMode;\r
\r
if( fgStructure.MenuContext )\r
- wglMakeCurrent( window->Window.Device,\r
+ wglMakeCurrent( window->Window.pContext.Device,\r
fgStructure.MenuContext->MContext\r
);\r
else\r
fgStructure.MenuContext =\r
(SFG_MenuContext *)malloc( sizeof(SFG_MenuContext) );\r
fgStructure.MenuContext->MContext =\r
- wglCreateContext( window->Window.Device );\r
+ wglCreateContext( window->Window.pContext.Device );\r
}\r
\r
/* window->Window.Context = wglGetCurrentContext (); */\r
- window->Window.Context = wglCreateContext( window->Window.Device );\r
+ window->Window.Context = wglCreateContext( window->Window.pContext.Device );\r
}\r
else\r
{\r
\r
if( ! fgState.UseCurrentContext )\r
window->Window.Context =\r
- wglCreateContext( window->Window.Device );\r
+ wglCreateContext( window->Window.pContext.Device );\r
else\r
{\r
window->Window.Context = wglGetCurrentContext( );\r
if( ! window->Window.Context )\r
window->Window.Context =\r
- wglCreateContext( window->Window.Device );\r
+ wglCreateContext( window->Window.pContext.Device );\r
}\r
\r
#if !defined(_WIN32_WCE)\r
fgSetWindow( current_window );\r
}\r
\r
- ReleaseDC( window->Window.Handle, window->Window.Device );\r
+ ReleaseDC( window->Window.Handle, window->Window.pContext.Device );\r
\r
#if defined(_WIN32_WCE)\r
/* Take over button handling */\r
/* printf("WM_SETFOCUS: %p\n", window ); */\r
lRet = DefWindowProc( hWnd, uMsg, wParam, lParam );\r
INVOKE_WCB( *window, Entry, ( GLUT_ENTERED ) );\r
+\r
+ UpdateWindow ( hWnd );\r
break;\r
\r
case WM_KILLFOCUS:\r
}\r
SetFocus(window->Window.Handle);\r
\r
- fgState.Modifiers = fghGetModifiers( );\r
+ fgState.Modifiers = fgPlatformGetModifiers( );\r
\r
if( ( wParam & MK_LBUTTON ) ||\r
( wParam & MK_MBUTTON ) ||\r
break;\r
\r
fgSetWindow( window );\r
- fgState.Modifiers = fghGetModifiers( );\r
+ fgState.Modifiers = fgPlatformGetModifiers( );\r
\r
INVOKE_WCB(\r
*window, Mouse,\r
break;\r
\r
fgSetWindow( window );\r
- fgState.Modifiers = fghGetModifiers( );\r
+ fgState.Modifiers = fgPlatformGetModifiers( );\r
\r
/*\r
* XXX Should use WHEEL_DELTA instead of 120\r
* Remember the current modifiers state. This is done here in order\r
* to make sure the VK_DELETE keyboard callback is executed properly.\r
*/\r
- fgState.Modifiers = fghGetModifiers( );\r
+ fgState.Modifiers = fgPlatformGetModifiers( );\r
\r
GetCursorPos( &mouse_pos );\r
ScreenToClient( window->Window.Handle, &mouse_pos );\r
* Remember the current modifiers state. This is done here in order\r
* to make sure the VK_DELETE keyboard callback is executed properly.\r
*/\r
- fgState.Modifiers = fghGetModifiers( );\r
+ fgState.Modifiers = fgPlatformGetModifiers( );\r
\r
GetCursorPos( &mouse_pos );\r
ScreenToClient( window->Window.Handle, &mouse_pos );\r
if( (fgState.KeyRepeat==GLUT_KEY_REPEAT_OFF || window->State.IgnoreKeyRepeat==GL_TRUE) && (HIWORD(lParam) & KF_REPEAT) )\r
break;\r
\r
- fgState.Modifiers = fghGetModifiers( );\r
+ fgState.Modifiers = fgPlatformGetModifiers( );\r
INVOKE_WCB( *window, Keyboard,\r
( (char)wParam,\r
window->State.MouseX, window->State.MouseY )\r