summaryrefslogtreecommitdiffstats
path: root/main.cpp
diff options
context:
space:
mode:
authorConstantin Riß <constantin.riss@dre.de>2010-02-10 22:30:18 +0100
committerConstantin Riß <constantin.riss@dre.de>2010-02-10 22:30:18 +0100
commit22b2912bbdd637c1a206b30f7d02c8e560ff9850 (patch)
tree33889a87dc0bce5e5380d0d88b95c9fb623b7685 /main.cpp
parent897a54945c4a9112ee5c97e2eb8937adc57f17fe (diff)
downloadc3d-22b2912bbdd637c1a206b30f7d02c8e560ff9850.tar
c3d-22b2912bbdd637c1a206b30f7d02c8e560ff9850.zip
veränderungen
Diffstat (limited to 'main.cpp')
-rw-r--r--main.cpp140
1 files changed, 124 insertions, 16 deletions
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 <cstdlib>
-#include <bitset>
+#include "Keys.h"
+//#include <cstdlib>
+//#include <bitset>
#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;
+ }
}
}