summaryrefslogtreecommitdiff
path: root/games/moonlight-embedded/files/patch-src_input_sdl.c
diff options
context:
space:
mode:
Diffstat (limited to 'games/moonlight-embedded/files/patch-src_input_sdl.c')
-rw-r--r--games/moonlight-embedded/files/patch-src_input_sdl.c309
1 files changed, 0 insertions, 309 deletions
diff --git a/games/moonlight-embedded/files/patch-src_input_sdl.c b/games/moonlight-embedded/files/patch-src_input_sdl.c
deleted file mode 100644
index 6b6278d8109e..000000000000
--- a/games/moonlight-embedded/files/patch-src_input_sdl.c
+++ /dev/null
@@ -1,309 +0,0 @@
---- src/input/sdl.c.orig 2023-10-08 02:12:37 UTC
-+++ src/input/sdl.c
-@@ -19,15 +19,23 @@
-
- #include "sdl.h"
- #include "../sdl.h"
-+#include "../loop.h"
-
-+#include <poll.h>
-+#include <fcntl.h>
-+#include <unistd.h>
- #include <Limelight.h>
-
- #define ACTION_MODIFIERS (MODIFIER_SHIFT|MODIFIER_ALT|MODIFIER_CTRL)
- #define QUIT_KEY SDLK_q
- #define QUIT_BUTTONS (PLAY_FLAG|BACK_FLAG|LB_FLAG|RB_FLAG)
- #define FULLSCREEN_KEY SDLK_f
--#define UNGRAB_KEY SDLK_z
-+#define UNGRAB_MOUSE_KEY SDLK_m
-+#define UNGRAB_WINDOW_KEY SDLK_z
-
-+static bool isx11sdlcall = false;
-+static int x11_sdl_event_handle(int fd);
-+
- static const int SDL_TO_LI_BUTTON_MAP[] = {
- A_FLAG, B_FLAG, X_FLAG, Y_FLAG,
- BACK_FLAG, SPECIAL_FLAG, PLAY_FLAG,
-@@ -51,6 +59,8 @@ typedef struct _GAMEPAD_STATE {
- int haptic_effect_id;
- #endif
- short id;
-+ int fd;
-+ bool fdadded;
- bool initialized;
- } GAMEPAD_STATE, *PGAMEPAD_STATE;
-
-@@ -62,6 +72,22 @@ static GAMEPAD_STATE gamepads[MAX_GAMEPADS];
- static int keyboard_modifiers;
- static int activeGamepadMask = 0;
-
-+static short keystatlist[0xFF];
-+static void keyrelease(int keycode) {
-+ keystatlist[keycode] = 0;
-+}
-+static void keypress(int keycode) {
-+ keystatlist[keycode] = 1;
-+}
-+static void freeallkey () {
-+ for (int i=0;i<0xFF;i++) {
-+ if (keystatlist[i] == 1) {
-+ keystatlist[i] = 0;
-+ LiSendKeyboardEvent(0x80 << 8 | i, KEY_ACTION_UP, 0);
-+ }
-+ }
-+}
-+
- int sdl_gamepads = 0;
-
- static void send_controller_arrival(PGAMEPAD_STATE state) {
-@@ -142,12 +168,22 @@ static PGAMEPAD_STATE get_gamepad(SDL_JoystickID sdl_i
- }
-
- static void add_gamepad(int joystick_index) {
-+ int fd;
- SDL_GameController* controller = SDL_GameControllerOpen(joystick_index);
- if (!controller) {
- fprintf(stderr, "Could not open gamecontroller %i: %s\n", joystick_index, SDL_GetError());
- return;
- }
--
-+ if (isx11sdlcall) {
-+ char* controllerpath = SDL_GameControllerPath(controller);
-+ fd = open(controllerpath, O_RDWR|O_NONBLOCK);
-+ if (fd == -1) {
-+ close(fd);
-+ fprintf(stderr, "Could not open gamecontroller from path: %s\n", controllerpath);
-+ return;
-+ }
-+ }
-+
- SDL_Joystick* joystick = SDL_GameControllerGetJoystick(controller);
- SDL_JoystickID joystick_id = SDL_JoystickInstanceID(joystick);
-
-@@ -166,10 +202,15 @@ static void add_gamepad(int joystick_index) {
- // Create a new gamepad state
- state = get_gamepad(joystick_id, true);
- state->controller = controller;
-+ if (isx11sdlcall) {
-+ state->fd = fd;
-+ loop_add_fd(state->fd, &x11_sdl_event_handle, POLLIN);
-+ state->fdadded = true;
-+ }
-
- #if !SDL_VERSION_ATLEAST(2, 0, 9)
- state->haptic = SDL_HapticOpenFromJoystick(joystick);
-- if (haptic && (SDL_HapticQuery(state->haptic) & SDL_HAPTIC_LEFTRIGHT) == 0) {
-+ if (state->haptic && (SDL_HapticQuery(state->haptic) & SDL_HAPTIC_LEFTRIGHT) == 0) {
- SDL_HapticClose(state->haptic);
- state->haptic = NULL;
- }
-@@ -182,6 +223,11 @@ static void add_gamepad(int joystick_index) {
- sdl_gamepads++;
- }
-
-+static void x11_add_gamepad(int joystick_index) {
-+ isx11sdlcall = true;
-+ add_gamepad(joystick_index);
-+}
-+
- static void remove_gamepad(SDL_JoystickID sdl_id) {
- for (int i = 0;i<MAX_GAMEPADS;i++) {
- if (gamepads[i].initialized && gamepads[i].sdl_id == sdl_id) {
-@@ -208,6 +254,20 @@ static void remove_gamepad(SDL_JoystickID sdl_id) {
- }
- }
-
-+static void x11_remove_gamepad(SDL_JoystickID sdl_id) {
-+ for (int i=0;i<MAX_GAMEPADS;i++) {
-+ if (gamepads[i].initialized && gamepads[i].sdl_id == sdl_id) {
-+ if (gamepads[i].fdadded) {
-+ loop_remove_fd(gamepads[i].fd);
-+ gamepads[i].fdadded = false;
-+ close(gamepads[i].fd);
-+ }
-+ remove_gamepad(gamepads[i].sdl_id);
-+ return;
-+ }
-+ }
-+}
-+
- void sdlinput_init(char* mappings) {
- memset(gamepads, 0, sizeof(gamepads));
-
-@@ -317,15 +377,28 @@ int sdlinput_handle_event(SDL_Window* window, SDL_Even
- keyboard_modifiers &= ~modifier;
- }
-
-- LiSendKeyboardEvent(0x80 << 8 | button, event->type==SDL_KEYDOWN?KEY_ACTION_DOWN:KEY_ACTION_UP, keyboard_modifiers);
--
- // Quit the stream if all the required quit keys are down
-- if ((keyboard_modifiers & ACTION_MODIFIERS) == ACTION_MODIFIERS && event->key.keysym.sym == QUIT_KEY && event->type==SDL_KEYUP)
-+ if ((keyboard_modifiers & ACTION_MODIFIERS) == ACTION_MODIFIERS && event->key.keysym.sym == QUIT_KEY && event->type==SDL_KEYUP) {
-+ freeallkey();
- return SDL_QUIT_APPLICATION;
-- else if ((keyboard_modifiers & ACTION_MODIFIERS) == ACTION_MODIFIERS && event->key.keysym.sym == FULLSCREEN_KEY && event->type==SDL_KEYUP)
-+ } else if ((keyboard_modifiers & ACTION_MODIFIERS) == ACTION_MODIFIERS && event->key.keysym.sym == FULLSCREEN_KEY && event->type==SDL_KEYUP) {
-+ freeallkey();
- return SDL_TOGGLE_FULLSCREEN;
-- else if ((keyboard_modifiers & ACTION_MODIFIERS) == ACTION_MODIFIERS && event->key.keysym.sym == UNGRAB_KEY && event->type==SDL_KEYUP)
-+ } else if ((keyboard_modifiers & ACTION_MODIFIERS) == ACTION_MODIFIERS && event->key.keysym.sym == UNGRAB_MOUSE_KEY && event->type==SDL_KEYUP) {
-+ freeallkey();
- return SDL_GetRelativeMouseMode() ? SDL_MOUSE_UNGRAB : SDL_MOUSE_GRAB;
-+ } else if ((keyboard_modifiers & ACTION_MODIFIERS) == ACTION_MODIFIERS && event->key.keysym.sym == UNGRAB_WINDOW_KEY && event->type==SDL_KEYUP) {
-+ freeallkey();
-+ return iskeyboardgrab ? SDL_WINDOW_UNGRAB : SDL_WINDOW_GRAB;
-+ }
-+
-+ if (event->type==SDL_KEYDOWN)
-+ keypress(button);
-+ else
-+ keyrelease(button);
-+
-+
-+ LiSendKeyboardEvent(0x80 << 8 | button, event->type==SDL_KEYDOWN?KEY_ACTION_DOWN:KEY_ACTION_UP, keyboard_modifiers);
- break;
- case SDL_FINGERDOWN:
- case SDL_FINGERMOTION:
-@@ -524,4 +597,139 @@ void sdlinput_set_controller_led(unsigned short contro
- #if SDL_VERSION_ATLEAST(2, 0, 14)
- SDL_GameControllerSetLED(state->controller, r, g, b);
- #endif
--}
-\ No newline at end of file
-+}
-+
-+static int x11_sdlinput_handle_event(SDL_Event* event) {
-+ int button = 0;
-+ unsigned char touchEventType;
-+ PGAMEPAD_STATE gamepad;
-+ switch (event->type) {
-+ case SDL_CONTROLLERAXISMOTION:
-+ gamepad = get_gamepad(event->caxis.which, false);
-+ if (!gamepad)
-+ return SDL_NOTHING;
-+ switch (event->caxis.axis) {
-+ case SDL_CONTROLLER_AXIS_LEFTX:
-+ gamepad->leftStickX = event->caxis.value;
-+ break;
-+ case SDL_CONTROLLER_AXIS_LEFTY:
-+ gamepad->leftStickY = -SDL_max(event->caxis.value, (short)-32767);
-+ break;
-+ case SDL_CONTROLLER_AXIS_RIGHTX:
-+ gamepad->rightStickX = event->caxis.value;
-+ break;
-+ case SDL_CONTROLLER_AXIS_RIGHTY:
-+ gamepad->rightStickY = -SDL_max(event->caxis.value, (short)-32767);
-+ break;
-+ case SDL_CONTROLLER_AXIS_TRIGGERLEFT:
-+ gamepad->leftTrigger = (unsigned char)(event->caxis.value * 255UL / 32767);
-+ break;
-+ case SDL_CONTROLLER_AXIS_TRIGGERRIGHT:
-+ gamepad->rightTrigger = (unsigned char)(event->caxis.value * 255UL / 32767);
-+ break;
-+ default:
-+ return SDL_NOTHING;
-+ }
-+ LiSendMultiControllerEvent(gamepad->id, activeGamepadMask, gamepad->buttons, gamepad->leftTrigger, gamepad->rightTrigger, gamepad->leftStickX, gamepad->leftStickY, gamepad->rightStickX, gamepad->rightStickY);
-+ break;
-+ case SDL_CONTROLLERBUTTONDOWN:
-+ case SDL_CONTROLLERBUTTONUP:
-+ gamepad = get_gamepad(event->cbutton.which, false);
-+ if (!gamepad)
-+ return SDL_NOTHING;
-+ if (event->cbutton.button >= SDL_arraysize(SDL_TO_LI_BUTTON_MAP))
-+ return SDL_NOTHING;
-+
-+ if (event->type == SDL_CONTROLLERBUTTONDOWN)
-+ gamepad->buttons |= SDL_TO_LI_BUTTON_MAP[event->cbutton.button];
-+ else
-+ gamepad->buttons &= ~SDL_TO_LI_BUTTON_MAP[event->cbutton.button];
-+
-+ if ((gamepad->buttons & QUIT_BUTTONS) == QUIT_BUTTONS)
-+ return SDL_QUIT_APPLICATION;
-+
-+ LiSendMultiControllerEvent(gamepad->id, activeGamepadMask, gamepad->buttons, gamepad->leftTrigger, gamepad->rightTrigger, gamepad->leftStickX, gamepad->leftStickY, gamepad->rightStickX, gamepad->rightStickY);
-+ break;
-+ case SDL_CONTROLLERDEVICEADDED:
-+ x11_add_gamepad(event->cdevice.which);
-+ break;
-+ case SDL_CONTROLLERDEVICEREMOVED:
-+ x11_remove_gamepad(event->cdevice.which);
-+ break;
-+#if SDL_VERSION_ATLEAST(2, 0, 14)
-+ case SDL_CONTROLLERSENSORUPDATE:
-+ gamepad = get_gamepad(event->csensor.which, false);
-+ if (!gamepad)
-+ return SDL_NOTHING;
-+ switch (event->csensor.sensor) {
-+ case SDL_SENSOR_ACCEL:
-+ LiSendControllerMotionEvent(gamepad->id, LI_MOTION_TYPE_ACCEL, event->csensor.data[0], event->csensor.data[1], event->csensor.data[2]);
-+ break;
-+ case SDL_SENSOR_GYRO:
-+ // Convert rad/s to deg/s
-+ LiSendControllerMotionEvent(gamepad->id, LI_MOTION_TYPE_GYRO,
-+ event->csensor.data[0] * 57.2957795f,
-+ event->csensor.data[1] * 57.2957795f,
-+ event->csensor.data[2] * 57.2957795f);
-+ break;
-+ }
-+ break;
-+ case SDL_CONTROLLERTOUCHPADDOWN:
-+ case SDL_CONTROLLERTOUCHPADUP:
-+ case SDL_CONTROLLERTOUCHPADMOTION:
-+ gamepad = get_gamepad(event->ctouchpad.which, false);
-+ if (!gamepad)
-+ return SDL_NOTHING;
-+ switch (event->type) {
-+ case SDL_CONTROLLERTOUCHPADDOWN:
-+ touchEventType = LI_TOUCH_EVENT_DOWN;
-+ break;
-+ case SDL_CONTROLLERTOUCHPADUP:
-+ touchEventType = LI_TOUCH_EVENT_UP;
-+ break;
-+ case SDL_CONTROLLERTOUCHPADMOTION:
-+ touchEventType = LI_TOUCH_EVENT_MOVE;
-+ break;
-+ default:
-+ return SDL_NOTHING;
-+ }
-+ LiSendControllerTouchEvent(gamepad->id, touchEventType, event->ctouchpad.finger,
-+ event->ctouchpad.x, event->ctouchpad.y, event->ctouchpad.pressure);
-+ break;
-+#endif
-+ }
-+
-+ return SDL_NOTHING;
-+}
-+
-+static int x11_sdl_event_handle(int fd) {
-+ SDL_Event event;
-+ for (int i=0;i<MAX_GAMEPADS;i++) {
-+ if (gamepads[i].fd == fd) {
-+ int rc;
-+ while (SDL_PollEvent(&event)) {
-+ rc = x11_sdlinput_handle_event(&event);
-+ if (rc == SDL_QUIT_APPLICATION)
-+ return LOOP_RETURN;
-+ }
-+ }
-+ }
-+ return LOOP_OK;
-+}
-+
-+void x11_sdl_init(char* mappings) {
-+ isx11sdlcall = true;
-+ sdlinput_init(mappings);
-+}
-+
-+void x11_sdl_stop() {
-+ for (int i=0;i<MAX_GAMEPADS;i++) {
-+ if (gamepads[i].initialized && gamepads[i].fdadded) {
-+ loop_remove_fd(gamepads[i].fd);
-+ gamepads[i].fdadded = false;
-+ close(gamepads[i].fd);
-+ remove_gamepad(gamepads[i].sdl_id);
-+ }
-+ }
-+ SDL_Quit();
-+}