mirror of
https://github.com/reactos/wine.git
synced 2025-02-15 18:37:49 +00:00
wineandroid: Implement GetKeyNameText.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
8096e23798
commit
86534e0dd5
@ -522,6 +522,118 @@ static const WORD vkey_to_scancode[] =
|
||||
0, /* 0xff undefined */
|
||||
};
|
||||
|
||||
static const struct
|
||||
{
|
||||
DWORD vkey;
|
||||
const char *name;
|
||||
} vkey_names[] = {
|
||||
{ VK_ADD, "Num +" },
|
||||
{ VK_BACK, "Backspace" },
|
||||
{ VK_CAPITAL, "Caps Lock" },
|
||||
{ VK_CONTROL, "Ctrl" },
|
||||
{ VK_DECIMAL, "Num Del" },
|
||||
{ VK_DELETE | 0x100, "Delete" },
|
||||
{ VK_DIVIDE | 0x100, "Num /" },
|
||||
{ VK_DOWN | 0x100, "Down" },
|
||||
{ VK_END | 0x100, "End" },
|
||||
{ VK_ESCAPE, "Esc" },
|
||||
{ VK_F1, "F1" },
|
||||
{ VK_F2, "F2" },
|
||||
{ VK_F3, "F3" },
|
||||
{ VK_F4, "F4" },
|
||||
{ VK_F5, "F5" },
|
||||
{ VK_F6, "F6" },
|
||||
{ VK_F7, "F7" },
|
||||
{ VK_F8, "F8" },
|
||||
{ VK_F9, "F9" },
|
||||
{ VK_F10, "F10" },
|
||||
{ VK_F11, "F11" },
|
||||
{ VK_F12, "F12" },
|
||||
{ VK_F13, "F13" },
|
||||
{ VK_F14, "F14" },
|
||||
{ VK_F15, "F15" },
|
||||
{ VK_F16, "F16" },
|
||||
{ VK_F17, "F17" },
|
||||
{ VK_F18, "F18" },
|
||||
{ VK_F19, "F19" },
|
||||
{ VK_F20, "F20" },
|
||||
{ VK_F21, "F21" },
|
||||
{ VK_F22, "F22" },
|
||||
{ VK_F23, "F23" },
|
||||
{ VK_F24, "F24" },
|
||||
{ VK_HELP | 0x100, "Help" },
|
||||
{ VK_HOME | 0x100, "Home" },
|
||||
{ VK_INSERT | 0x100, "Insert" },
|
||||
{ VK_LCONTROL, "Ctrl" },
|
||||
{ VK_LEFT | 0x100, "Left" },
|
||||
{ VK_LMENU, "Alt" },
|
||||
{ VK_LSHIFT, "Shift" },
|
||||
{ VK_LWIN | 0x100, "Win" },
|
||||
{ VK_MENU, "Alt" },
|
||||
{ VK_MULTIPLY, "Num *" },
|
||||
{ VK_NEXT | 0x100, "Page Down" },
|
||||
{ VK_NUMLOCK | 0x100, "Num Lock" },
|
||||
{ VK_NUMPAD0, "Num 0" },
|
||||
{ VK_NUMPAD1, "Num 1" },
|
||||
{ VK_NUMPAD2, "Num 2" },
|
||||
{ VK_NUMPAD3, "Num 3" },
|
||||
{ VK_NUMPAD4, "Num 4" },
|
||||
{ VK_NUMPAD5, "Num 5" },
|
||||
{ VK_NUMPAD6, "Num 6" },
|
||||
{ VK_NUMPAD7, "Num 7" },
|
||||
{ VK_NUMPAD8, "Num 8" },
|
||||
{ VK_NUMPAD9, "Num 9" },
|
||||
{ VK_OEM_CLEAR, "Num Clear" },
|
||||
{ VK_OEM_NEC_EQUAL | 0x100, "Num =" },
|
||||
{ VK_PRIOR | 0x100, "Page Up" },
|
||||
{ VK_RCONTROL | 0x100, "Right Ctrl" },
|
||||
{ VK_RETURN, "Return" },
|
||||
{ VK_RETURN | 0x100, "Num Enter" },
|
||||
{ VK_RIGHT | 0x100, "Right" },
|
||||
{ VK_RMENU | 0x100, "Right Alt" },
|
||||
{ VK_RSHIFT, "Right Shift" },
|
||||
{ VK_RWIN | 0x100, "Right Win" },
|
||||
{ VK_SEPARATOR, "Num ," },
|
||||
{ VK_SHIFT, "Shift" },
|
||||
{ VK_SPACE, "Space" },
|
||||
{ VK_SUBTRACT, "Num -" },
|
||||
{ VK_TAB, "Tab" },
|
||||
{ VK_UP | 0x100, "Up" },
|
||||
{ VK_VOLUME_DOWN | 0x100, "Volume Down" },
|
||||
{ VK_VOLUME_MUTE | 0x100, "Mute" },
|
||||
{ VK_VOLUME_UP | 0x100, "Volume Up" },
|
||||
{ VK_OEM_MINUS, "-" },
|
||||
{ VK_OEM_PLUS, "=" },
|
||||
{ VK_OEM_1, ";" },
|
||||
{ VK_OEM_2, "/" },
|
||||
{ VK_OEM_3, "`" },
|
||||
{ VK_OEM_4, "[" },
|
||||
{ VK_OEM_5, "\\" },
|
||||
{ VK_OEM_6, "]" },
|
||||
{ VK_OEM_7, "'" },
|
||||
{ VK_OEM_COMMA, "," },
|
||||
{ VK_OEM_PERIOD, "." },
|
||||
};
|
||||
|
||||
static UINT scancode_to_vkey( UINT scan )
|
||||
{
|
||||
UINT j;
|
||||
|
||||
for (j = 0; j < sizeof(vkey_to_scancode)/sizeof(vkey_to_scancode[0]); j++)
|
||||
if (vkey_to_scancode[j] == scan)
|
||||
return j;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const char* vkey_to_name( UINT vkey )
|
||||
{
|
||||
UINT j;
|
||||
|
||||
for (j = 0; j < sizeof(vkey_names)/sizeof(vkey_names[0]); j++)
|
||||
if (vkey_names[j].vkey == vkey)
|
||||
return vkey_names[j].name;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* keyboard_event
|
||||
@ -649,3 +761,63 @@ INT CDECL ANDROID_ToUnicodeEx( UINT virt, UINT scan, const BYTE *state,
|
||||
TRACE( "returning %d / %s\n", strlenW( buffer ), debugstr_wn(buf, strlenW( buffer )));
|
||||
return strlenW( buffer );
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* ANDROID_GetKeyNameText
|
||||
*/
|
||||
INT CDECL ANDROID_GetKeyNameText( LONG lparam, LPWSTR buffer, INT size )
|
||||
{
|
||||
int scancode, vkey, len;
|
||||
const char *name;
|
||||
char key[2];
|
||||
|
||||
scancode = (lparam >> 16) & 0x1FF;
|
||||
vkey = scancode_to_vkey( scancode );
|
||||
|
||||
if (lparam & (1 << 25))
|
||||
{
|
||||
/* Caller doesn't care about distinctions between left and
|
||||
right keys. */
|
||||
switch (vkey)
|
||||
{
|
||||
case VK_LSHIFT:
|
||||
case VK_RSHIFT:
|
||||
vkey = VK_SHIFT; break;
|
||||
case VK_LCONTROL:
|
||||
case VK_RCONTROL:
|
||||
vkey = VK_CONTROL; break;
|
||||
case VK_LMENU:
|
||||
case VK_RMENU:
|
||||
vkey = VK_MENU; break;
|
||||
}
|
||||
}
|
||||
|
||||
if (scancode & 0x100) vkey |= 0x100;
|
||||
|
||||
if ((vkey >= 0x30 && vkey <= 0x39) || (vkey >= 0x41 && vkey <= 0x5a))
|
||||
{
|
||||
key[0] = vkey;
|
||||
if (vkey >= 0x41)
|
||||
key[0] += 0x20;
|
||||
key[1] = 0;
|
||||
name = key;
|
||||
}
|
||||
else
|
||||
{
|
||||
name = vkey_to_name( vkey );
|
||||
}
|
||||
|
||||
len = MultiByteToWideChar( CP_UTF8, 0, name, -1, buffer, size );
|
||||
if (len) len--;
|
||||
|
||||
if (!len)
|
||||
{
|
||||
static const WCHAR format[] = {'K','e','y',' ','0','x','%','0','2','x',0};
|
||||
snprintfW( buffer, size, format, vkey );
|
||||
len = strlenW( buffer );
|
||||
}
|
||||
|
||||
TRACE( "lparam 0x%08x -> %s\n", lparam, debugstr_w( buffer ));
|
||||
return len;
|
||||
}
|
||||
|
@ -4,6 +4,7 @@
|
||||
|
||||
# USER driver
|
||||
|
||||
@ cdecl GetKeyNameText(long ptr long) ANDROID_GetKeyNameText
|
||||
@ cdecl ToUnicodeEx(long long ptr ptr long long long) ANDROID_ToUnicodeEx
|
||||
@ cdecl EnumDisplayMonitors(long ptr ptr long) ANDROID_EnumDisplayMonitors
|
||||
@ cdecl GetMonitorInfo(long ptr) ANDROID_GetMonitorInfo
|
||||
|
Loading…
x
Reference in New Issue
Block a user