fix key inputs
This commit is contained in:
parent
6757559089
commit
4b4fabcfe5
278
platform.d
278
platform.d
@ -17,36 +17,124 @@ import core.atomic;
|
|||||||
|
|
||||||
const WINDOW_EDGE_BUFFER = 50;
|
const WINDOW_EDGE_BUFFER = 50;
|
||||||
|
|
||||||
enum Input
|
enum Input : u32
|
||||||
{
|
{
|
||||||
None,
|
None,
|
||||||
|
Backspace = 0x08,
|
||||||
// Keyboard
|
Tab = 0x09,
|
||||||
a, b, c, d, e, f, g, h, i, j, k, l, m,
|
Enter = 0x0A,
|
||||||
n, o, p, q, r, s, t, u, v, w, x, y, z,
|
Escape = 0x1B,
|
||||||
A, B, C, D, E, F, G, H, I, J, K, L, M,
|
Space = 0x20,
|
||||||
N, O, P, Q, R, S, T, U, V, W, X, Y, Z,
|
Exclamation = 0x21,
|
||||||
Zero, One, Two, Three, Four, Five, Six, Seven, Eight, Nine,
|
DoubleQuote = 0x22,
|
||||||
Num0, Num1, Num2, Num3, Num4, Num5, Num6, Num7, Num8, Num9,
|
Hash = 0x23,
|
||||||
NumLock, NumSlash, NumStar, NumMinus, NumPlus, NumEnter, NumPeriod,
|
Dollar = 0x24,
|
||||||
Insert, Delete, Home, End, PageUp, PageDown,
|
Percent = 0x25,
|
||||||
PrintScreen, ScrollLock, Pause,
|
Ampersand = 0x26,
|
||||||
Comma, Period, BackSlash, Backspace, ForwardSlash, Minus, Plus,
|
SingleQuote = 0x27,
|
||||||
F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12,
|
LeftParen = 0x28,
|
||||||
Up, Down, Left, Right,
|
RightParent = 0x29,
|
||||||
LeftCtrl, LeftAlt, LeftShift, LeftSuper,
|
Asterisk = 0x2A,
|
||||||
Tab, CapsLock,
|
Plus = 0x2B,
|
||||||
RightCtrl, RightAlt, RightSuper, RightShift,
|
Comma = 0x2C,
|
||||||
Enter, Space,
|
Minus = 0x2D,
|
||||||
Tilde, Esc,
|
Period = 0x2E,
|
||||||
Semicolon, Quote, LeftBrace, RightBrace,
|
Slash = 0x2F,
|
||||||
|
Zero = 0x30,
|
||||||
|
One = 0x31,
|
||||||
|
Two = 0x32,
|
||||||
|
Three = 0x33,
|
||||||
|
Four = 0x34,
|
||||||
|
Five = 0x35,
|
||||||
|
Six = 0x36,
|
||||||
|
Seven = 0x37,
|
||||||
|
Eight = 0x38,
|
||||||
|
Nine = 0x39,
|
||||||
|
Colon = 0x3A,
|
||||||
|
Semicolon = 0x3B,
|
||||||
|
LessThan = 0x3C,
|
||||||
|
Equals = 0x3D,
|
||||||
|
GreaterThan = 0x3E,
|
||||||
|
Question = 0x3F,
|
||||||
|
At = 0x40,
|
||||||
|
A = 0x41, B = 0x42, C = 0x43, D = 0x44, E = 0x45, F = 0x46, G = 0x47, H = 0x48, I = 0x49, J = 0x4A, K = 0x4B, L = 0x4C, M = 0x4D,
|
||||||
|
N = 0x4E, O = 0x4F, P = 0x50, Q = 0x51, R = 0x52, S = 0x53, T = 0x54, U = 0x55, V = 0x56, W = 0x57, X = 0x58, Y = 0x59, Z = 0x5A,
|
||||||
|
LeftBracket = 0x5B,
|
||||||
|
BackSlash = 0x5C,
|
||||||
|
RightBracket = 0x5D,
|
||||||
|
Caret = 0x5E,
|
||||||
|
Underscore = 0x5F,
|
||||||
|
Grave = 0x60,
|
||||||
|
a = I.A+32, b = I.B+32, c = I.C+32, d = I.D+32, e = I.E+32, f = I.F+32, g = I.G+32, h = I.H+32, i = I.I+32, j = I.J+32, k = I.K+32, l = I.L+32, m = I.M+32,
|
||||||
|
n = I.N+32, o = I.O+32, p = I.P+32, q = I.Q+32, r = I.R+32, s = I.S+32, t = I.T+32, u = I.U+32, v = I.V+32, w = I.W+32, x = I.X+32, y = I.Y+32, z = I.Z+32,
|
||||||
|
LeftBrace = 0x7B,
|
||||||
|
VerticalBar = 0x7C,
|
||||||
|
RightBrace = 0x7D,
|
||||||
|
Tilde = 0x7E,
|
||||||
|
Delete = 0x7F,
|
||||||
|
|
||||||
|
F1 = 0x150,
|
||||||
|
F2 = 0x151,
|
||||||
|
F3 = 0x152,
|
||||||
|
F4 = 0x153,
|
||||||
|
F5 = 0x154,
|
||||||
|
F6 = 0x155,
|
||||||
|
F7 = 0x156,
|
||||||
|
F8 = 0x157,
|
||||||
|
F9 = 0x158,
|
||||||
|
F10 = 0x159,
|
||||||
|
F11 = 0x15A,
|
||||||
|
F12 = 0x15B,
|
||||||
|
PrintScreen = 0x10C,
|
||||||
|
ScrollLock = 0x10D,
|
||||||
|
Pause = 0x10E,
|
||||||
|
Insert = 0x10F,
|
||||||
|
Home = 0x110,
|
||||||
|
End = 0x111,
|
||||||
|
PageUp = 0x112,
|
||||||
|
PageDown = 0x113,
|
||||||
|
NumLock = 0x114,
|
||||||
|
|
||||||
|
NumEnter = 0x10A,
|
||||||
|
NumAsterisk = 0x12A,
|
||||||
|
NumPlus = 0x12B,
|
||||||
|
NumMinus = 0x12D,
|
||||||
|
NumPeriod = 0x12E,
|
||||||
|
NumSlash = 0x12F,
|
||||||
|
NumZero = 0x130,
|
||||||
|
NumOne = 0x131,
|
||||||
|
NumTwo = 0x132,
|
||||||
|
NumThree = 0x133,
|
||||||
|
NumFour = 0x134,
|
||||||
|
NumFive = 0x135,
|
||||||
|
NumSix = 0x136,
|
||||||
|
NumSeven = 0x137,
|
||||||
|
NumEight = 0x138,
|
||||||
|
NumNine = 0x139,
|
||||||
|
|
||||||
|
LeftCtrl = 0x13A,
|
||||||
|
RightCtrl = 0x13B,
|
||||||
|
LeftShift = 0x13C,
|
||||||
|
RightShift = 0x13D,
|
||||||
|
LeftSuper = 0x13E,
|
||||||
|
RightSuper = 0x13F,
|
||||||
|
LeftAlt = 0x140,
|
||||||
|
RightAlt = 0x141,
|
||||||
|
CapsLock = 0x142,
|
||||||
|
|
||||||
|
Left = 0x143,
|
||||||
|
Right = 0x144,
|
||||||
|
Up = 0x145,
|
||||||
|
Down = 0x146,
|
||||||
|
|
||||||
// Mouse
|
// Mouse
|
||||||
MouseMotion,
|
MouseMotion = 0x147,
|
||||||
|
|
||||||
LeftClick, MiddleClick, RightClick,
|
LeftClick = 0x148, MiddleClick = 0x149, RightClick = 0x14A,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
alias I = Input;
|
||||||
|
|
||||||
enum Modifier : u32
|
enum Modifier : u32
|
||||||
{
|
{
|
||||||
None = 0x00,
|
None = 0x00,
|
||||||
@ -816,20 +904,48 @@ LoadFunction(Library lib, string name)
|
|||||||
fn.ptr = dlsym(lib.ptr, name.ptr);
|
fn.ptr = dlsym(lib.ptr, name.ptr);
|
||||||
|
|
||||||
return fn;
|
return fn;
|
||||||
};
|
}
|
||||||
|
|
||||||
|
u8
|
||||||
|
InputToChar(Input input)
|
||||||
|
{
|
||||||
|
switch(input)
|
||||||
|
{
|
||||||
|
case Input.Tab:
|
||||||
|
case Input.Enter:
|
||||||
|
case Input.Space: .. case Input.Tilde:
|
||||||
|
{
|
||||||
|
return cast(u8)(input);
|
||||||
|
}
|
||||||
|
case Input.NumEnter:
|
||||||
|
case Input.NumAsterisk:
|
||||||
|
case Input.NumPlus:
|
||||||
|
case Input.NumMinus:
|
||||||
|
case Input.NumPeriod:
|
||||||
|
case Input.NumSlash:
|
||||||
|
case Input.NumZero: .. case Input.NumNine:
|
||||||
|
{
|
||||||
|
return cast(u8)(input & 0xFF);
|
||||||
|
}
|
||||||
|
default: return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Input
|
Input
|
||||||
ConvertInput(u64 x_key)
|
ConvertInput(u64 x_key)
|
||||||
{
|
{
|
||||||
switch (x_key)
|
switch (x_key)
|
||||||
{
|
{
|
||||||
|
case XK_space: .. case XK_asciitilde:
|
||||||
|
{
|
||||||
|
return cast(Input)(x_key);
|
||||||
|
}
|
||||||
case XK_BackSpace: return Input.Backspace;
|
case XK_BackSpace: return Input.Backspace;
|
||||||
case XK_Return: return Input.Enter;
|
case XK_Return: return Input.Enter;
|
||||||
case XK_Tab: return Input.Tab;
|
case XK_Tab: return Input.Tab;
|
||||||
case XK_Pause: return Input.Pause;
|
case XK_Pause: return Input.Pause;
|
||||||
case XK_Caps_Lock: return Input.CapsLock;
|
case XK_Caps_Lock: return Input.CapsLock;
|
||||||
case XK_Escape: return Input.Esc;
|
case XK_Escape: return Input.Escape;
|
||||||
case XK_space: return Input.Space;
|
|
||||||
case XK_Prior: return Input.PageUp;
|
case XK_Prior: return Input.PageUp;
|
||||||
case XK_Next: return Input.PageDown;
|
case XK_Next: return Input.PageDown;
|
||||||
case XK_End: return Input.End;
|
case XK_End: return Input.End;
|
||||||
@ -845,17 +961,17 @@ ConvertInput(u64 x_key)
|
|||||||
case XK_Super_L: return Input.LeftSuper;
|
case XK_Super_L: return Input.LeftSuper;
|
||||||
case XK_Meta_R:
|
case XK_Meta_R:
|
||||||
case XK_Super_R: return Input.RightSuper;
|
case XK_Super_R: return Input.RightSuper;
|
||||||
case XK_KP_0: return Input.Num0;
|
case XK_KP_0: return Input.NumZero;
|
||||||
case XK_KP_1: return Input.Num1;
|
case XK_KP_1: return Input.NumOne;
|
||||||
case XK_KP_2: return Input.Num2;
|
case XK_KP_2: return Input.NumTwo;
|
||||||
case XK_KP_3: return Input.Num3;
|
case XK_KP_3: return Input.NumThree;
|
||||||
case XK_KP_4: return Input.Num4;
|
case XK_KP_4: return Input.NumFour;
|
||||||
case XK_KP_5: return Input.Num5;
|
case XK_KP_5: return Input.NumFive;
|
||||||
case XK_KP_6: return Input.Num6;
|
case XK_KP_6: return Input.NumSix;
|
||||||
case XK_KP_7: return Input.Num7;
|
case XK_KP_7: return Input.NumSeven;
|
||||||
case XK_KP_8: return Input.Num8;
|
case XK_KP_8: return Input.NumEight;
|
||||||
case XK_KP_9: return Input.Num9;
|
case XK_KP_9: return Input.NumNine;
|
||||||
case XK_multiply: return Input.NumStar;
|
case XK_KP_Multiply: return Input.NumAsterisk;
|
||||||
case XK_KP_Subtract: return Input.NumMinus;
|
case XK_KP_Subtract: return Input.NumMinus;
|
||||||
case XK_KP_Decimal: return Input.NumPeriod;
|
case XK_KP_Decimal: return Input.NumPeriod;
|
||||||
case XK_KP_Divide: return Input.NumSlash;
|
case XK_KP_Divide: return Input.NumSlash;
|
||||||
@ -880,77 +996,6 @@ ConvertInput(u64 x_key)
|
|||||||
case XK_Control_R: return Input.RightCtrl;
|
case XK_Control_R: return Input.RightCtrl;
|
||||||
case XK_Alt_L: return Input.LeftAlt;
|
case XK_Alt_L: return Input.LeftAlt;
|
||||||
case XK_Alt_R: return Input.RightAlt;
|
case XK_Alt_R: return Input.RightAlt;
|
||||||
case XK_semicolon: return Input.Semicolon;
|
|
||||||
case XK_bracketleft: return Input.LeftBrace;
|
|
||||||
case XK_bracketright: return Input.RightBrace;
|
|
||||||
case XK_plus: return Input.Plus;
|
|
||||||
case XK_comma: return Input.Comma;
|
|
||||||
case XK_minus: return Input.Minus;
|
|
||||||
case XK_backslash: return Input.BackSlash;
|
|
||||||
case XK_slash: return Input.ForwardSlash;
|
|
||||||
case XK_grave: return Input.Tilde;
|
|
||||||
case XK_0: return Input.Zero;
|
|
||||||
case XK_1: return Input.One;
|
|
||||||
case XK_2: return Input.Two;
|
|
||||||
case XK_3: return Input.Three;
|
|
||||||
case XK_4: return Input.Four;
|
|
||||||
case XK_5: return Input.Five;
|
|
||||||
case XK_6: return Input.Six;
|
|
||||||
case XK_7: return Input.Seven;
|
|
||||||
case XK_8: return Input.Eight;
|
|
||||||
case XK_9: return Input.Nine;
|
|
||||||
case XK_a: return Input.a;
|
|
||||||
case XK_A: return Input.A;
|
|
||||||
case XK_b: return Input.b;
|
|
||||||
case XK_B: return Input.B;
|
|
||||||
case XK_c: return Input.c;
|
|
||||||
case XK_C: return Input.C;
|
|
||||||
case XK_d: return Input.d;
|
|
||||||
case XK_D: return Input.D;
|
|
||||||
case XK_e: return Input.e;
|
|
||||||
case XK_E: return Input.E;
|
|
||||||
case XK_f: return Input.f;
|
|
||||||
case XK_F: return Input.F;
|
|
||||||
case XK_g: return Input.g;
|
|
||||||
case XK_G: return Input.G;
|
|
||||||
case XK_h: return Input.h;
|
|
||||||
case XK_H: return Input.H;
|
|
||||||
case XK_i: return Input.i;
|
|
||||||
case XK_I: return Input.I;
|
|
||||||
case XK_j: return Input.j;
|
|
||||||
case XK_J: return Input.J;
|
|
||||||
case XK_k: return Input.k;
|
|
||||||
case XK_K: return Input.K;
|
|
||||||
case XK_l: return Input.l;
|
|
||||||
case XK_L: return Input.L;
|
|
||||||
case XK_m: return Input.m;
|
|
||||||
case XK_M: return Input.M;
|
|
||||||
case XK_n: return Input.n;
|
|
||||||
case XK_N: return Input.N;
|
|
||||||
case XK_o: return Input.o;
|
|
||||||
case XK_O: return Input.O;
|
|
||||||
case XK_p: return Input.p;
|
|
||||||
case XK_P: return Input.P;
|
|
||||||
case XK_q: return Input.q;
|
|
||||||
case XK_Q: return Input.Q;
|
|
||||||
case XK_r: return Input.r;
|
|
||||||
case XK_R: return Input.R;
|
|
||||||
case XK_s: return Input.s;
|
|
||||||
case XK_S: return Input.S;
|
|
||||||
case XK_t: return Input.t;
|
|
||||||
case XK_T: return Input.T;
|
|
||||||
case XK_u: return Input.u;
|
|
||||||
case XK_U: return Input.U;
|
|
||||||
case XK_v: return Input.v;
|
|
||||||
case XK_V: return Input.V;
|
|
||||||
case XK_w: return Input.w;
|
|
||||||
case XK_W: return Input.W;
|
|
||||||
case XK_x: return Input.x;
|
|
||||||
case XK_X: return Input.X;
|
|
||||||
case XK_y: return Input.y;
|
|
||||||
case XK_Y: return Input.Y;
|
|
||||||
case XK_z: return Input.z;
|
|
||||||
case XK_Z: return Input.Z;
|
|
||||||
default: return Input.None;
|
default: return Input.None;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1293,3 +1338,20 @@ Kill()
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unittest
|
||||||
|
{
|
||||||
|
{ // Keys
|
||||||
|
u8 ch = InputToChar(Input.NumEight);
|
||||||
|
assert(ch == '8');
|
||||||
|
ch = InputToChar(Input.B);
|
||||||
|
assert(ch == 'B');
|
||||||
|
|
||||||
|
version(linux)
|
||||||
|
{
|
||||||
|
ch = InputToChar(ConvertInput(XK_asciitilde));
|
||||||
|
assert(ch == '~');
|
||||||
|
ch = InputToChar(ConvertInput(XK_grave));
|
||||||
|
assert(ch == '`');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user