فهرست منبع

Send absolute mouse motion when in normal mouse mode and relative mouse motion when in relative mode on iOS

This keeps the SDL cursor in sync with the visible cursor when in normal mouse mode.
Sam Lantinga 4 سال پیش
والد
کامیت
27ce914463
2فایلهای تغییر یافته به همراه4 افزوده شده و 2 حذف شده
  1. 3 1
      src/video/uikit/SDL_uikitevents.m
  2. 1 1
      src/video/uikit/SDL_uikitview.m

+ 3 - 1
src/video/uikit/SDL_uikitevents.m

@@ -234,7 +234,9 @@ static void OnGCMouseConnected(GCMouse *mouse) API_AVAILABLE(macos(11.0), ios(14
 
     mouse.mouseInput.mouseMovedHandler = ^(GCMouseInput *mouse, float deltaX, float deltaY)
     {
-        SDL_SendMouseMotion(SDL_GetMouseFocus(), mouseID, SDL_TRUE, (int)deltaX, -(int)deltaY);
+        if (SDL_GCMouseRelativeMode()) {
+            SDL_SendMouseMotion(SDL_GetMouseFocus(), mouseID, 1, (int)deltaX, -(int)deltaY);
+        }
     };
 
     dispatch_queue_t queue = dispatch_queue_create( "org.libsdl.input.mouse", DISPATCH_QUEUE_SERIAL );

+ 1 - 1
src/video/uikit/SDL_uikitview.m

@@ -160,7 +160,7 @@ extern int SDL_AppleTVRemoteOpenedAsJoystick;
 
 #if !TARGET_OS_TV && defined(__IPHONE_13_4)
 - (UIPointerRegion *)pointerInteraction:(UIPointerInteraction *)interaction regionForRequest:(UIPointerRegionRequest *)request defaultRegion:(UIPointerRegion *)defaultRegion API_AVAILABLE(ios(13.4)){
-    if (request != nil && !SDL_HasGCMouse()) {
+    if (request != nil && (!SDL_HasGCMouse() || !SDL_GCMouseRelativeMode())) {
         CGPoint origin = self.bounds.origin;
         CGPoint point = request.location;