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