mirror of
https://github.com/raysan5/raylib.git
synced 2026-02-03 04:39:18 -05:00
Fix relative mouse mode for DRM (#3492)
This commit is contained in:
@ -121,6 +121,7 @@ typedef struct {
|
|||||||
Vector2 eventWheelMove; // Registers the event mouse wheel variation
|
Vector2 eventWheelMove; // Registers the event mouse wheel variation
|
||||||
// NOTE: currentButtonState[] can't be written directly due to multithreading, app could miss the update
|
// NOTE: currentButtonState[] can't be written directly due to multithreading, app could miss the update
|
||||||
char currentButtonStateEvdev[MAX_MOUSE_BUTTONS]; // Holds the new mouse state for the next polling event to grab
|
char currentButtonStateEvdev[MAX_MOUSE_BUTTONS]; // Holds the new mouse state for the next polling event to grab
|
||||||
|
bool cursorRelative; // Relative cursor mode
|
||||||
|
|
||||||
// Gamepad data
|
// Gamepad data
|
||||||
pthread_t gamepadThreadId; // Gamepad reading thread id
|
pthread_t gamepadThreadId; // Gamepad reading thread id
|
||||||
@ -400,6 +401,7 @@ void EnableCursor(void)
|
|||||||
// Set cursor position in the middle
|
// Set cursor position in the middle
|
||||||
SetMousePosition(CORE.Window.screen.width/2, CORE.Window.screen.height/2);
|
SetMousePosition(CORE.Window.screen.width/2, CORE.Window.screen.height/2);
|
||||||
|
|
||||||
|
platform.cursorRelative = false;
|
||||||
CORE.Input.Mouse.cursorHidden = false;
|
CORE.Input.Mouse.cursorHidden = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -409,6 +411,7 @@ void DisableCursor(void)
|
|||||||
// Set cursor position in the middle
|
// Set cursor position in the middle
|
||||||
SetMousePosition(CORE.Window.screen.width/2, CORE.Window.screen.height/2);
|
SetMousePosition(CORE.Window.screen.width/2, CORE.Window.screen.height/2);
|
||||||
|
|
||||||
|
platform.cursorRelative = true;
|
||||||
CORE.Input.Mouse.cursorHidden = true;
|
CORE.Input.Mouse.cursorHidden = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -522,6 +525,13 @@ void PollInputEvents(void)
|
|||||||
|
|
||||||
PollKeyboardEvents();
|
PollKeyboardEvents();
|
||||||
|
|
||||||
|
// Register previous mouse position
|
||||||
|
if (platform.cursorRelative)
|
||||||
|
{
|
||||||
|
CORE.Input.Mouse.previousPosition = CORE.Input.Mouse.currentPosition;
|
||||||
|
CORE.Input.Mouse.currentPosition = (Vector2){ 0.0f, 0.0f };
|
||||||
|
}
|
||||||
|
|
||||||
// Register previous mouse states
|
// Register previous mouse states
|
||||||
CORE.Input.Mouse.previousWheelMove = CORE.Input.Mouse.currentWheelMove;
|
CORE.Input.Mouse.previousWheelMove = CORE.Input.Mouse.currentWheelMove;
|
||||||
CORE.Input.Mouse.currentWheelMove = platform.eventWheelMove;
|
CORE.Input.Mouse.currentWheelMove = platform.eventWheelMove;
|
||||||
@ -1535,8 +1545,16 @@ static void *EventThread(void *arg)
|
|||||||
{
|
{
|
||||||
if (event.code == REL_X)
|
if (event.code == REL_X)
|
||||||
{
|
{
|
||||||
CORE.Input.Mouse.currentPosition.x += event.value;
|
if (platform.cursorRelative)
|
||||||
CORE.Input.Touch.position[0].x = CORE.Input.Mouse.currentPosition.x;
|
{
|
||||||
|
CORE.Input.Mouse.currentPosition.x -= event.value;
|
||||||
|
CORE.Input.Touch.position[0].x = CORE.Input.Mouse.currentPosition.x;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
CORE.Input.Mouse.currentPosition.x += event.value;
|
||||||
|
CORE.Input.Touch.position[0].x = CORE.Input.Mouse.currentPosition.x;
|
||||||
|
}
|
||||||
|
|
||||||
touchAction = 2; // TOUCH_ACTION_MOVE
|
touchAction = 2; // TOUCH_ACTION_MOVE
|
||||||
gestureUpdate = true;
|
gestureUpdate = true;
|
||||||
@ -1544,8 +1562,16 @@ static void *EventThread(void *arg)
|
|||||||
|
|
||||||
if (event.code == REL_Y)
|
if (event.code == REL_Y)
|
||||||
{
|
{
|
||||||
CORE.Input.Mouse.currentPosition.y += event.value;
|
if (platform.cursorRelative)
|
||||||
CORE.Input.Touch.position[0].y = CORE.Input.Mouse.currentPosition.y;
|
{
|
||||||
|
CORE.Input.Mouse.currentPosition.y -= event.value;
|
||||||
|
CORE.Input.Touch.position[0].y = CORE.Input.Mouse.currentPosition.y;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
CORE.Input.Mouse.currentPosition.y += event.value;
|
||||||
|
CORE.Input.Touch.position[0].y = CORE.Input.Mouse.currentPosition.y;
|
||||||
|
}
|
||||||
|
|
||||||
touchAction = 2; // TOUCH_ACTION_MOVE
|
touchAction = 2; // TOUCH_ACTION_MOVE
|
||||||
gestureUpdate = true;
|
gestureUpdate = true;
|
||||||
|
|||||||
Reference in New Issue
Block a user