|
|
@ -460,8 +460,8 @@ typedef struct CoreData { |
|
|
|
|
|
|
|
char currentButtonState[MAX_MOUSE_BUTTONS]; // Registers current mouse button state |
|
|
|
char previousButtonState[MAX_MOUSE_BUTTONS]; // Registers previous mouse button state |
|
|
|
kt">float currentWheelMove; // Registers current mouse wheel variation |
|
|
|
kt">float previousWheelMove; // Registers previous mouse wheel variation |
|
|
|
n">Vector2 currentWheelMove; // Registers current mouse wheel variation |
|
|
|
n">Vector2 previousWheelMove; // Registers previous mouse wheel variation |
|
|
|
#if defined(PLATFORM_RPI) || defined(PLATFORM_DRM) |
|
|
|
// 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 |
|
|
@ -532,7 +532,7 @@ typedef enum AutomationEventType { |
|
|
|
INPUT_MOUSE_BUTTON_UP, // param[0]: button |
|
|
|
INPUT_MOUSE_BUTTON_DOWN, // param[0]: button |
|
|
|
INPUT_MOUSE_POSITION, // param[0]: x, param[1]: y |
|
|
|
INPUT_MOUSE_WHEEL_MOTION, // param[0]: delta |
|
|
|
INPUT_MOUSE_WHEEL_MOTION, // param[0]: x delta, param[1]: y delta |
|
|
|
INPUT_GAMEPAD_CONNECT, // param[0]: gamepad |
|
|
|
INPUT_GAMEPAD_DISCONNECT, // param[0]: gamepad |
|
|
|
INPUT_GAMEPAD_BUTTON_UP, // param[0]: button |
|
|
@ -3890,8 +3890,28 @@ float GetMouseWheelMove(void) |
|
|
|
#if defined(PLATFORM_ANDROID) |
|
|
|
return 0.0f; |
|
|
|
#endif |
|
|
|
Vector2 wm = CORE.Input.Mouse.currentWheelMove; |
|
|
|
float result; |
|
|
|
if (fabs(wm.x) > fabs(wm.y)) result = (float)wm.x; |
|
|
|
else result = (float)wm.y; |
|
|
|
|
|
|
|
#if defined(PLATFORM_WEB) |
|
|
|
return CORE.Input.Mouse.currentWheelMove/100.0f; |
|
|
|
return result/100.0f; |
|
|
|
#endif |
|
|
|
|
|
|
|
return result; |
|
|
|
} |
|
|
|
|
|
|
|
// Get mouse wheel movement X/Y as a vector |
|
|
|
Vector2 GetMouseWheelMoveV(void) |
|
|
|
{ |
|
|
|
#if defined(PLATFORM_ANDROID) |
|
|
|
return (Vector2){ 0.0f, 0.0f }; |
|
|
|
#endif |
|
|
|
#if defined(PLATFORM_WEB) |
|
|
|
Vector2 result = CORE.Input.Mouse.currentWheelMove; |
|
|
|
result.x /= 100.0f; |
|
|
|
result.y /= 100.0f; |
|
|
|
#endif |
|
|
|
|
|
|
|
return CORE.Input.Mouse.currentWheelMove; |
|
|
@ -4991,7 +5011,7 @@ void PollInputEvents(void) |
|
|
|
|
|
|
|
// Register previous mouse states |
|
|
|
CORE.Input.Mouse.previousWheelMove = CORE.Input.Mouse.currentWheelMove; |
|
|
|
CORE.Input.Mouse.currentWheelMove = 0.0f; |
|
|
|
CORE.Input.Mouse.currentWheelMove = p">(Vector2){ 0.0f, 0.0f }; |
|
|
|
for (int i = 0; i < MAX_MOUSE_BUTTONS; i++) |
|
|
|
{ |
|
|
|
CORE.Input.Mouse.previousButtonState[i] = CORE.Input.Mouse.currentButtonState[i]; |
|
|
@ -5020,7 +5040,7 @@ void PollInputEvents(void) |
|
|
|
|
|
|
|
// Register previous mouse wheel state |
|
|
|
CORE.Input.Mouse.previousWheelMove = CORE.Input.Mouse.currentWheelMove; |
|
|
|
CORE.Input.Mouse.currentWheelMove = 0.0f; |
|
|
|
CORE.Input.Mouse.currentWheelMove = p">(Vector2){ 0.0f, 0.0f }; |
|
|
|
|
|
|
|
// Register previous mouse position |
|
|
|
CORE.Input.Mouse.previousPosition = CORE.Input.Mouse.currentPosition; |
|
|
@ -5553,8 +5573,7 @@ static void MouseCursorPosCallback(GLFWwindow *window, double x, double y) |
|
|
|
// GLFW3 Scrolling Callback, runs on mouse wheel |
|
|
|
static void MouseScrollCallback(GLFWwindow *window, double xoffset, double yoffset) |
|
|
|
{ |
|
|
|
if (fabs(xoffset) > fabs(yoffset)) CORE.Input.Mouse.currentWheelMove = (float)xoffset; |
|
|
|
else CORE.Input.Mouse.currentWheelMove = (float)yoffset; |
|
|
|
CORE.Input.Mouse.currentWheelMove = (Vector2){ (float)xoffset, (float)yoffset }; |
|
|
|
} |
|
|
|
|
|
|
|
// GLFW3 CursorEnter Callback, when cursor enters the window |
|
|
@ -6462,7 +6481,7 @@ static void *EventThread(void *arg) |
|
|
|
gestureUpdate = true; |
|
|
|
} |
|
|
|
|
|
|
|
if (event.code == REL_WHEEL) CORE.Input.Mouse.currentWheelMove += event.value; |
|
|
|
if (event.code == REL_WHEEL) CORE.Input.Mouse.currentWheelMove.y += event.value; |
|
|
|
} |
|
|
|
|
|
|
|
// Absolute movement parsing |
|
|
@ -6949,12 +6968,13 @@ static void RecordAutomationEvent(unsigned int frame) |
|
|
|
} |
|
|
|
|
|
|
|
// INPUT_MOUSE_WHEEL_MOTION |
|
|
|
if ((int)CORE.Input.Mouse.currentWheelMove != (int)CORE.Input.Mouse.previousWheelMove) |
|
|
|
if (((int)CORE.Input.Mouse.currentWheelMove.x != (int)CORE.Input.Mouse.previousWheelMove.x) || |
|
|
|
((int)CORE.Input.Mouse.currentWheelMove.y != (int)CORE.Input.Mouse.previousWheelMove.y)) |
|
|
|
{ |
|
|
|
events[eventCount].frame = frame; |
|
|
|
events[eventCount].type = INPUT_MOUSE_WHEEL_MOTION; |
|
|
|
events[eventCount].params[0] = (int)CORE.Input.Mouse.currentWheelMove; |
|
|
|
events[eventCount].params[1] = mi">0; |
|
|
|
events[eventCount].params[0] = (int)CORE.Input.Mouse.currentWheelMove.x; |
|
|
|
events[eventCount].params[1] = p">(int)CORE.Input.Mouse.currentWheelMove.y;; |
|
|
|
events[eventCount].params[2] = 0; |
|
|
|
|
|
|
|
TRACELOG(LOG_INFO, "[%i] INPUT_MOUSE_WHEEL_MOTION: %i, %i, %i", events[eventCount].frame, events[eventCount].params[0], events[eventCount].params[1], events[eventCount].params[2]); |
|
|
@ -7106,7 +7126,11 @@ static void PlayAutomationEvent(unsigned int frame) |
|
|
|
CORE.Input.Mouse.currentPosition.x = (float)events[i].params[0]; |
|
|
|
CORE.Input.Mouse.currentPosition.y = (float)events[i].params[1]; |
|
|
|
} break; |
|
|
|
case INPUT_MOUSE_WHEEL_MOTION: CORE.Input.Mouse.currentWheelMove = (float)events[i].params[0]; break; // param[0]: delta |
|
|
|
case INPUT_MOUSE_WHEEL_MOTION: // param[0]: x delta, param[1]: y delta |
|
|
|
{ |
|
|
|
CORE.Input.Mouse.currentWheelMove.x = (float)events[i].params[0]; break; |
|
|
|
CORE.Input.Mouse.currentWheelMove.y = (float)events[i].params[1]; break; |
|
|
|
} break; |
|
|
|
case INPUT_TOUCH_UP: CORE.Input.Touch.currentTouchState[events[i].params[0]] = false; break; // param[0]: id |
|
|
|
case INPUT_TOUCH_DOWN: CORE.Input.Touch.currentTouchState[events[i].params[0]] = true; break; // param[0]: id |
|
|
|
case INPUT_TOUCH_POSITION: // param[0]: id, param[1]: x, param[2]: y |
|
|
|