aboutsummaryrefslogtreecommitdiff
path: root/src/window/key.c
blob: ecddf0ebbd9db095845c9b337065834862931c1f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
#include "../../include/mgl/window/key.h"
#include <X11/keysym.h>

const char* mgl_key_to_string(mgl_key key) {
    switch(key) {
        case MGL_KEY_UNKNOWN:   return 0;
        case MGL_KEY_A:         return "A";
        case MGL_KEY_B:         return "B";
        case MGL_KEY_C:         return "C";
        case MGL_KEY_D:         return "D";
        case MGL_KEY_E:         return "E";
        case MGL_KEY_F:         return "F";
        case MGL_KEY_G:         return "G";
        case MGL_KEY_H:         return "H";
        case MGL_KEY_I:         return "I";
        case MGL_KEY_J:         return "J";
        case MGL_KEY_K:         return "K";
        case MGL_KEY_L:         return "L";
        case MGL_KEY_M:         return "M";
        case MGL_KEY_N:         return "N";
        case MGL_KEY_O:         return "O";
        case MGL_KEY_P:         return "P";
        case MGL_KEY_Q:         return "Q";
        case MGL_KEY_R:         return "R";
        case MGL_KEY_S:         return "S";
        case MGL_KEY_T:         return "T";
        case MGL_KEY_U:         return "U";
        case MGL_KEY_V:         return "V";
        case MGL_KEY_W:         return "W";
        case MGL_KEY_X:         return "X";
        case MGL_KEY_Y:         return "Y";
        case MGL_KEY_Z:         return "Z";
        case MGL_KEY_NUM0:      return "0";
        case MGL_KEY_NUM1:      return "1";
        case MGL_KEY_NUM2:      return "2";
        case MGL_KEY_NUM3:      return "3";
        case MGL_KEY_NUM4:      return "4";
        case MGL_KEY_NUM5:      return "5";
        case MGL_KEY_NUM6:      return "6";
        case MGL_KEY_NUM7:      return "7";
        case MGL_KEY_NUM8:      return "8";
        case MGL_KEY_NUM9:      return "9";
        case MGL_KEY_ESCAPE:    return "Escape";
        case MGL_KEY_LCONTROL:  return "Left ctrl";
        case MGL_KEY_LSHIFT:    return "Left shift";
        case MGL_KEY_LALT:      return "Left alt";
        case MGL_KEY_LSYSTEM:   return "Left system";
        case MGL_KEY_RCONTROL:  return "Right ctrl";
        case MGL_KEY_RSHIFT:    return "Right shift";
        case MGL_KEY_RALT:      return "Right alt";
        case MGL_KEY_RSYSTEM:   return "Right system";
        case MGL_KEY_MENU:      return "Menu";
        case MGL_KEY_LBRACKET:  return "[";
        case MGL_KEY_RBRACKET:  return "]";
        case MGL_KEY_SEMICOLON: return ";";
        case MGL_KEY_COMMA:     return ",";
        case MGL_KEY_PERIOD:    return ".";
        case MGL_KEY_QUOTE:     return "'";
        case MGL_KEY_SLASH:     return "/";
        case MGL_KEY_BACKSLASH: return "\\";
        case MGL_KEY_TILDE:     return "~";
        case MGL_KEY_EQUAL:     return "=";
        case MGL_KEY_HYPHEN:    return "-";
        case MGL_KEY_SPACE:     return "Space";
        case MGL_KEY_ENTER:     return "Enter";
        case MGL_KEY_BACKSPACE: return "Backspace";
        case MGL_KEY_TAB:       return "Tab";
        case MGL_KEY_PAGEUP:    return "PageUp";
        case MGL_KEY_PAGEDOWN:  return "PageDown";
        case MGL_KEY_END:       return "End";
        case MGL_KEY_HOME:      return "Home";
        case MGL_KEY_INSERT:    return "Insert";
        case MGL_KEY_DELETE:    return "Delete";
        case MGL_KEY_ADD:       return "Add";
        case MGL_KEY_SUBTRACT:  return "Subtract";
        case MGL_KEY_MULTIPLY:  return "Multiply";
        case MGL_KEY_DIVIDE:    return "Divide";
        case MGL_KEY_LEFT:      return "Left";
        case MGL_KEY_RIGHT:     return "Right";
        case MGL_KEY_UP:        return "Up";
        case MGL_KEY_DOWN:      return "Down";
        case MGL_KEY_NUMPAD0:   return "Numpad0";
        case MGL_KEY_NUMPAD1:   return "Numpad1";
        case MGL_KEY_NUMPAD2:   return "Numpad2";
        case MGL_KEY_NUMPAD3:   return "Numpad3";
        case MGL_KEY_NUMPAD4:   return "Numpad4";
        case MGL_KEY_NUMPAD5:   return "Numpad5";
        case MGL_KEY_NUMPAD6:   return "Numpad6";
        case MGL_KEY_NUMPAD7:   return "Numpad7";
        case MGL_KEY_NUMPAD8:   return "Numpad8";
        case MGL_KEY_NUMPAD9:   return "Numpad9";
        case MGL_KEY_F1:        return "F1";
        case MGL_KEY_F2:        return "F2";
        case MGL_KEY_F3:        return "F3";
        case MGL_KEY_F4:        return "F4";
        case MGL_KEY_F5:        return "F5";
        case MGL_KEY_F6:        return "F6";
        case MGL_KEY_F7:        return "F7";
        case MGL_KEY_F8:        return "F8";
        case MGL_KEY_F9:        return "F9";
        case MGL_KEY_F10:       return "F10";
        case MGL_KEY_F11:       return "F11";
        case MGL_KEY_F12:       return "F12";
        case MGL_KEY_F13:       return "F13";
        case MGL_KEY_F14:       return "F14";
        case MGL_KEY_F15:       return "F15";
        case MGL_KEY_PAUSE:     return "Pause";
        case __MGL_NUM_KEYS__:  return 0;
    }
    return 0;
}

