X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Ffreeglut_main.c;h=72ef45dc45fd7da85e4b52440e4225e9f345319e;hb=71ec11ce7f27a289e3644ecd9a13784eb6f490c9;hp=06da108511dff5eaa50c73af1f4d8342a72f7ee1;hpb=a630da4d7b24b4147120facf3f7a6a6839d31fb5;p=freeglut diff --git a/src/freeglut_main.c b/src/freeglut_main.c index 06da108..72ef45d 100644 --- a/src/freeglut_main.c +++ b/src/freeglut_main.c @@ -42,41 +42,18 @@ #include #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; -}; -/*__declspec(dllimport) struct GXKeyList GXGetDefaultKeys(int iOptions); -__declspec(dllimport) int GXOpenInput(); -#include "my_gx.h"*/ - -extern void wince_GetDefaultKeys(void* nData, int iOptions); -extern void wince_OpenInput(); - -/*void wince_GetDefaultKeys(void* nData, int iOptions) -{ - *(struct GXKeyList*)nData = GXGetDefaultKeys(iOptions); -} -void wince_OpenInput() -{ - GXOpenInput(); -}*/ + +typedef struct GXDisplayProperties GXDisplayProperties; +typedef struct GXKeyList GXKeyList; +#include + +typedef struct GXKeyList (*GXGETDEFAULTKEYS)(int); +typedef int (*GXOPENINPUT)(); + +GXGETDEFAULTKEYS GXGetDefaultKeys_ = NULL; +GXOPENINPUT GXOpenInput_ = NULL; + +struct GXKeyList gxKeyList; #endif @@ -968,10 +945,13 @@ void FGAPIENTRY glutMainLoopEvent( void ) 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 @@ -1299,8 +1279,21 @@ LRESULT CALLBACK fgWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, ReleaseDC( window->Window.Handle, window->Window.Device ); #if TARGET_HOST_WINCE - // Take over button handling - wince_OpenInput(); + /* 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; @@ -1662,9 +1655,6 @@ LRESULT CALLBACK fgWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, case WM_SYSKEYDOWN: case WM_KEYDOWN: { -#if TARGET_HOST_WINCE - struct GXKeyList gxKeyList; -#endif /* TARGET_HOST_WINCE */ int keypress = -1; POINT mouse_pos ; @@ -1722,10 +1712,8 @@ LRESULT CALLBACK fgWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, } #if TARGET_HOST_WINCE - if(!(lParam & 0x40000000)) // Prevent auto-repeat + 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)