diff options
| author | SND\weimingzhi_cp <SND\weimingzhi_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97> | 2010-08-01 11:11:29 +0000 |
|---|---|---|
| committer | SND\weimingzhi_cp <SND\weimingzhi_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97> | 2010-08-01 11:11:29 +0000 |
| commit | 3f7356f6f3b1825d53e41abe52aa4f16434ca75d (patch) | |
| tree | 6748ea78874d8359e472a9894a2321efd5ca06eb /plugins | |
| parent | 8bca7a2d9797c2b0546895f5e62fc05b38183468 (diff) | |
| download | pcsxr-3f7356f6f3b1825d53e41abe52aa4f16434ca75d.tar.gz | |
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
Diffstat (limited to 'plugins')
| -rw-r--r-- | plugins/dfinput/cfg-gtk2.c | 32 |
1 files changed, 26 insertions, 6 deletions
diff --git a/plugins/dfinput/cfg-gtk2.c b/plugins/dfinput/cfg-gtk2.c index 4bc5a7a3..cfbd8fa2 100644 --- a/plugins/dfinput/cfg-gtk2.c +++ b/plugins/dfinput/cfg-gtk2.c @@ -325,11 +325,20 @@ static void ReadDKeyEvent(int padnum, int key) { time_t t; GdkEvent *ge; int i; - Sint16 axis; + Sint16 axis, numAxes = 0, InitAxisPos[256], PrevAxisPos[256]; if (g.cfg.PadDef[padnum].DevNum >= 0) { js = SDL_JoystickOpen(g.cfg.PadDef[padnum].DevNum); SDL_JoystickEventState(SDL_IGNORE); + + SDL_JoystickUpdate(); + + numAxes = SDL_JoystickNumAxes(js); + if (numAxes > 256) numAxes = 256; + + for (i = 0; i < numAxes; i++) { + InitAxisPos[i] = PrevAxisPos[i] = SDL_JoystickGetAxis(js, i); + } } else { js = NULL; } @@ -349,13 +358,14 @@ static void ReadDKeyEvent(int padnum, int key) { } } - for (i = 0; i < SDL_JoystickNumAxes(js); i++) { + for (i = 0; i < numAxes; i++) { axis = SDL_JoystickGetAxis(js, i); - if (abs(axis) > 16383) { + if (abs(axis) > 16383 && (abs(axis - InitAxisPos[i]) > 4096 || abs(axis - PrevAxisPos[i]) > 4096)) { g.cfg.PadDef[padnum].KeyDef[key].JoyEvType = AXIS; g.cfg.PadDef[padnum].KeyDef[key].J.Axis = (i + 1) * (axis > 0 ? 1 : -1); goto end; } + PrevAxisPos[i] = axis; } for (i = 0; i < SDL_JoystickNumHats(js); i++) { @@ -404,11 +414,20 @@ static void ReadAnalogEvent(int padnum, int analognum, int analogdir) { time_t t; GdkEvent *ge; int i; - Sint16 axis; + Sint16 axis, numAxes = 0, InitAxisPos[256], PrevAxisPos[256]; if (g.cfg.PadDef[padnum].DevNum >= 0) { js = SDL_JoystickOpen(g.cfg.PadDef[padnum].DevNum); SDL_JoystickEventState(SDL_IGNORE); + + SDL_JoystickUpdate(); + + numAxes = SDL_JoystickNumAxes(js); + if (numAxes > 256) numAxes = 256; + + for (i = 0; i < SDL_JoystickNumAxes(js); i++) { + InitAxisPos[i] = PrevAxisPos[i] = SDL_JoystickGetAxis(js, i); + } } else { js = NULL; } @@ -428,13 +447,14 @@ static void ReadAnalogEvent(int padnum, int analognum, int analogdir) { } } - for (i = 0; i < SDL_JoystickNumAxes(js); i++) { + for (i = 0; i < numAxes; i++) { axis = SDL_JoystickGetAxis(js, i); - if (abs(axis) > 16383) { + if (abs(axis) > 16383 && (abs(axis - InitAxisPos[i]) > 4096 || abs(axis - PrevAxisPos[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); goto end; } + PrevAxisPos[i] = axis; } for (i = 0; i < SDL_JoystickNumHats(js); i++) { |
