SDL: tests: Add a raw event mode to testrelative

From 4bfc8f84f7b867180590dd858e7feda38cda712f Mon Sep 17 00:00:00 2001
From: Frank Praznik <[EMAIL REDACTED]>
Date: Thu, 19 Dec 2024 13:35:20 -0500
Subject: [PATCH] tests: Add a raw event mode to testrelative

Add a code path to test raw motion events (activated by '--raw').
---
 test/testrelative.c | 24 ++++++++++++++++++++----
 1 file changed, 20 insertions(+), 4 deletions(-)

diff --git a/test/testrelative.c b/test/testrelative.c
index a0e4b7b828da8..d2d4ea234495d 100644
--- a/test/testrelative.c
+++ b/test/testrelative.c
@@ -25,6 +25,7 @@ static int i, done;
 static SDL_FRect rect;
 static SDL_Event event;
 static bool warp;
+static bool raw;
 
 static void DrawRects(SDL_Renderer *renderer)
 {
@@ -88,13 +89,20 @@ static void loop(void)
             break;
         case SDL_EVENT_MOUSE_MOTION:
         {
-            rect.x += event.motion.xrel;
-            rect.y += event.motion.yrel;
+            if (!raw) {
+                rect.x += event.motion.xrel;
+                rect.y += event.motion.yrel;
 
-            if (warp) {
-                CenterMouse();
+                if (warp) {
+                    CenterMouse();
+                }
             }
         } break;
+        case SDL_EVENT_MOUSE_RAW_MOTION:
+        {
+            rect.x += event.maxis.dx / event.maxis.ux;
+            rect.y += event.maxis.dy / event.maxis.uy;
+        } break;
         default:
             break;
         }
@@ -154,12 +162,16 @@ int main(int argc, char *argv[])
             if (SDL_strcasecmp(argv[i], "--warp") == 0) {
                 warp = true;
                 consumed = 1;
+            } else if (SDL_strcasecmp(argv[i], "--raw") == 0) {
+                raw = true;
+                consumed = 1;
             }
         }
 
         if (consumed < 0) {
             static const char *options[] = {
                 "[--warp]",
+                "[--raw]",
                 NULL
             };
             SDLTest_CommonLogUsage(state, argv[0], options);
@@ -195,6 +207,10 @@ int main(int argc, char *argv[])
         }
     }
 
+    if (raw) {
+        SDL_SetEventEnabled(SDL_EVENT_MOUSE_RAW_MOTION, true);
+    }
+
     rect.x = DEFAULT_WINDOW_WIDTH / 2;
     rect.y = DEFAULT_WINDOW_HEIGHT / 2;
     rect.w = 10;