bool mgl_key_is_modifier(mgl_key key) {
    return key >= MGL_KEY_LCONTROL && key <= MGL_KEY_RSYSTEM;
}

uint64_t mgl_key_to_x11_keysym(mgl_key key) {
    if(key >= MGL_KEY_A && key <= MGL_KEY_Z)
        return XK_A + (key - MGL_KEY_A);
    if(key >= MGL_KEY_NUM0 && key <= MGL_KEY_NUM9)
        return XK_0 + (key - MGL_KEY_NUM0);
    if(key >= MGL_KEY_NUMPAD0 && key <= MGL_KEY_NUMPAD9)
        return XK_KP_0 + (key - MGL_KEY_NUMPAD0);

    /* TODO: Fill in the rest */
    switch(key) {
        case MGL_KEY_SPACE:      return XK_space;
        case MGL_KEY_BACKSPACE:  return XK_BackSpace;
        case MGL_KEY_TAB:        return XK_Tab;
        case MGL_KEY_ENTER:      return XK_Return;
        case MGL_KEY_ESCAPE:     return XK_Escape;
        case MGL_KEY_LCONTROL:   return XK_Control_L;
        case MGL_KEY_LSHIFT:     return XK_Shift_L;
        case MGL_KEY_LALT:       return XK_Alt_L;
        case MGL_KEY_LSYSTEM:    return XK_Super_L;
        case MGL_KEY_RCONTROL:   return XK_Control_R;
        case MGL_KEY_RSHIFT:     return XK_Shift_R;
        case MGL_KEY_RALT:       return XK_Alt_R;
        case MGL_KEY_RSYSTEM:    return XK_Super_R;
        case MGL_KEY_DELETE:     return XK_Delete;
        case MGL_KEY_HOME:       return XK_Home;
        case MGL_KEY_LEFT:       return XK_Left;
        case MGL_KEY_UP:         return XK_Up;
        case MGL_KEY_RIGHT:      return XK_Right;
        case MGL_KEY_DOWN:       return XK_Down;
        case MGL_KEY_PAGEUP:     return XK_Page_Up;
        case MGL_KEY_PAGEDOWN:   return XK_Page_Down;
        case MGL_KEY_END:        return XK_End;
        case MGL_KEY_F1:         return XK_F1;
        case MGL_KEY_F2:         return XK_F2;
        case MGL_KEY_F3:         return XK_F3;
        case MGL_KEY_F4:         return XK_F4;
        case MGL_KEY_F5:         return XK_F5;
        case MGL_KEY_F6:         return XK_F6;
        case MGL_KEY_F7:         return XK_F7;
        case MGL_KEY_F8:         return XK_F8;
        case MGL_KEY_F9:         return XK_F9;
        case MGL_KEY_F10:        return XK_F10;
        case MGL_KEY_F11:        return XK_F11;
        case MGL_KEY_F12:        return XK_F12;
        case MGL_KEY_F13:        return XK_F13;
        case MGL_KEY_F14:        return XK_F14;
        case MGL_KEY_F15:        return XK_F15;
        default:                 return XK_VoidSymbol;
    }
    return XK_VoidSymbol;
}