summaryrefslogtreecommitdiff
path: root/pcr/reicast-git/enable_x11_keyboard_support.patch
diff options
context:
space:
mode:
Diffstat (limited to 'pcr/reicast-git/enable_x11_keyboard_support.patch')
-rw-r--r--pcr/reicast-git/enable_x11_keyboard_support.patch233
1 files changed, 233 insertions, 0 deletions
diff --git a/pcr/reicast-git/enable_x11_keyboard_support.patch b/pcr/reicast-git/enable_x11_keyboard_support.patch
new file mode 100644
index 000000000..1dfd41c72
--- /dev/null
+++ b/pcr/reicast-git/enable_x11_keyboard_support.patch
@@ -0,0 +1,233 @@
+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 <X11/Xlib.h>
+ #include <X11/Xatom.h>
+ #include <X11/Xutil.h>
++#include <X11/XKBlib.h>
+
+ #if !defined(GLES)
+ #include <GL/gl.h>
+@@ -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<int, int> 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();