From d84a3de6fa6d8ab17b0ce3b3e5dfcb6c8d7c8038 Mon Sep 17 00:00:00 2001 From: "gregory.hainaut@gmail.com" Date: Thu, 23 Jun 2011 06:56:06 +0000 Subject: [PATCH] onepad: support of diagonal in d-pad. git-svn-id: http://pcsx2.googlecode.com/svn/trunk@4757 96395faa-99c1-11dd-bbfe-3dabce05a288 --- plugins/onepad/Linux/linux.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/plugins/onepad/Linux/linux.cpp b/plugins/onepad/Linux/linux.cpp index f693b37d03..bc3b606bac 100644 --- a/plugins/onepad/Linux/linux.cpp +++ b/plugins/onepad/Linux/linux.cpp @@ -132,7 +132,10 @@ EXPORT_C_(void) PADupdate(int pad) { int value = SDL_JoystickGetHat((pjoy)->GetJoy(), key_to_axis(cpad, i)); - if (key_to_hat_dir(cpad, i) == value) + // key_to_hat_dir and value are a 4 bits bitmap, one for each directions. Only 1 bit can be high for + // key_to_hat_dir. Value handles diagonal too (2 bits) so you must check the intersection + // '&' not only equality '=='. -- Gregory + if (key_to_hat_dir(cpad, i) & value) clear_bit(status[cpad], i); else set_bit(status[cpad], i);