mirror of
https://github.com/aseprite/aseprite.git
synced 2025-03-18 16:21:07 +00:00
x11/skia: Add System::isKeyPressed() impl
This commit is contained in:
parent
f8b193545e
commit
01bb56b50a
@ -10,12 +10,14 @@
|
||||
|
||||
#include "base/ints.h"
|
||||
#include "she/x11/keys.h"
|
||||
#include "she/x11/x11.h"
|
||||
|
||||
#include <X11/Xlib.h>
|
||||
#include <X11/keysym.h>
|
||||
|
||||
namespace she {
|
||||
|
||||
KeyScancode x11_keysym_to_scancode(KeySym keysym)
|
||||
KeyScancode x11_keysym_to_scancode(const KeySym keysym)
|
||||
{
|
||||
switch (keysym) {
|
||||
case XK_BackSpace: return kKeyBackspace;
|
||||
@ -162,9 +164,134 @@ KeyScancode x11_keysym_to_scancode(KeySym keysym)
|
||||
return kKeyNil;
|
||||
}
|
||||
|
||||
KeySym x11_keysym_to_scancode(const KeyScancode scancode)
|
||||
{
|
||||
switch (scancode) {
|
||||
case kKeyBackspace: return XK_BackSpace;
|
||||
case kKeyTab: return XK_Tab;
|
||||
case kKeyEnter: return XK_Return;
|
||||
case kKeyPause: return XK_Pause;
|
||||
case kKeyScrLock: return XK_Scroll_Lock;
|
||||
case kKeyEsc: return XK_Escape;
|
||||
case kKeyDel: return XK_Delete;
|
||||
case kKeyHome: return XK_Home;
|
||||
case kKeyLeft: return XK_Left;
|
||||
case kKeyUp: return XK_Up;
|
||||
case kKeyRight: return XK_Right;
|
||||
case kKeyDown: return XK_Down;
|
||||
case kKeyPageUp: return XK_Page_Up;
|
||||
case kKeyPageDown: return XK_Page_Down;
|
||||
case kKeyEnd: return XK_End;
|
||||
case kKeyPrtscr: return XK_Print;
|
||||
case kKeyInsert: return XK_Insert;
|
||||
case kKeyMenu: return XK_Menu;
|
||||
case kKeyNumLock: return XK_Num_Lock;
|
||||
case kKeyEnterPad: return XK_KP_Enter;
|
||||
case kKey0Pad: return XK_KP_0;
|
||||
case kKey1Pad: return XK_KP_1;
|
||||
case kKey2Pad: return XK_KP_2;
|
||||
case kKey3Pad: return XK_KP_3;
|
||||
case kKey4Pad: return XK_KP_4;
|
||||
case kKey5Pad: return XK_KP_5;
|
||||
case kKey6Pad: return XK_KP_6;
|
||||
case kKey7Pad: return XK_KP_7;
|
||||
case kKey8Pad: return XK_KP_8;
|
||||
case kKey9Pad: return XK_KP_9;
|
||||
case kKeyDelPad: return XK_KP_Delete;
|
||||
case kKeyEqualsPad: return XK_KP_Equal;
|
||||
case kKeyAsterisk: return XK_KP_Multiply;
|
||||
case kKeyPlusPad: return XK_KP_Add;
|
||||
case kKeyMinusPad: return XK_KP_Subtract;
|
||||
case kKeySlashPad: return XK_KP_Divide;
|
||||
case kKeyF1: return XK_F1;
|
||||
case kKeyF2: return XK_F2;
|
||||
case kKeyF3: return XK_F3;
|
||||
case kKeyF4: return XK_F4;
|
||||
case kKeyF5: return XK_F5;
|
||||
case kKeyF6: return XK_F6;
|
||||
case kKeyF7: return XK_F7;
|
||||
case kKeyF8: return XK_F8;
|
||||
case kKeyF9: return XK_F9;
|
||||
case kKeyF10: return XK_F10;
|
||||
case kKeyF11: return XK_F11;
|
||||
case kKeyF12: return XK_F12;
|
||||
case kKeyLShift: return XK_Shift_L;
|
||||
case kKeyRShift: return XK_Shift_R;
|
||||
case kKeyLControl: return XK_Control_L;
|
||||
case kKeyRControl: return XK_Control_R;
|
||||
case kKeyCapsLock: return XK_Caps_Lock;
|
||||
case kKeyAlt: return XK_Alt_L;
|
||||
case kKeyAltGr: return XK_Alt_R;
|
||||
case kKeyLWin: return XK_Super_L;
|
||||
case kKeyRWin: return XK_Super_R;
|
||||
case kKeySpace: return XK_space;
|
||||
case kKeyQuote: return XK_apostrophe;
|
||||
case kKeyComma: return XK_comma;
|
||||
case kKeyMinus: return XK_minus;
|
||||
case kKeyStop: return XK_period;
|
||||
case kKeySlash: return XK_slash;
|
||||
case kKey0: return XK_0;
|
||||
case kKey1: return XK_1;
|
||||
case kKey2: return XK_2;
|
||||
case kKey3: return XK_3;
|
||||
case kKey4: return XK_4;
|
||||
case kKey5: return XK_5;
|
||||
case kKey6: return XK_6;
|
||||
case kKey7: return XK_7;
|
||||
case kKey8: return XK_8;
|
||||
case kKey9: return XK_9;
|
||||
case kKeyColon: return XK_semicolon;
|
||||
case kKeyBackslash2: return XK_less;
|
||||
case kKeyOpenbrace: return XK_bracketleft;
|
||||
case kKeyBackslash: return XK_backslash;
|
||||
case kKeyClosebrace: return XK_bracketright;
|
||||
case kKeyTilde: return XK_grave;
|
||||
case kKeyA: return XK_a;
|
||||
case kKeyB: return XK_b;
|
||||
case kKeyC: return XK_c;
|
||||
case kKeyD: return XK_d;
|
||||
case kKeyE: return XK_e;
|
||||
case kKeyF: return XK_f;
|
||||
case kKeyG: return XK_g;
|
||||
case kKeyH: return XK_h;
|
||||
case kKeyI: return XK_i;
|
||||
case kKeyJ: return XK_j;
|
||||
case kKeyK: return XK_k;
|
||||
case kKeyL: return XK_l;
|
||||
case kKeyM: return XK_m;
|
||||
case kKeyN: return XK_n;
|
||||
case kKeyO: return XK_o;
|
||||
case kKeyP: return XK_p;
|
||||
case kKeyQ: return XK_q;
|
||||
case kKeyR: return XK_r;
|
||||
case kKeyS: return XK_s;
|
||||
case kKeyT: return XK_t;
|
||||
case kKeyU: return XK_u;
|
||||
case kKeyV: return XK_v;
|
||||
case kKeyW: return XK_w;
|
||||
case kKeyX: return XK_x;
|
||||
case kKeyY: return XK_y;
|
||||
case kKeyZ: return XK_z;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool x11_is_key_pressed(KeyScancode scancode)
|
||||
{
|
||||
return false; // TODO
|
||||
::Display* display = X11::instance()->display();
|
||||
KeySym keysym = x11_keysym_to_scancode(scancode);
|
||||
KeyCode keycode = XKeysymToKeycode(display, keysym);
|
||||
if (!keycode)
|
||||
return false;
|
||||
|
||||
// TODO several platforms have this kind of API to get the whole
|
||||
// keyboard state, it would be a lot better if we expose this
|
||||
// API to the user (so we don't have to call XQueryKeymap for
|
||||
// each key).
|
||||
char keys[32];
|
||||
XQueryKeymap(display, keys);
|
||||
|
||||
return (keys[keycode/8] & (1 << (keycode%8)) ? true: false);
|
||||
}
|
||||
|
||||
int x11_get_unicode_from_scancode(KeyScancode scancode)
|
||||
|
@ -13,7 +13,8 @@
|
||||
|
||||
namespace she {
|
||||
|
||||
KeyScancode x11_keysym_to_scancode(KeySym keysym);
|
||||
KeyScancode x11_keysym_to_scancode(const KeySym keysym);
|
||||
KeySym x11_keysym_to_scancode(const KeyScancode scancode);
|
||||
bool x11_is_key_pressed(KeyScancode scancode);
|
||||
int x11_get_unicode_from_scancode(KeyScancode scancode);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user