summaryrefslogtreecommitdiffhomepage
path: root/src/core.c
diff options
context:
space:
mode:
authorjpe230 <[email protected]>2021-02-14 10:36:24 -0600
committerGitHub <[email protected]>2021-02-14 17:36:24 +0100
commitc7476f0aa508b4d04428e340ef1ffddca5b90b9a (patch)
tree2e67705e7da56219ed97c6c7d289af029a7bcc57 /src/core.c
parentf3df64210b284a15ff9a2c2394833fd611f2be50 (diff)
downloadraylib-c7476f0aa508b4d04428e340ef1ffddca5b90b9a.tar.gz
raylib-c7476f0aa508b4d04428e340ef1ffddca5b90b9a.zip
Fix support of touchscreens for RPI (#1586)
-Checks for absolute pressure in absolute events to simulate a touch or a left mouse click. -Updates touch position on absolute events.
Diffstat (limited to 'src/core.c')
-rw-r--r--src/core.c37
1 files changed, 33 insertions, 4 deletions
diff --git a/src/core.c b/src/core.c
index 3c179bd6..60620085 100644
--- a/src/core.c
+++ b/src/core.c
@@ -5753,8 +5753,9 @@ 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.position.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)
touchAction = TOUCH_MOVE;
gestureUpdate = true;
@@ -5763,7 +5764,8 @@ 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.position.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)
touchAction = TOUCH_MOVE;
@@ -5772,7 +5774,7 @@ static void *EventThread(void *arg)
}
// Multitouch movement
- if (event.code == ABS_MT_SLOT) worker->touchSlot = event.value; // Remeber the slot number for the folowing events
+ if (event.code == ABS_MT_SLOT) worker->touchSlot = event.value; // Remember the slot number for the folowing events
if (event.code == ABS_MT_POSITION_X)
{
@@ -5793,6 +5795,33 @@ static void *EventThread(void *arg)
CORE.Input.Touch.position[worker->touchSlot].y = -1;
}
}
+
+ // Touchscreen tap
+ if(event.code == ABS_PRESSURE)
+ {
+ int previousMouseLeftButtonState = CORE.Input.Mouse.currentButtonStateEvdev[MOUSE_LEFT_BUTTON];
+
+ if(!event.value && previousMouseLeftButtonState)
+ {
+ CORE.Input.Mouse.currentButtonStateEvdev[MOUSE_LEFT_BUTTON] = 0;
+
+ #if defined(SUPPORT_GESTURES_SYSTEM)
+ touchAction = TOUCH_UP;
+ gestureUpdate = true;
+ #endif
+ }
+
+ if(event.value && !previousMouseLeftButtonState)
+ {
+ CORE.Input.Mouse.currentButtonStateEvdev[MOUSE_LEFT_BUTTON] = 1;
+
+ #if defined(SUPPORT_GESTURES_SYSTEM)
+ touchAction = TOUCH_DOWN;
+ gestureUpdate = true;
+ #endif
+ }
+ }
+
}
// Button parsing