AKD: Support both Return and Enter (and other extended keys). (#330)

This commit is contained in:
tomcw 2018-06-12 21:50:27 +01:00
parent 4a0e93fe28
commit 734bc4cee2
3 changed files with 20 additions and 11 deletions

View File

@ -1394,7 +1394,7 @@ LRESULT CALLBACK FrameWndProc (
// Note about Alt Gr (Right-Alt):
// . WM_KEYDOWN[Left-Control], then:
// . WM_KEYDOWN[Right-Alt]
BOOL extended = (HIWORD(lparam) & KF_EXTENDED) != 0;
bool extended = (HIWORD(lparam) & KF_EXTENDED) != 0;
BOOL down = 1;
BOOL autorep = (HIWORD(lparam) & KF_REPEAT) != 0;
BOOL IsJoyKey = JoyProcessKey((int)wparam, extended, down, autorep);
@ -1403,8 +1403,8 @@ LRESULT CALLBACK FrameWndProc (
{
KeybQueueKeypress((int)wparam, NOT_ASCII);
if ((HIWORD(lparam) & KF_REPEAT) == 0)
KeybAnyKeyDown(WM_KEYDOWN, wparam);
if (!autorep)
KeybAnyKeyDown(WM_KEYDOWN, wparam, extended);
}
}
else if (g_nAppMode == MODE_DEBUG)
@ -1426,13 +1426,13 @@ LRESULT CALLBACK FrameWndProc (
}
else
{
BOOL extended = (HIWORD(lparam) & KF_EXTENDED) != 0;
bool extended = (HIWORD(lparam) & KF_EXTENDED) != 0;
BOOL down = 0;
BOOL autorep = 0;
BOOL bIsJoyKey = JoyProcessKey((int)wparam, extended, down, autorep);
if (!bIsJoyKey)
KeybAnyKeyDown(WM_KEYUP, wparam);
KeybAnyKeyDown(WM_KEYUP, wparam, extended);
}
break;

View File

@ -390,11 +390,13 @@ static char ClipboardCurrChar(bool bIncPtr)
//===========================================================================
static uint64_t g_AKDFlags[4] = {0,0,0,0};
const UINT kAKDNumElements = 256/64;
static uint64_t g_AKDFlags[2][kAKDNumElements] = { {0,0,0,0}, // normal
{0,0,0,0}}; // extended
// NB. Don't need to be concerned about if numpad/cursors are used for joystick,
// since parent calls JoyProcessKey() just before this.
void KeybAnyKeyDown(UINT message, WPARAM wparam)
void KeybAnyKeyDown(UINT message, WPARAM wparam, bool bIsExtended)
{
if (wparam > 255)
{
@ -419,17 +421,24 @@ void KeybAnyKeyDown(UINT message, WPARAM wparam)
{
UINT offset = wparam >> 6;
UINT bit = wparam & 0x3f;
UINT idx = !bIsExtended ? 0 : 1;
if (message == WM_KEYDOWN)
g_AKDFlags[offset] |= (1LL<<bit);
g_AKDFlags[idx][offset] |= (1LL<<bit);
else
g_AKDFlags[offset] &= ~(1LL<<bit);
g_AKDFlags[idx][offset] &= ~(1LL<<bit);
}
}
static bool IsAKD(void)
{
return g_AKDFlags[0] || g_AKDFlags[1] || g_AKDFlags[2] || g_AKDFlags[3];
uint64_t* p = &g_AKDFlags[0][0];
for (UINT i=0; i<sizeof(g_AKDFlags)/sizeof(g_AKDFlags[0][0]); i++)
if (p[i])
return true;
return false;
}
//===========================================================================

View File

@ -14,7 +14,7 @@ BYTE KeybGetKeycode ();
void KeybQueueKeypress (int,BOOL);
void KeybToggleCapsLock ();
void KeybToggleP8ACapsLock ();
void KeybAnyKeyDown(UINT message, WPARAM wparam);
void KeybAnyKeyDown(UINT message, WPARAM wparam, bool bIsExtended);
void KeybSetSnapshot_v1(const BYTE LastKey);
void KeybSaveSnapshot(class YamlSaveHelper& yamlSaveHelper);
void KeybLoadSnapshot(class YamlLoadHelper& yamlLoadHelper);