Panagiotis Christopoulos Charitos 13 tahun lalu
induk
melakukan
144bd16b08

+ 1 - 1
include/anki/core/NativeWindowGlxX11.h

@@ -15,7 +15,7 @@ struct NativeWindowImpl
 {
 	Display* xDisplay = nullptr;
 	Window xWindow = 0;
-	Colormap xColormap; ///< Its is actualy an unsigned int
+	Colormap xColormap = 0; ///< Its is actualy an unsigned int
 	GLXContext glxContext = nullptr; ///< Its actualy a pointer
 	GLXFBConfig* glxConfig = nullptr;
 

+ 2 - 1
include/anki/input/Input.h

@@ -4,6 +4,7 @@
 #include "anki/math/Math.h"
 #include "anki/util/Singleton.h"
 #include "anki/util/Array.h"
+#include "anki/input/KeyCode.h"
 
 namespace anki {
 
@@ -45,7 +46,7 @@ private:
 	/// - 0 times: unpressed
 	/// - 1 times: pressed once
 	/// - >1 times: Kept pressed 'n' times continuously
-	Array<U32, 128> keys;
+	Array<U32, KC_COUNT> keys;
 
 	/// Mouse btns. Supporting 3 btns & wheel. @see keys
 	Array<U32, 8> mouseBtns;

+ 92 - 0
include/anki/input/KeyCode.h

@@ -0,0 +1,92 @@
+#ifndef ANKI_INPUT_KEY_CODES_H
+#define ANKI_INPUT_KEY_CODES_H
+
+namespace anki {
+
+/// Keyboard scancodes taken from SDL
+enum KeyCode
+{
+	KC_UNKNOWN = 0,
+
+	KC_RETURN = '\r',
+	KC_ESCAPE = '\033',
+	KC_BACKSPACE = '\b',
+	KC_TAB = '\t',
+	KC_SPACE = ' ',
+	KC_EXCLAIM = '!',
+	KC_QUOTEDBL = '"',
+	KC_HASH = '#',
+	KC_PERCENT = '%',
+	KC_DOLLAR = '$',
+	KC_AMPERSAND = '&',
+	KC_QUOTE = '\'',
+	KC_LEFTPAREN = '(',
+	KC_RIGHTPAREN = ')',
+	KC_ASTERISK = '*',
+	KC_PLUS = '+',
+	KC_COMMA = ',',
+	KC_MINUS = '-',
+	KC_PERIOD = '.',
+	KC_SLASH = '/',
+	KC_0 = '0',
+	KC_1 = '1',
+	KC_2 = '2',
+	KC_3 = '3',
+	KC_4 = '4',
+	KC_5 = '5',
+	KC_6 = '6',
+	KC_7 = '7',
+	KC_8 = '8',
+	KC_9 = '9',
+	KC_COLON = ':',
+	KC_SEMICOLON = ';',
+	KC_LESS = '<',
+	KC_EQUALS = '=',
+	KC_GREATER = '>',
+	KC_QUESTION = '?',
+	KC_AT = '@',
+	KC_LEFTBRACKET = '[',
+	KC_BACKSLASH = '\\',
+	KC_RIGHTBRACKET = ']',
+	KC_CARET = '^',
+	KC_UNDERSCORE = '_',
+	KC_BACKQUOTE = '`',
+	KC_A = 'a',
+	KC_B = 'b',
+	KC_C = 'c',
+	KC_D = 'd',
+	KC_E = 'e',
+	KC_F = 'f',
+	KC_G = 'g',
+	KC_H = 'h',
+	KC_I = 'i',
+	KC_J = 'j',
+	KC_K = 'k',
+	KC_L = 'l',
+	KC_M = 'm',
+	KC_N = 'n',
+	KC_O = 'o',
+	KC_P = 'p',
+	KC_Q = 'q',
+	KC_R = 'r',
+	KC_S = 's',
+	KC_T = 't',
+	KC_U = 'u',
+	KC_V = 'v',
+	KC_W = 'w',
+	KC_X = 'x',
+	KC_Y = 'y',
+	KC_Z = 'z',
+	KC_DELETE = '\177',
+
+	KC_UP,
+	KC_DOWN,
+	KC_LEFT,
+	KC_RIGHT,
+
+	KC_COUNT
+};
+
+} // end namespace anki
+
+#endif

+ 91 - 0
src/input/InputX11.cpp

@@ -8,8 +8,95 @@
 #	error "See file"
 #endif
 
+#define DEBUG_EVENTS 1
+
 namespace anki {
 
+//==============================================================================
+struct X11KeyCodeToAnki
+{
+	U32 x;
+	KeyCode ak;
+};
+
+X11KeyCodeToAnki x2a[] = {
+	{XK_Return, KC_RETURN},
+	{XK_Escape, KC_ESCAPE},
+	{XK_BackSpace, KC_BACKSPACE},
+	{XK_Tab, KC_TAB},
+	{XK_space, KC_SPACE},
+	{XK_exclam, KC_EXCLAIM},
+	{XK_quotedbl, KC_QUOTEDBL},
+	{XK_numbersign, KC_HASH},
+	{XK_percent, KC_PERCENT},
+	{XK_dollar, KC_DOLLAR},
+	{XK_ampersand, KC_AMPERSAND},
+	{XK_apostrophe, KC_QUOTE},
+	{XK_parenleft, KC_LEFTPAREN},
+	{XK_parenright, KC_RIGHTPAREN},
+	{XK_asterisk, KC_ASTERISK},
+	{XK_plus, KC_PLUS},
+	{XK_comma, KC_COMMA},
+	{XK_minus, KC_MINUS},
+	{XK_period, KC_PERIOD},
+	{XK_slash, KC_SLASH},
+	{XK_0, KC_0},
+	{XK_1, KC_1},
+	{XK_2, KC_2},
+	{XK_3, KC_3},
+	{XK_4, KC_4},
+	{XK_5, KC_5},
+	{XK_6, KC_6},
+	{XK_7, KC_7},
+	{XK_8, KC_8},
+	{XK_9, KC_9},
+	{XK_colon, KC_COLON},
+	{XK_semicolon, KC_SEMICOLON},
+	{XK_less, KC_LESS},
+	{XK_equal, KC_EQUALS},
+	{XK_greater, KC_GREATER},
+	{XK_question, KC_QUESTION},
+	{XK_at, KC_AT},
+	{XK_bracketleft, KC_LEFTBRACKET},
+	{XK_backslash, KC_BACKSLASH},
+	{XK_bracketright, KC_RIGHTBRACKET},
+	/*{XK_caret, KC_CARET},*/
+	{XK_underscore, KC_UNDERSCORE},
+	{XK_grave, KC_BACKQUOTE},
+	{XK_a, KC_A},
+	{XK_b, KC_B},
+	{XK_c, KC_C},
+	{XK_d, KC_D},
+	{XK_e, KC_E},
+	{XK_f, KC_F},
+	{XK_g, KC_G},
+	{XK_h, KC_H},
+	{XK_i, KC_I},
+	{XK_j, KC_J},
+	{XK_k, KC_K},
+	{XK_l, KC_L},
+	{XK_m, KC_M},
+	{XK_n, KC_N},
+	{XK_o, KC_O},
+	{XK_p, KC_P},
+	{XK_q, KC_Q},
+	{XK_r, KC_R},
+	{XK_s, KC_S},
+	{XK_t, KC_T},
+	{XK_u, KC_U},
+	{XK_v, KC_V},
+	{XK_w, KC_W},
+	{XK_x, KC_X},
+	{XK_y, KC_Y},
+	{XK_z, KC_Z},
+	{XK_Delete, KC_DELETE},
+
+	{XK_Up,  KC_UP},
+	{XK_Down, KC_DOWN},
+	{XK_Left, KC_LEFT},
+	{XK_Right, KC_RIGHT}
+};
+
 //==============================================================================
 static Bool eventsPending(Display* display)
 {
@@ -76,10 +163,14 @@ void Input::handleEvents()
 		switch(event.type)
 		{
 		case KeyPress:
+#if DEBUG_EVENTS
 			ANKI_LOGI("Key pressed " << rand());
+#endif
 			break;
 		default:
+#if DEBUG_EVENTS
 			ANKI_LOGW("Unknown X event");
+#endif
 			break;
 		}
 	}