mirror of
https://github.com/moonlight-stream/moonlight-embedded.git
synced 2025-07-04 00:36:01 +00:00
Add absolute mouse mode support when ungrabbed
This commit is contained in:
parent
23e6854a84
commit
f871b663b1
@ -149,12 +149,18 @@ void sdlinput_init(char* mappings) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int sdlinput_handle_event(SDL_Event* event) {
|
int sdlinput_handle_event(SDL_Window* window, SDL_Event* event) {
|
||||||
int button = 0;
|
int button = 0;
|
||||||
PGAMEPAD_STATE gamepad;
|
PGAMEPAD_STATE gamepad;
|
||||||
switch (event->type) {
|
switch (event->type) {
|
||||||
case SDL_MOUSEMOTION:
|
case SDL_MOUSEMOTION:
|
||||||
|
if (SDL_GetRelativeMouseMode())
|
||||||
LiSendMouseMoveEvent(event->motion.xrel, event->motion.yrel);
|
LiSendMouseMoveEvent(event->motion.xrel, event->motion.yrel);
|
||||||
|
else {
|
||||||
|
int w, h;
|
||||||
|
SDL_GetWindowSize(window, &w, &h);
|
||||||
|
LiSendMousePositionEvent(event->motion.x, event->motion.y, w, h);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case SDL_MOUSEWHEEL:
|
case SDL_MOUSEWHEEL:
|
||||||
#if SDL_VERSION_ATLEAST(2, 0, 18)
|
#if SDL_VERSION_ATLEAST(2, 0, 18)
|
||||||
@ -186,7 +192,7 @@ int 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);
|
||||||
|
|
||||||
return SDL_MOUSE_GRAB;
|
return 0;
|
||||||
case SDL_KEYDOWN:
|
case SDL_KEYDOWN:
|
||||||
case SDL_KEYUP:
|
case SDL_KEYUP:
|
||||||
button = event->key.keysym.sym;
|
button = event->key.keysym.sym;
|
||||||
@ -232,15 +238,15 @@ int sdlinput_handle_event(SDL_Event* event) {
|
|||||||
keyboard_modifiers &= ~modifier;
|
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
|
// 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)
|
||||||
return SDL_QUIT_APPLICATION;
|
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)
|
||||||
return SDL_TOGGLE_FULLSCREEN;
|
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_KEY && event->type==SDL_KEYUP)
|
||||||
return SDL_MOUSE_UNGRAB;
|
return SDL_GetRelativeMouseMode() ? SDL_MOUSE_UNGRAB : SDL_MOUSE_GRAB;
|
||||||
|
|
||||||
LiSendKeyboardEvent(0x80 << 8 | button, event->type==SDL_KEYDOWN?KEY_ACTION_DOWN:KEY_ACTION_UP, keyboard_modifiers);
|
|
||||||
break;
|
break;
|
||||||
case SDL_CONTROLLERAXISMOTION:
|
case SDL_CONTROLLERAXISMOTION:
|
||||||
gamepad = get_gamepad(event->caxis.which, false);
|
gamepad = get_gamepad(event->caxis.which, false);
|
||||||
|
@ -100,5 +100,5 @@ static const short keyCodes5[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
void sdlinput_init(char* mappings);
|
void sdlinput_init(char* mappings);
|
||||||
int sdlinput_handle_event(SDL_Event* event);
|
int sdlinput_handle_event(SDL_Window* window, SDL_Event* event);
|
||||||
void sdlinput_rumble(unsigned short controller_id, unsigned short low_freq_motor, unsigned short high_freq_motor);
|
void sdlinput_rumble(unsigned short controller_id, unsigned short low_freq_motor, unsigned short high_freq_motor);
|
||||||
|
@ -75,7 +75,7 @@ void sdl_loop() {
|
|||||||
SDL_SetRelativeMouseMode(SDL_TRUE);
|
SDL_SetRelativeMouseMode(SDL_TRUE);
|
||||||
|
|
||||||
while(!done && SDL_WaitEvent(&event)) {
|
while(!done && SDL_WaitEvent(&event)) {
|
||||||
switch (sdlinput_handle_event(&event)) {
|
switch (sdlinput_handle_event(window, &event)) {
|
||||||
case SDL_QUIT_APPLICATION:
|
case SDL_QUIT_APPLICATION:
|
||||||
done = true;
|
done = true;
|
||||||
break;
|
break;
|
||||||
@ -83,10 +83,12 @@ void sdl_loop() {
|
|||||||
fullscreen_flags ^= SDL_WINDOW_FULLSCREEN;
|
fullscreen_flags ^= SDL_WINDOW_FULLSCREEN;
|
||||||
SDL_SetWindowFullscreen(window, fullscreen_flags);
|
SDL_SetWindowFullscreen(window, fullscreen_flags);
|
||||||
case SDL_MOUSE_GRAB:
|
case SDL_MOUSE_GRAB:
|
||||||
|
SDL_ShowCursor(SDL_ENABLE);
|
||||||
SDL_SetRelativeMouseMode(SDL_TRUE);
|
SDL_SetRelativeMouseMode(SDL_TRUE);
|
||||||
break;
|
break;
|
||||||
case SDL_MOUSE_UNGRAB:
|
case SDL_MOUSE_UNGRAB:
|
||||||
SDL_SetRelativeMouseMode(SDL_FALSE);
|
SDL_SetRelativeMouseMode(SDL_FALSE);
|
||||||
|
SDL_ShowCursor(SDL_DISABLE);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
if (event.type == SDL_QUIT)
|
if (event.type == SDL_QUIT)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user