#include <sys/stat.h>
#elif TARGET_HOST_WIN32
#elif TARGET_HOST_WINCE
- // including gx.h does only work in c++ (thanks MS...),
- // so we define this on our own...
-struct GXKeyList {
- short vkUp; // key for up
- POINT ptUp; // x,y position of key/button. Not on screen but in screen coordinates.
- short vkDown;
- POINT ptDown;
- short vkLeft;
- POINT ptLeft;
- short vkRight;
- POINT ptRight;
- short vkA;
- POINT ptA;
- short vkB;
- POINT ptB;
- short vkC;
- POINT ptC;
- short vkStart;
- POINT ptStart;
-};
-extern void wince_GetDefaultKeys(void* nData, int iOptions);
-extern void wince_OpenInput();
+
+typedef struct GXDisplayProperties GXDisplayProperties;
+typedef struct GXKeyList GXKeyList;
+#include <gx.h>
+
+typedef struct GXKeyList (*GXGETDEFAULTKEYS)(int);
+typedef int (*GXOPENINPUT)();
+
+GXGETDEFAULTKEYS GXGetDefaultKeys_ = NULL;
+GXOPENINPUT GXOpenInput_ = NULL;
+
+struct GXKeyList gxKeyList;
+
#endif
#ifndef MAX
SWP_NOZORDER
);
}
-#endif //TARGET_HOST_WINCE
+#endif /* TARGET_HOST_WINCE */
/*
* XXX Should update {window->State.OldWidth, window->State.OldHeight}
{
#if !TARGET_HOST_WINCE
fgJoystickPollWindow( window );
-#endif //!TARGET_HOST_WINCE
+#endif /* !TARGET_HOST_WINCE */
window->State.JoystickLastPoll = checkTime;
}
char keys[32];
XQueryKeymap( fgDisplay.Display, keys ); /* Look at X11 keystate to detect repeat mode */
- if ( keys[event.xkey.keycode>>3] & (1<<(event.xkey.keycode%8)) )
- window->State.KeyRepeating = GL_TRUE;
- else
- window->State.KeyRepeating = GL_FALSE;
+ if ( event.xkey.keycode<256 ) /* XQueryKeymap is limited to 256 keycodes */
+ {
+ if ( keys[event.xkey.keycode>>3] & (1<<(event.xkey.keycode%8)) )
+ window->State.KeyRepeating = GL_TRUE;
+ else
+ window->State.KeyRepeating = GL_FALSE;
+ }
}
}
else
ReleaseDC( window->Window.Handle, window->Window.Device );
#if TARGET_HOST_WINCE
- // Take over button handling
- wince_OpenInput();
-#endif //TARGET_HOST_WINCE
+ /* Take over button handling */
+ {
+ HINSTANCE dxDllLib=LoadLibrary(_T("gx.dll"));
+ if (dxDllLib)
+ {
+ GXGetDefaultKeys_=(GXGETDEFAULTKEYS)GetProcAddress(dxDllLib, _T("?GXGetDefaultKeys@@YA?AUGXKeyList@@H@Z"));
+ GXOpenInput_=(GXOPENINPUT)GetProcAddress(dxDllLib, _T("?GXOpenInput@@YAHXZ"));
+ }
+
+ if(GXOpenInput_)
+ (*GXOpenInput_)();
+ if(GXGetDefaultKeys_)
+ gxKeyList = (*GXGetDefaultKeys_)(GX_LANDSCAPEKEYS);
+ }
+
+#endif /* TARGET_HOST_WINCE */
break;
case WM_SIZE:
#else
window->State.Width = LOWORD(lParam);
window->State.Height = HIWORD(lParam);
-#endif //TARGET_HOST_WINCE
+#endif /* TARGET_HOST_WINCE */
}
break;
#else
window->State.MouseX = LOWORD( lParam );
window->State.MouseY = HIWORD( lParam );
-#endif //TARGET_HOST_WINCE
+#endif /* TARGET_HOST_WINCE */
if ( window->ActiveMenu )
{
#else
window->State.MouseX = LOWORD( lParam );
window->State.MouseY = HIWORD( lParam );
-#endif //TARGET_HOST_WINCE
+#endif /* TARGET_HOST_WINCE */
switch( uMsg )
{
if( button == GLUT_RIGHT_BUTTON )
button = GLUT_LEFT_BUTTON;
}
-#endif //!TARGET_HOST_WINCE
+#endif /* !TARGET_HOST_WINCE */
if( button == -1 )
return DefWindowProc( hWnd, uMsg, lParam, wParam );
case WM_SYSKEYDOWN:
case WM_KEYDOWN:
{
-#if TARGET_HOST_WINCE
- struct GXKeyList gxKeyList;
-#endif //TARGET_HOST_WINCE
int keypress = -1;
POINT mouse_pos ;
}
#if TARGET_HOST_WINCE
- if(!(lParam & 0x40000000)) // Prevent auto-repeat
- {
- wince_GetDefaultKeys(&gxKeyList, 0x03);
-
- if(wParam==(unsigned)gxKeyList.vkRight)
- keypress = GLUT_KEY_RIGHT;
- else if(wParam==(unsigned)gxKeyList.vkLeft)
- keypress = GLUT_KEY_LEFT;
- else if(wParam==(unsigned)gxKeyList.vkUp)
- keypress = GLUT_KEY_UP;
- else if(wParam==(unsigned)gxKeyList.vkDown)
- keypress = GLUT_KEY_DOWN;
- else if(wParam==(unsigned)gxKeyList.vkA)
- keypress = GLUT_KEY_F1;
- else if(wParam==(unsigned)gxKeyList.vkB)
- keypress = GLUT_KEY_F2;
- else if(wParam==(unsigned)gxKeyList.vkC)
- keypress = GLUT_KEY_F3;
- else if(wParam==(unsigned)gxKeyList.vkStart)
- keypress = GLUT_KEY_F4;
- }
+ if(!(lParam & 0x40000000)) /* Prevent auto-repeat */
+ {
+ if(wParam==(unsigned)gxKeyList.vkRight)
+ keypress = GLUT_KEY_RIGHT;
+ else if(wParam==(unsigned)gxKeyList.vkLeft)
+ keypress = GLUT_KEY_LEFT;
+ else if(wParam==(unsigned)gxKeyList.vkUp)
+ keypress = GLUT_KEY_UP;
+ else if(wParam==(unsigned)gxKeyList.vkDown)
+ keypress = GLUT_KEY_DOWN;
+ else if(wParam==(unsigned)gxKeyList.vkA)
+ keypress = GLUT_KEY_F1;
+ else if(wParam==(unsigned)gxKeyList.vkB)
+ keypress = GLUT_KEY_F2;
+ else if(wParam==(unsigned)gxKeyList.vkC)
+ keypress = GLUT_KEY_F3;
+ else if(wParam==(unsigned)gxKeyList.vkStart)
+ keypress = GLUT_KEY_F4;
+ }
#endif
if( keypress != -1 )
( (char)wParam,
window->State.MouseX, window->State.MouseY )
);
-#endif //!TARGET_HOST_WINCE
+#endif /* !TARGET_HOST_WINCE */
}
}
break ;
}
}
-#endif //!TARGET_HOST_WINCE
+#endif /* !TARGET_HOST_WINCE */
/* We need to pass the message on to the operating system as well */
lRet = DefWindowProc( hWnd, uMsg, wParam, lParam );