|
|
@ -430,9 +430,10 @@ typedef struct CoreData { |
|
|
|
#endif |
|
|
|
} Keyboard; |
|
|
|
struct { |
|
|
|
Vector2 position; // Mouse position on screen |
|
|
|
Vector2 offset; // Mouse offset |
|
|
|
Vector2 scale; // Mouse scaling |
|
|
|
Vector2 currentPosition; // Mouse position on screen |
|
|
|
Vector2 previousPosition; // Previous mouse position |
|
|
|
|
|
|
|
int cursor; // Tracks current mouse cursor |
|
|
|
bool cursorHidden; // Track if cursor is hidden |
|
|
@ -796,8 +797,8 @@ void InitWindow(int width, int height, const char *title) |
|
|
|
emscripten_set_gamepaddisconnected_callback(NULL, 1, EmscriptenGamepadCallback); |
|
|
|
#endif |
|
|
|
|
|
|
|
CORE.Input.Mouse.position.x = (float)CORE.Window.screen.width/2.0f; |
|
|
|
CORE.Input.Mouse.position.y = (float)CORE.Window.screen.height/2.0f; |
|
|
|
CORE.Input.Mouse.currentPosition.x = (float)CORE.Window.screen.width/2.0f; |
|
|
|
CORE.Input.Mouse.currentPosition.y = (float)CORE.Window.screen.height/2.0f; |
|
|
|
#endif // PLATFORM_ANDROID |
|
|
|
} |
|
|
|
|
|
|
@ -1849,7 +1850,7 @@ void EndDrawing(void) |
|
|
|
// we draw a small rectangle for user reference |
|
|
|
if (!CORE.Input.Mouse.cursorHidden) |
|
|
|
{ |
|
|
|
DrawRectangle(CORE.Input.Mouse.position.x, CORE.Input.Mouse.position.y, 3, 3, MAROON); |
|
|
|
DrawRectangle(CORE.Input.Mouse.currentPosition.x, CORE.Input.Mouse.currentPosition.y, 3, 3, MAROON); |
|
|
|
} |
|
|
|
#endif |
|
|
|
|
|
|
@ -3363,7 +3364,7 @@ int GetMouseX(void) |
|
|
|
#if defined(PLATFORM_ANDROID) |
|
|
|
return (int)CORE.Input.Touch.position[0].x; |
|
|
|
#else |
|
|
|
return (int)((CORE.Input.Mouse.position.x + CORE.Input.Mouse.offset.x)*CORE.Input.Mouse.scale.x); |
|
|
|
return (int)((CORE.Input.Mouse.currentPosition.x + CORE.Input.Mouse.offset.x)*CORE.Input.Mouse.scale.x); |
|
|
|
#endif |
|
|
|
} |
|
|
|
|
|
|
@ -3373,7 +3374,7 @@ int GetMouseY(void) |
|
|
|
#if defined(PLATFORM_ANDROID) |
|
|
|
return (int)CORE.Input.Touch.position[0].y; |
|
|
|
#else |
|
|
|
return (int)((CORE.Input.Mouse.position.y + CORE.Input.Mouse.offset.y)*CORE.Input.Mouse.scale.y); |
|
|
|
return (int)((CORE.Input.Mouse.currentPosition.y + CORE.Input.Mouse.offset.y)*CORE.Input.Mouse.scale.y); |
|
|
|
#endif |
|
|
|
} |
|
|
|
|
|
|
@ -3385,8 +3386,8 @@ Vector2 GetMousePosition(void) |
|
|
|
#if defined(PLATFORM_ANDROID) || defined(PLATFORM_WEB) |
|
|
|
position = GetTouchPosition(0); |
|
|
|
#else |
|
|
|
position.x = (CORE.Input.Mouse.position.x + CORE.Input.Mouse.offset.x)*CORE.Input.Mouse.scale.x; |
|
|
|
position.y = (CORE.Input.Mouse.position.y + CORE.Input.Mouse.offset.y)*CORE.Input.Mouse.scale.y; |
|
|
|
position.x = (CORE.Input.Mouse.currentPosition.x + CORE.Input.Mouse.offset.x)*CORE.Input.Mouse.scale.x; |
|
|
|
position.y = (CORE.Input.Mouse.currentPosition.y + CORE.Input.Mouse.offset.y)*CORE.Input.Mouse.scale.y; |
|
|
|
#endif |
|
|
|
|
|
|
|
return position; |
|
|
@ -3395,10 +3396,10 @@ Vector2 GetMousePosition(void) |
|
|
|
// Set mouse position XY |
|
|
|
void SetMousePosition(int x, int y) |
|
|
|
{ |
|
|
|
CORE.Input.Mouse.position = (Vector2){ (float)x, (float)y }; |
|
|
|
CORE.Input.Mouse.currentPosition = (Vector2){ (float)x, (float)y }; |
|
|
|
#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_WEB) |
|
|
|
// NOTE: emscripten not implemented |
|
|
|
glfwSetCursorPos(CORE.Window.handle, CORE.Input.Mouse.position.x, CORE.Input.Mouse.position.y); |
|
|
|
glfwSetCursorPos(CORE.Window.handle, CORE.Input.Mouse.currentPosition.x, CORE.Input.Mouse.currentPosition.y); |
|
|
|
#endif |
|
|
|
#if defined(PLATFORM_UWP) |
|
|
|
UWPGetMouseSetPosFunc()(x, y); |
|
|
@ -4665,6 +4666,9 @@ static void PollInputEvents(void) |
|
|
|
// Register previous mouse wheel state |
|
|
|
CORE.Input.Mouse.previousWheelMove = CORE.Input.Mouse.currentWheelMove; |
|
|
|
CORE.Input.Mouse.currentWheelMove = 0.0f; |
|
|
|
|
|
|
|
// Register previous mouse position |
|
|
|
CORE.Input.Mouse.previousPosition = CORE.Input.Mouse.currentPosition; |
|
|
|
#endif |
|
|
|
|
|
|
|
// Register previous touch states |
|
|
@ -5109,9 +5113,9 @@ static void MouseButtonCallback(GLFWwindow *window, int button, int action, int |
|
|
|
// GLFW3 Cursor Position Callback, runs on mouse move |
|
|
|
static void MouseCursorPosCallback(GLFWwindow *window, double x, double y) |
|
|
|
{ |
|
|
|
CORE.Input.Mouse.position.x = (float)x; |
|
|
|
CORE.Input.Mouse.position.y = (float)y; |
|
|
|
CORE.Input.Touch.position[0] = CORE.Input.Mouse.position; |
|
|
|
CORE.Input.Mouse.currentPosition.x = (float)x; |
|
|
|
CORE.Input.Mouse.currentPosition.y = (float)y; |
|
|
|
CORE.Input.Touch.position[0] = CORE.Input.Mouse.currentPosition; |
|
|
|
|
|
|
|
#if defined(SUPPORT_GESTURES_SYSTEM) && defined(SUPPORT_MOUSE_GESTURES) |
|
|
|
// Process mouse events as touches to be able to use mouse-gestures |
|
|
@ -5999,8 +6003,8 @@ static void *EventThread(void *arg) |
|
|
|
{ |
|
|
|
if (event.code == REL_X) |
|
|
|
{ |
|
|
|
CORE.Input.Mouse.position.x += event.value; |
|
|
|
CORE.Input.Touch.position[0].x = CORE.Input.Mouse.position.x; |
|
|
|
CORE.Input.Mouse.currentPosition.x += event.value; |
|
|
|
CORE.Input.Touch.position[0].x = CORE.Input.Mouse.currentPosition.x; |
|
|
|
|
|
|
|
#if defined(SUPPORT_GESTURES_SYSTEM) |
|
|
|
touchAction = TOUCH_MOVE; |
|
|
@ -6010,8 +6014,8 @@ static void *EventThread(void *arg) |
|
|
|
|
|
|
|
if (event.code == REL_Y) |
|
|
|
{ |
|
|
|
CORE.Input.Mouse.position.y += event.value; |
|
|
|
CORE.Input.Touch.position[0].y = CORE.Input.Mouse.position.y; |
|
|
|
CORE.Input.Mouse.currentPosition.y += event.value; |
|
|
|
CORE.Input.Touch.position[0].y = CORE.Input.Mouse.currentPosition.y; |
|
|
|
|
|
|
|
#if defined(SUPPORT_GESTURES_SYSTEM) |
|
|
|
touchAction = TOUCH_MOVE; |
|
|
@ -6028,7 +6032,7 @@ static void *EventThread(void *arg) |
|
|
|
// Basic movement |
|
|
|
if (event.code == ABS_X) |
|
|
|
{ |
|
|
|
CORE.Input.Mouse.position.x = (event.value - worker->absRange.x)*CORE.Window.screen.width/worker->absRange.width; // Scale acording to absRange |
|
|
|
CORE.Input.Mouse.currentPosition.x = (event.value - worker->absRange.x)*CORE.Window.screen.width/worker->absRange.width; // Scale acording to absRange |
|
|
|
CORE.Input.Touch.position[0].x = (event.value - worker->absRange.x)*CORE.Window.screen.width/worker->absRange.width; // Scale acording to absRange |
|
|
|
|
|
|
|
#if defined(SUPPORT_GESTURES_SYSTEM) |
|
|
@ -6039,7 +6043,7 @@ static void *EventThread(void *arg) |
|
|
|
|
|
|
|
if (event.code == ABS_Y) |
|
|
|
{ |
|
|
|
CORE.Input.Mouse.position.y = (event.value - worker->absRange.y)*CORE.Window.screen.height/worker->absRange.height; // Scale acording to absRange |
|
|
|
CORE.Input.Mouse.currentPosition.y = (event.value - worker->absRange.y)*CORE.Window.screen.height/worker->absRange.height; // Scale acording to absRange |
|
|
|
CORE.Input.Touch.position[0].y = (event.value - worker->absRange.y)*CORE.Window.screen.height/worker->absRange.height; // Scale acording to absRange |
|
|
|
|
|
|
|
#if defined(SUPPORT_GESTURES_SYSTEM) |
|
|
@ -6125,11 +6129,11 @@ static void *EventThread(void *arg) |
|
|
|
// Screen confinement |
|
|
|
if (!CORE.Input.Mouse.cursorHidden) |
|
|
|
{ |
|
|
|
if (CORE.Input.Mouse.position.x < 0) CORE.Input.Mouse.position.x = 0; |
|
|
|
if (CORE.Input.Mouse.position.x > CORE.Window.screen.width/CORE.Input.Mouse.scale.x) CORE.Input.Mouse.position.x = CORE.Window.screen.width/CORE.Input.Mouse.scale.x; |
|
|
|
if (CORE.Input.Mouse.currentPosition.x < 0) CORE.Input.Mouse.currentPosition.x = 0; |
|
|
|
if (CORE.Input.Mouse.currentPosition.x > CORE.Window.screen.width/CORE.Input.Mouse.scale.x) CORE.Input.Mouse.currentPosition.x = CORE.Window.screen.width/CORE.Input.Mouse.scale.x; |
|
|
|
|
|
|
|
if (CORE.Input.Mouse.position.y < 0) CORE.Input.Mouse.position.y = 0; |
|
|
|
if (CORE.Input.Mouse.position.y > CORE.Window.screen.height/CORE.Input.Mouse.scale.y) CORE.Input.Mouse.position.y = CORE.Window.screen.height/CORE.Input.Mouse.scale.y; |
|
|
|
if (CORE.Input.Mouse.currentPosition.y < 0) CORE.Input.Mouse.currentPosition.y = 0; |
|
|
|
if (CORE.Input.Mouse.currentPosition.y > CORE.Window.screen.height/CORE.Input.Mouse.scale.y) CORE.Input.Mouse.currentPosition.y = CORE.Window.screen.height/CORE.Input.Mouse.scale.y; |
|
|
|
} |
|
|
|
|
|
|
|
// Gesture update |
|
|
@ -6408,9 +6412,9 @@ void UWPMouseButtonEvent(int button, bool down) |
|
|
|
|
|
|
|
void UWPMousePosEvent(double x, double y) |
|
|
|
{ |
|
|
|
CORE.Input.Mouse.position.x = (float)x; |
|
|
|
CORE.Input.Mouse.position.y = (float)y; |
|
|
|
CORE.Input.Touch.position[0] = CORE.Input.Mouse.position; |
|
|
|
CORE.Input.Mouse.currentPosition.x = (float)x; |
|
|
|
CORE.Input.Mouse.currentPosition.y = (float)y; |
|
|
|
CORE.Input.Touch.position[0] = CORE.Input.Mouse.currentPosition; |
|
|
|
|
|
|
|
#if defined(SUPPORT_GESTURES_SYSTEM) && defined(SUPPORT_MOUSE_GESTURES) |
|
|
|
// Process mouse events as touches to be able to use mouse-gestures |
|
|
@ -6425,7 +6429,7 @@ void UWPMousePosEvent(double x, double y) |
|
|
|
gestureEvent.pointCount = 1; |
|
|
|
|
|
|
|
// Register touch points position, only one point registered |
|
|
|
gestureEvent.position[0] = CORE.Input.Mouse.position; |
|
|
|
gestureEvent.position[0] = CORE.Input.Mouse.currentPosition; |
|
|
|
|
|
|
|
// Normalize gestureEvent.position[0] for CORE.Window.screen.width and CORE.Window.screen.height |
|
|
|
gestureEvent.position[0].x /= (float)GetScreenWidth(); |
|
|
|