From 3f7356f6f3b1825d53e41abe52aa4f16434ca75d Mon Sep 17 00:00:00 2001 From: "SND\\weimingzhi_cp" Date: Sun, 1 Aug 2010 11:11:29 +0000 Subject: dfinput: only accept axis input when the current axis position is off enough from previous or initial position in config dialog box. git-svn-id: https://pcsxr.svn.codeplex.com/svn/pcsxr@55344 e17a0e51-4ae3-4d35-97c3-1a29b211df97 --- macosx/plugins/DFInput/macsrc/cfg.c | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) (limited to 'macosx/plugins/DFInput/macsrc/cfg.c') diff --git a/macosx/plugins/DFInput/macsrc/cfg.c b/macosx/plugins/DFInput/macsrc/cfg.c index f9b897b8..9465426c 100644 --- a/macosx/plugins/DFInput/macsrc/cfg.c +++ b/macosx/plugins/DFInput/macsrc/cfg.c @@ -559,6 +559,28 @@ int CheckKeyDown() { return 0; } +static Sint16 InitialAxisPos[256], PrevAxisPos[256]; + +#define NUM_AXES(js) (SDL_JoystickNumAxes(js) > 256 ? 256 : SDL_JoystickNumAxes(js)) + +void InitAxisPos(int padnum) { + int i; + SDL_Joystick *js; + + if (g.cfg.PadDef[padnum].DevNum >= 0) { + js = SDL_JoystickOpen(g.cfg.PadDef[padnum].DevNum); + SDL_JoystickEventState(SDL_IGNORE); + } else return; + + SDL_JoystickUpdate(); + + for (i = 0; i < NUM_AXES(js); i++) { + InitialAxisPos[i] = PrevAxisPos[i] = SDL_JoystickGetAxis(js, i); + } + + SDL_JoystickClose(js); +} + int ReadDKeyEvent(int padnum, int key) { SDL_Joystick *js; int i, changed = 0, t; @@ -585,14 +607,15 @@ int ReadDKeyEvent(int padnum, int key) { } } - for (i = 0; i < SDL_JoystickNumAxes(js); i++) { + for (i = 0; i < NUM_AXES(js); i++) { axis = SDL_JoystickGetAxis(js, i); - if (abs(axis) > 16383) { + if (abs(axis) > 16383 && (abs(axis - PrevAxisPos[i]) > 4096 || abs(axis - InitialAxisPos[i]) > 4096)) { g.cfg.PadDef[padnum].KeyDef[key].JoyEvType = AXIS; g.cfg.PadDef[padnum].KeyDef[key].J.Axis = (i + 1) * (axis > 0 ? 1 : -1); changed = 1; goto end; } + PrevAxisPos[i] = axis; } for (i = 0; i < SDL_JoystickNumHats(js); i++) { @@ -667,14 +690,15 @@ int ReadAnalogEvent(int padnum, int analognum, int analogdir) { } } - for (i = 0; i < SDL_JoystickNumAxes(js); i++) { + for (i = 0; i < NUM_AXES(js); i++) { axis = SDL_JoystickGetAxis(js, i); - if (abs(axis) > 16383) { + if (abs(axis) > 16383 && (abs(axis - PrevAxisPos[i]) > 4096 || abs(axis - InitialAxisPos[i]) > 4096)) { g.cfg.PadDef[padnum].AnalogDef[analognum][analogdir].JoyEvType = AXIS; g.cfg.PadDef[padnum].AnalogDef[analognum][analogdir].J.Axis = (i + 1) * (axis > 0 ? 1 : -1); changed = 1; goto end; } + PrevAxisPos[i] = axis; } for (i = 0; i < SDL_JoystickNumHats(js); i++) { -- cgit v1.2.3