diff --git a/examples/glboing.c b/examples/glboing.c index d5b8ef3..9a46458 100644 --- a/examples/glboing.c +++ b/examples/glboing.c @@ -153,3 +153,7 @@ static void init(void) { glDisable(GL_DITHER); glShadeModel(GL_FLAT); } + +static void key(int k) { + (void)k; +} diff --git a/examples/glcube.c b/examples/glcube.c index 484f7d6..a5688a2 100644 --- a/examples/glcube.c +++ b/examples/glcube.c @@ -73,3 +73,7 @@ static void init(void) { glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE); } + +static void key(int k) { + (void)k; +} diff --git a/examples/glgears.c b/examples/glgears.c index ba0b161..9f16b18 100644 --- a/examples/glgears.c +++ b/examples/glgears.c @@ -228,3 +228,17 @@ static void init(void) { glEnable(GL_NORMALIZE); } + +static void key(int k) { + (void)k; + + if(k == MwLLKeyLeft) { + view_roty += 5.0; + } else if(k == MwLLKeyRight) { + view_roty -= 5.0; + } else if(k == MwLLKeyUp) { + view_rotx += 5.0; + } else if(k == MwLLKeyDown) { + view_rotx -= 5.0; + } +} diff --git a/examples/oldglut.c b/examples/oldglut.c index d6becc4..7696e09 100644 --- a/examples/oldglut.c +++ b/examples/oldglut.c @@ -9,6 +9,7 @@ static void draw(void); static void idle(void); static void reshape(int width, int height); static void init(void); +static void key(int k); static void tick(MwWidget handle, void* user, void* client) { (void)handle; @@ -39,6 +40,10 @@ static void resize(MwWidget handle, void* user, void* client) { reshape(ww, wh); } +static void key_pressed(MwWidget handle, void* user, void* client) { + key(*(int*)client); +} + int main() { MwWidget window; @@ -55,5 +60,7 @@ int main() { MwAddUserHandler(window, MwNresizeHandler, resize, NULL); MwAddUserHandler(window, MwNtickHandler, tick, NULL); + MwAddUserHandler(opengl, MwNkeyHandler, key_pressed, NULL); + MwLoop(window); } diff --git a/include/Mw/LowLevel.h b/include/Mw/LowLevel.h index 79b1ed0..6900aaa 100644 --- a/include/Mw/LowLevel.h +++ b/include/Mw/LowLevel.h @@ -39,7 +39,9 @@ typedef void* MwLLPixmap; enum MwLLKey { MwLLKeyBackSpace = (1 << 31) | 1, MwLLKeyLeft, - MwLLKeyRight + MwLLKeyRight, + MwLLKeyUp, + MwLLKeyDown }; struct _MwLLHandler { diff --git a/src/backend/gdi.c b/src/backend/gdi.c index f13b719..07fd062 100644 --- a/src/backend/gdi.c +++ b/src/backend/gdi.c @@ -85,6 +85,8 @@ static LRESULT CALLBACK wndproc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { int n = -1; if(wp == VK_LEFT) n = MwLLKeyLeft; if(wp == VK_RIGHT) n = MwLLKeyRight; + if(wp == VK_UP) n = MwLLKeyUp; + if(wp == VK_DOWN) n = MwLLKeyDown; if(n != -1) MwLLDispatch(u->ll, key, &n); } else if(msg == WM_GETMINMAXINFO) { if(u->min_set || u->max_set) { diff --git a/src/backend/x11.c b/src/backend/x11.c index ab59308..282332e 100644 --- a/src/backend/x11.c +++ b/src/backend/x11.c @@ -231,6 +231,10 @@ void MwLLNextEvent(MwLL handle) { n = MwLLKeyLeft; } else if(strcmp(str, "Right") == 0) { n = MwLLKeyRight; + } else if(strcmp(str, "Up") == 0) { + n = MwLLKeyUp; + } else if(strcmp(str, "Down") == 0) { + n = MwLLKeyDown; } if(n != -1) MwLLDispatch(handle, key, &n);