diff -Nur a/core/linux-dist/main.cpp b/core/linux-dist/main.cpp --- a/core/linux-dist/main.cpp 2015-08-23 00:16:33.930598582 -0300 +++ b/core/linux-dist/main.cpp 2015-08-23 18:54:25.349048701 -0300 @@ -157,6 +157,10 @@ void UpdateInputState(u32 port) { + #if defined(SUPPORT_X11) + update_x11_input_state(); + #endif + #if defined(TARGET_EMSCRIPTEN) return; #endif diff -Nur a/core/linux-dist/x11.cpp b/core/linux-dist/x11.cpp --- a/core/linux-dist/x11.cpp 2015-08-23 00:16:33.930598582 -0300 +++ b/core/linux-dist/x11.cpp 2015-08-23 18:50:06.875072583 -0300 @@ -3,6 +3,7 @@ #include #include #include +#include #if !defined(GLES) #include @@ -23,6 +24,18 @@ #endif #define DEFAULT_WINDOW_HEIGHT 480 +#define DC_KEY_AXIS_UP (25) +#define DC_KEY_AXIS_DOWN (39) +#define DC_KEY_AXIS_LEFT (38) +#define DC_KEY_AXIS_RIGHT (40) +#define DC_KEY_AXIS_LT (79) +#define DC_KEY_AXIS_RT (81) + +u8 axis_joyx = 0; +u8 axis_joyy = 0; +u8 axis_lt = 0; +u8 axis_rt = 0; + map x11_keymap; int x11_dc_buttons = 0xFFFF; int x11_keyboard_input = 0; @@ -55,8 +68,27 @@ XSendEvent((Display*)x11_disp, DefaultRootWindow((Display*)x11_disp), False, SubstructureNotifyMask, &xev); } +void update_x11_input_state() +{ + //static char key = 0; + + //kcode[port]=0xFFFF; + joyx[0] = axis_joyx; + joyy[0] = axis_joyy; + lt[0] = axis_lt; + rt[0] = axis_rt; + return; + + //HandleEvents(port); +} + void input_x11_handle() { + static bool dc_axis_up = false; + static bool dc_axis_down = false; + static bool dc_axis_left = false; + static bool dc_axis_right = false; + if (x11_win && x11_keyboard_input) { //Handle X11 @@ -68,6 +100,90 @@ { case KeyPress: case KeyRelease: + if (e.xkey.keycode == DC_KEY_AXIS_UP) + { + if (e.type == KeyPress) + { + dc_axis_up = true; + } + else if (e.type == KeyRelease) + { + dc_axis_up = false; + } + else + { + } + } + if (e.xkey.keycode == DC_KEY_AXIS_DOWN) + { + if (e.type == KeyPress) + { + dc_axis_down = true; + } + else if (e.type == KeyRelease) + { + dc_axis_down = false; + } + else + { + } + } + if (e.xkey.keycode == DC_KEY_AXIS_LEFT) + { + if (e.type == KeyPress) + { + dc_axis_left = true; + } + else if (e.type == KeyRelease) + { + dc_axis_left = false; + } + else + { + } + } + if (e.xkey.keycode == DC_KEY_AXIS_RIGHT) + { + if (e.type == KeyPress) + { + dc_axis_right = true; + } + else if (e.type == KeyRelease) + { + dc_axis_right = false; + } + else + { + } + } + if (e.xkey.keycode == DC_KEY_AXIS_LT) + { + if (e.type == KeyPress) + { + axis_lt = 255; + } + else if (e.type == KeyRelease) + { + axis_lt = 0; + } + else + { + } + } + if (e.xkey.keycode == DC_KEY_AXIS_RT) + { + if (e.type == KeyPress) + { + axis_rt = 255; + } + else if (e.type == KeyRelease) + { + axis_rt = 0; + } + else + { + } + } if (e.type == KeyRelease && e.xkey.keycode == 95) // F11 button { x11_fullscreen = !x11_fullscreen; @@ -89,26 +205,45 @@ break; } } + if ((dc_axis_up == true) && (dc_axis_down == false)) + { + axis_joyy = -127; + } + else if ((dc_axis_up == false) && (dc_axis_down == true)) + { + axis_joyy = 127; + } + else + { + axis_joyy = 0; + } + if ((dc_axis_left == true) && (dc_axis_right == false)) + { + axis_joyx = -127; + } + else if ((dc_axis_left == false) && (dc_axis_right == true)) + { + axis_joyx = 127; + } + else + { + axis_joyx = 0; + } } } void input_x11_init() { - x11_keymap[113] = DC_DPAD_LEFT; - x11_keymap[114] = DC_DPAD_RIGHT; + x11_keymap[44] = DC_DPAD_LEFT; + x11_keymap[46] = DC_DPAD_RIGHT; - x11_keymap[111] = DC_DPAD_UP; - x11_keymap[116] = DC_DPAD_DOWN; + x11_keymap[31] = DC_DPAD_UP; + x11_keymap[45] = DC_DPAD_DOWN; - x11_keymap[53] = DC_BTN_X; - x11_keymap[54] = DC_BTN_B; - x11_keymap[55] = DC_BTN_A; - - /* - //TODO: Fix sliders - x11_keymap[38] = DPad_Down; - x11_keymap[39] = DPad_Down; - */ + x11_keymap[80] = DC_BTN_Y; + x11_keymap[83] = DC_BTN_X; + x11_keymap[85] = DC_BTN_B; + x11_keymap[84] = DC_BTN_A; x11_keymap[36] = DC_BTN_START; diff -Nur a/core/linux-dist/x11.h b/core/linux-dist/x11.h --- a/core/linux-dist/x11.h 2015-08-23 00:16:33.930598582 -0300 +++ b/core/linux-dist/x11.h 2015-08-23 18:58:04.534722602 -0300 @@ -1,6 +1,7 @@ #pragma once extern void* x11_glc; +extern void update_x11_input_state(); extern void input_x11_init(); extern void input_x11_handle(); extern void x11_window_create();