From 22b2912bbdd637c1a206b30f7d02c8e560ff9850 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Constantin=20Ri=C3=9F?= Date: Wed, 10 Feb 2010 22:30:18 +0100 Subject: =?UTF-8?q?ver=C3=A4nderungen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.cpp | 140 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 124 insertions(+), 16 deletions(-) (limited to 'main.cpp') diff --git a/main.cpp b/main.cpp index 062950c..a786e85 100644 --- a/main.cpp +++ b/main.cpp @@ -1,7 +1,8 @@ #include "DisplayClass.h" #include "gl.h" -#include -#include +#include "Keys.h" +//#include +//#include #ifdef _WIN32 #else @@ -20,7 +21,7 @@ //#define DEFAULT_HEIGHT 200 //#define DEFAULT_WIDTH 200 -std::bitset<256> keys; +Keyset keys; void initGL(bool multisample); void resize(int width, int height); @@ -36,7 +37,7 @@ void initGL(bool multisample) { #ifndef _WIN32 if(multisample) - glDisable(GL_MULTISAMPLE_ARB); + glEnable(GL_MULTISAMPLE_ARB); #endif resize(DEFAULT_WIDTH, DEFAULT_HEIGHT); @@ -260,12 +261,65 @@ LRESULT CALLBACK wndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { return 0; case WM_KEYDOWN: - keys.set(wParam, true); - return 0; - case WM_KEYUP: - keys.set(wParam, false); - return 0; + bool pressed = (uMsg == WM_KEYDOWN); + + switch(wParam) { + case VK_Escape: + PostQuitMessage(0); + break; + case VK_Up: + case VK_W: + case VK_KP_8: + case VK_KP_Up: + keys.set(KEY_UP, pressed); + break; + + case VK_Left: + case VK_A: + case VK_KP_4: + case VK_KP_Left: + keys.set(KEY_LEFT, pressed); + break; + + case VK_Right: + case VK_D: + case VK_KP_6: + case VK_KP_Right: + keys.set(KEY_RIGHT, pressed); + break; + + case VK_Down: + case VK_S: + case VK_KP_2: + case VK_KP_Down: + keys.set(KEY_DOWN, pressed); + break; + + case VK_Page_Up: + case VK_minus: + case VK_KP_Subtract: + case VK_KP_Page_Up: + keys.set(KEY_ZOOM_OUT, pressed); + break; + + case VK_Page_Down: + case VK_plus: + case VK_KP_Add: + case VK_KP_Page_Down: + keys.set(KEY_ZOOM_IN, pressed); + break; + + case VK_HOME: + case VK_KP_HOME: + keys.set(KEY_TOP, pressed); + break; + + case VK_END: + case VK_KP_END: + keys.set(KEY_BOTTOM, pressed); + break; + } default: return DefWindowProc(hWnd, uMsg, wParam, lParam); @@ -313,7 +367,7 @@ bool GLXinit(Display *disp, Atom windele, Window *wnd, GLXContext *gc, bool *mul XSetWindowAttributes swa; swa.colormap = cmap; swa.border_pixel = 0; - swa.event_mask = StructureNotifyMask/* | PointerMotionMask | KeyPressMask | KeyReleaseMask | ButtonPressMask | ButtonReleaseMask*/; + swa.event_mask = StructureNotifyMask | KeyPressMask | KeyReleaseMask/* | PointerMotionMask | ButtonPressMask | ButtonReleaseMask*/; *wnd = XCreateWindow(disp, RootWindow(disp, vi->screen), 0, 0, DEFAULT_WIDTH, DEFAULT_HEIGHT, 0, vi->depth, InputOutput, vi->visual, CWBorderPixel|CWColormap|CWEventMask, &swa); @@ -386,6 +440,7 @@ int main(int argc, char *argv[]) { while(XPending(disp)) { XEvent event; XNextEvent(disp, &event); + switch(event.type) { case ConfigureNotify: resize(event.xconfigure.width, event.xconfigure.height); @@ -397,13 +452,66 @@ int main(int argc, char *argv[]) { break; case KeyPress: - keys.set(event.xkey.keycode, true); - if(XKeycodeToKeysym(disp, event.xkey.keycode, 0) == XK_Escape) running = false; - - break; - case KeyRelease: - keys.set(event.xkey.keycode, false); + KeySym keysym = XKeycodeToKeysym(disp, event.xkey.keycode, 0); + bool pressed = (event.type == KeyPress); + + switch(keysym) { + case XK_Escape: + running = false; + break; + case XK_Up: + case XK_w: + case XK_KP_8: + case XK_KP_Up: + keys.set(KEY_UP, pressed); + break; + + case XK_Left: + case XK_a: + case XK_KP_4: + case XK_KP_Left: + keys.set(KEY_LEFT, pressed); + break; + + case XK_Right: + case XK_d: + case XK_KP_6: + case XK_KP_Right: + keys.set(KEY_RIGHT, pressed); + break; + + case XK_Down: + case XK_s: + case XK_KP_2: + case XK_KP_Down: + keys.set(KEY_DOWN, pressed); + break; + + case XK_Page_Up: + case XK_minus: + case XK_KP_Subtract: + case XK_KP_Page_Up: + keys.set(KEY_ZOOM_OUT, pressed); + break; + + case XK_Page_Down: + case XK_plus: + case XK_KP_Add: + case XK_KP_Page_Down: + keys.set(KEY_ZOOM_IN, pressed); + break; + + case XK_Home: + case XK_KP_Home: + keys.set(KEY_TOP, pressed); + break; + + case XK_End: + case XK_KP_End: + keys.set(KEY_BOTTOM, pressed); + break; + } } } -- cgit v1.2.3