diff options
| author | Magnus Auvinen <magnus.auvinen@gmail.com> | 2008-10-21 13:47:06 +0000 |
|---|---|---|
| committer | Magnus Auvinen <magnus.auvinen@gmail.com> | 2008-10-21 13:47:06 +0000 |
| commit | 555ee67ed0a076a1bff89899e6aa03121adf6c23 (patch) | |
| tree | 44b2a38b545da066e0775d6dfb35a9f93d927f1a | |
| parent | ee98543918c44861161186a80550085acb0a34ce (diff) | |
| download | zcatch-555ee67ed0a076a1bff89899e6aa03121adf6c23.tar.gz zcatch-555ee67ed0a076a1bff89899e6aa03121adf6c23.zip | |
added alternative mouse input functions. enabled key repeat
| -rw-r--r-- | src/engine/client/ec_inp.c | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/src/engine/client/ec_inp.c b/src/engine/client/ec_inp.c index e6e4f5bb..7d1e5b69 100644 --- a/src/engine/client/ec_inp.c +++ b/src/engine/client/ec_inp.c @@ -33,6 +33,9 @@ static unsigned char input_state[2][1024] = {{0}, {0}}; static int input_current = 0; #ifdef CONFIG_NO_SDL static unsigned int last_release = 0; +#else +static int input_grabbed = 0; +static int input_use_grab = 1; #endif static unsigned int release_delta = -1; @@ -61,7 +64,17 @@ void inp_mouse_relative(int *x, int *y) last_x = nx; last_y = ny; #else - SDL_GetRelativeMouseState(&nx, &ny); + if(input_use_grab) + SDL_GetRelativeMouseState(&nx, &ny); + else + { + if(input_grabbed) + { + SDL_GetMouseState(&nx,&ny); + SDL_WarpMouse(gfx_screenwidth()/2,gfx_screenheight()/2); + nx -= gfx_screenwidth()/2; ny -= gfx_screenheight()/2; + } + } *x = nx*sens; *y = ny*sens; @@ -203,18 +216,23 @@ void inp_mouse_mode_relative() void inp_init() { SDL_EnableUNICODE(1); + SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL); } void inp_mouse_mode_absolute() { SDL_ShowCursor(1); - SDL_WM_GrabInput(SDL_GRAB_OFF); + input_grabbed = 0; + if(input_use_grab) + SDL_WM_GrabInput(SDL_GRAB_OFF); } void inp_mouse_mode_relative() { SDL_ShowCursor(0); - SDL_WM_GrabInput(SDL_GRAB_ON); + input_grabbed = 1; + if(input_use_grab) + SDL_WM_GrabInput(SDL_GRAB_ON); } #endif |