mirror of
https://github.com/moonlight-stream/moonlight-embedded.git
synced 2026-08-28 21:11:13 +00:00
Ungrab and fullscreen actions in SDL
This commit is contained in:
+14
-8
@@ -20,11 +20,13 @@
|
|||||||
#ifdef HAVE_SDL
|
#ifdef HAVE_SDL
|
||||||
|
|
||||||
#include "sdlinput.h"
|
#include "sdlinput.h"
|
||||||
|
#include "../sdl.h"
|
||||||
|
|
||||||
#include "limelight-common/Limelight.h"
|
#include "limelight-common/Limelight.h"
|
||||||
|
|
||||||
#define QUIT_MODIFIERS (MODIFIER_SHIFT|MODIFIER_ALT|MODIFIER_CTRL)
|
#define ACTION_MODIFIERS (MODIFIER_SHIFT|MODIFIER_ALT|MODIFIER_CTRL)
|
||||||
#define QUIT_KEY SDLK_q
|
#define QUIT_KEY SDLK_q
|
||||||
|
#define FULLSCREEN_KEY SDLK_f
|
||||||
|
|
||||||
typedef struct _GAMEPAD_STATE {
|
typedef struct _GAMEPAD_STATE {
|
||||||
char leftTrigger, rightTrigger;
|
char leftTrigger, rightTrigger;
|
||||||
@@ -69,7 +71,7 @@ static PGAMEPAD_STATE get_gamepad(SDL_JoystickID sdl_id) {
|
|||||||
return &gamepads[0];
|
return &gamepads[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
bool sdlinput_handle_event(SDL_Event* event) {
|
int sdlinput_handle_event(SDL_Event* event) {
|
||||||
int button = 0;
|
int button = 0;
|
||||||
PGAMEPAD_STATE gamepad;
|
PGAMEPAD_STATE gamepad;
|
||||||
switch (event->type) {
|
switch (event->type) {
|
||||||
@@ -96,7 +98,7 @@ bool sdlinput_handle_event(SDL_Event* event) {
|
|||||||
if (button != 0)
|
if (button != 0)
|
||||||
LiSendMouseButtonEvent(event->type==SDL_MOUSEBUTTONDOWN?BUTTON_ACTION_PRESS:BUTTON_ACTION_RELEASE, button);
|
LiSendMouseButtonEvent(event->type==SDL_MOUSEBUTTONDOWN?BUTTON_ACTION_PRESS:BUTTON_ACTION_RELEASE, button);
|
||||||
|
|
||||||
break;
|
return SDL_MOUSE_GRAB;
|
||||||
case SDL_KEYDOWN:
|
case SDL_KEYDOWN:
|
||||||
case SDL_KEYUP:
|
case SDL_KEYUP:
|
||||||
button = event->key.keysym.sym;
|
button = event->key.keysym.sym;
|
||||||
@@ -129,8 +131,12 @@ bool sdlinput_handle_event(SDL_Event* event) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Quit the stream if all the required quit keys are down
|
// Quit the stream if all the required quit keys are down
|
||||||
if ((keyboard_modifiers & QUIT_MODIFIERS) == QUIT_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)
|
||||||
return false;
|
return SDL_QUIT_APPLICATION;
|
||||||
|
else if ((keyboard_modifiers & ACTION_MODIFIERS) == ACTION_MODIFIERS && event->key.keysym.sym == FULLSCREEN_KEY && event->type==SDL_KEYUP)
|
||||||
|
return SDL_TOGGLE_FULLSCREEN;
|
||||||
|
else if ((keyboard_modifiers & ACTION_MODIFIERS) == ACTION_MODIFIERS)
|
||||||
|
return SDL_MOUSE_UNGRAB;
|
||||||
|
|
||||||
LiSendKeyboardEvent(0x80 << 8 | button, event->type==SDL_KEYDOWN?KEY_ACTION_DOWN:KEY_ACTION_UP, keyboard_modifiers);
|
LiSendKeyboardEvent(0x80 << 8 | button, event->type==SDL_KEYDOWN?KEY_ACTION_DOWN:KEY_ACTION_UP, keyboard_modifiers);
|
||||||
break;
|
break;
|
||||||
@@ -156,7 +162,7 @@ bool sdlinput_handle_event(SDL_Event* event) {
|
|||||||
gamepad->rightTrigger = (event->caxis.value >> 8) + 127;
|
gamepad->rightTrigger = (event->caxis.value >> 8) + 127;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return true;
|
return SDL_NOTHING;
|
||||||
}
|
}
|
||||||
LiSendMultiControllerEvent(gamepad->id, gamepad->buttons, gamepad->leftTrigger, gamepad->rightTrigger, gamepad->leftStickX, gamepad->leftStickY, gamepad->rightStickX, gamepad->rightStickY);
|
LiSendMultiControllerEvent(gamepad->id, gamepad->buttons, gamepad->leftTrigger, gamepad->rightTrigger, gamepad->leftStickX, gamepad->leftStickY, gamepad->rightStickX, gamepad->rightStickY);
|
||||||
break;
|
break;
|
||||||
@@ -210,7 +216,7 @@ bool sdlinput_handle_event(SDL_Event* event) {
|
|||||||
button = RB_FLAG;
|
button = RB_FLAG;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return true;
|
return SDL_NOTHING;
|
||||||
}
|
}
|
||||||
if (event->type == SDL_CONTROLLERBUTTONDOWN)
|
if (event->type == SDL_CONTROLLERBUTTONDOWN)
|
||||||
gamepad->buttons |= button;
|
gamepad->buttons |= button;
|
||||||
@@ -220,7 +226,7 @@ bool sdlinput_handle_event(SDL_Event* event) {
|
|||||||
LiSendMultiControllerEvent(gamepad->id, gamepad->buttons, gamepad->leftTrigger, gamepad->rightTrigger, gamepad->leftStickX, gamepad->leftStickY, gamepad->rightStickX, gamepad->rightStickY);
|
LiSendMultiControllerEvent(gamepad->id, gamepad->buttons, gamepad->leftTrigger, gamepad->rightTrigger, gamepad->leftStickX, gamepad->leftStickY, gamepad->rightStickX, gamepad->rightStickY);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return true;
|
return SDL_NOTHING;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* HAVE_SDL */
|
#endif /* HAVE_SDL */
|
||||||
|
|||||||
@@ -52,6 +52,6 @@ static const short keyCodes[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
void sdlinput_init();
|
void sdlinput_init();
|
||||||
bool sdlinput_handle_event(SDL_Event* event);
|
int sdlinput_handle_event(SDL_Event* event);
|
||||||
|
|
||||||
#endif /* HAVE_SDL */
|
#endif /* HAVE_SDL */
|
||||||
|
|||||||
@@ -27,6 +27,7 @@
|
|||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
|
||||||
static bool done;
|
static bool done;
|
||||||
|
static int fullscreen_flags;
|
||||||
|
|
||||||
SDL_Window *sdl_window;
|
SDL_Window *sdl_window;
|
||||||
|
|
||||||
@@ -41,19 +42,34 @@ void sdl_init(int width, int height) {
|
|||||||
fprintf(stderr, "SDL: could not create window - exiting\n");
|
fprintf(stderr, "SDL: could not create window - exiting\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
SDL_ShowCursor(SDL_DISABLE);
|
SDL_SetRelativeMouseMode(SDL_TRUE);
|
||||||
//SDL_SetRelativeMouseMode(SDL_TRUE);
|
|
||||||
sdlinput_init();
|
sdlinput_init();
|
||||||
}
|
}
|
||||||
|
|
||||||
void sdl_loop() {
|
void sdl_loop() {
|
||||||
SDL_Event event;
|
SDL_Event event;
|
||||||
while(!done && SDL_WaitEvent(&event)) {
|
while(!done && SDL_WaitEvent(&event)) {
|
||||||
if (!sdlinput_handle_event(&event))
|
switch (sdlinput_handle_event(&event)) {
|
||||||
done = true;
|
case SDL_QUIT_APPLICATION:
|
||||||
else if (event.type == SDL_QUIT)
|
|
||||||
done = true;
|
done = true;
|
||||||
|
break;
|
||||||
|
case SDL_TOGGLE_FULLSCREEN:
|
||||||
|
fullscreen_flags ^= SDL_WINDOW_FULLSCREEN;
|
||||||
|
SDL_SetWindowFullscreen(sdl_window, fullscreen_flags);
|
||||||
|
case SDL_MOUSE_GRAB:
|
||||||
|
SDL_SetRelativeMouseMode(SDL_TRUE);
|
||||||
|
break;
|
||||||
|
case SDL_MOUSE_UNGRAB:
|
||||||
|
SDL_SetRelativeMouseMode(SDL_FALSE);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
if (event.type == SDL_QUIT)
|
||||||
|
done = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SDL_DestroyWindow(sdl_window);
|
||||||
|
SDL_Quit();
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* HAVE_SDL */
|
#endif /* HAVE_SDL */
|
||||||
|
|||||||
@@ -21,6 +21,12 @@
|
|||||||
|
|
||||||
#include <SDL.h>
|
#include <SDL.h>
|
||||||
|
|
||||||
|
#define SDL_NOTHING 0
|
||||||
|
#define SDL_QUIT_APPLICATION 1
|
||||||
|
#define SDL_MOUSE_GRAB 2
|
||||||
|
#define SDL_MOUSE_UNGRAB 3
|
||||||
|
#define SDL_TOGGLE_FULLSCREEN 4
|
||||||
|
|
||||||
SDL_Window *sdl_window;
|
SDL_Window *sdl_window;
|
||||||
|
|
||||||
void sdl_init(int width, int height);
|
void sdl_init(int width, int height);
|
||||||
|
|||||||
Reference in New Issue
Block a user