try to fix some winport joystick hotkey bullcrap for >1 attached joysticks

This commit is contained in:
zeromus 2015-02-02 19:16:34 +00:00
parent 928004e13e
commit f0bef635c2
1 changed files with 24 additions and 18 deletions

View File

@ -565,44 +565,50 @@ static void InputTimer()
DWORD firstPressedTime; DWORD firstPressedTime;
DWORD lastPressedTime; DWORD lastPressedTime;
WORD repeatCount; WORD repeatCount;
} joyState [256]; } joyState [256*16];
static bool initialized = false; static bool initialized = false;
if(!initialized) { if(!initialized) {
for(int i = 0; i < 256; i++) { for(int i = 0; i < 256*16; i++) {
joyState[i].wasPressed = false; joyState[i].wasPressed = false;
joyState[i].repeatCount = 1; joyState[i].repeatCount = 1;
} }
initialized = true; initialized = true;
} }
int nloops = JOYSTICK?16:1;
for(int j=0;j<nloops;j++)
{
for (int z = 0; z < 256; z++) { for (int z = 0; z < 256; z++) {
int i = z | (JOYSTICK?0x8000:0); int i = z | (JOYSTICK?0x8000:0);
i |= (j<<8);
int n = i&0xFFF;
bool active = !S9xGetState(i); bool active = !S9xGetState(i);
if (active) { if (active) {
bool keyRepeat = (currentTime - joyState[z].firstPressedTime) >= (DWORD)KeyInDelayMSec; bool keyRepeat = (currentTime - joyState[n].firstPressedTime) >= (DWORD)KeyInDelayMSec;
if (!joyState[z].wasPressed || keyRepeat) { if (!joyState[n].wasPressed || keyRepeat) {
if (!joyState[z].wasPressed) if (!joyState[n].wasPressed)
joyState[z].firstPressedTime = currentTime; joyState[n].firstPressedTime = currentTime;
joyState[z].lastPressedTime = currentTime; joyState[n].lastPressedTime = currentTime;
if (keyRepeat && joyState[z].repeatCount < 0xffff) if (keyRepeat && joyState[n].repeatCount < 0xffff)
joyState[z].repeatCount++; joyState[n].repeatCount++;
int mods = GetInitialModifiers(i); int mods = GetInitialModifiers(i);
WPARAM wparam = i | (mods << 8); WPARAM wparam = i | (mods << 16) | (j<<8);
PostMessage(MainWindow->getHWnd(), WM_CUSTKEYDOWN, wparam,(LPARAM)(joyState[z].repeatCount | (joyState[z].wasPressed ? 0x40000000 : 0))); PostMessage(MainWindow->getHWnd(), WM_CUSTKEYDOWN, wparam,(LPARAM)(joyState[n].repeatCount | (joyState[n].wasPressed ? 0x40000000 : 0)));
} }
} }
else { else {
joyState[z].repeatCount = 1; joyState[n].repeatCount = 1;
if (joyState[z].wasPressed) if (joyState[n].wasPressed)
{ {
int mods = GetInitialModifiers(i); int mods = GetInitialModifiers(i);
WPARAM wparam = i | (mods << 8); WPARAM wparam = i | (mods << 16) | (j<<8);
PostMessage(MainWindow->getHWnd(), WM_CUSTKEYUP, wparam,(LPARAM)(joyState[z].repeatCount | (joyState[z].wasPressed ? 0x40000000 : 0))); PostMessage(MainWindow->getHWnd(), WM_CUSTKEYUP, wparam,(LPARAM)(joyState[n].repeatCount | (joyState[n].wasPressed ? 0x40000000 : 0)));
} }
} }
joyState[z].wasPressed = active; joyState[n].wasPressed = active;
}
} }
lastTime = currentTime; lastTime = currentTime;
} }
@ -4049,7 +4055,7 @@ int GetModifiers(int key)
if (key == VK_MENU || key == VK_CONTROL || key == VK_SHIFT) if (key == VK_MENU || key == VK_CONTROL || key == VK_SHIFT)
return 0; return 0;
int bakedModifiers = (key >> 8) & (CUSTKEY_ALT_MASK | CUSTKEY_CTRL_MASK | CUSTKEY_SHIFT_MASK | CUSTKEY_NONE_MASK); int bakedModifiers = (key >> 16) & (CUSTKEY_ALT_MASK | CUSTKEY_CTRL_MASK | CUSTKEY_SHIFT_MASK | CUSTKEY_NONE_MASK);
if(bakedModifiers) if(bakedModifiers)
return bakedModifiers & ~CUSTKEY_NONE_MASK; return bakedModifiers & ~CUSTKEY_NONE_MASK;
@ -4061,7 +4067,7 @@ int GetModifiers(int key)
} }
int PurgeModifiers(int key) int PurgeModifiers(int key)
{ {
return key & ~((CUSTKEY_ALT_MASK | CUSTKEY_CTRL_MASK | CUSTKEY_SHIFT_MASK | CUSTKEY_NONE_MASK) << 8); return key & ~((CUSTKEY_ALT_MASK | CUSTKEY_CTRL_MASK | CUSTKEY_SHIFT_MASK | CUSTKEY_NONE_MASK) << 16);
} }
int HandleKeyUp(WPARAM wParam, LPARAM lParam, int modifiers) int HandleKeyUp(WPARAM wParam, LPARAM lParam, int modifiers)