瀏覽代碼

Merge pull request #711 from ChrisDill/SetMouseOffset

Added SetMouseOffset
Ray 6 年之前
父節點
當前提交
0333e5b6c2
共有 2 個文件被更改,包括 20 次插入9 次删除
  1. 18 8
      src/core.c
  2. 2 1
      src/raylib.h

+ 18 - 8
src/core.c

@@ -333,7 +333,8 @@ static int defaultKeyboardMode;                 // Used to store default keyboar
 
 // Mouse states
 static Vector2 mousePosition;                   // Mouse position on screen
-static float mouseScale = 1.0f;                 // Mouse default scale
+static Vector2 mouseScale = { 1.0f, 1.0f };     // Mouse default scale
+static Vector2 mouseOffset = { 0.0f, 0.0f };    // Mouse default scale
 static bool cursorHidden = false;               // Track if cursor is hidden
 static bool cursorOnScreen = false;             // Tracks if cursor is inside client area
 static Vector2 touchPosition[MAX_TOUCH_POINTS]; // Touch position on screen
@@ -2075,7 +2076,7 @@ int GetMouseX(void)
 #if defined(PLATFORM_ANDROID)
     return (int)touchPosition[0].x;
 #else
-    return (int)(mousePosition.x*mouseScale);
+    return (int)((mousePosition.x+mouseOffset.x)*mouseScale.x);
 #endif
 }
 
@@ -2085,7 +2086,7 @@ int GetMouseY(void)
 #if defined(PLATFORM_ANDROID)
     return (int)touchPosition[0].x;
 #else
-    return (int)(mousePosition.y*mouseScale);
+    return (int)((mousePosition.y+mouseOffset.y)*mouseScale.y);
 #endif
 }
 
@@ -2095,7 +2096,7 @@ Vector2 GetMousePosition(void)
 #if defined(PLATFORM_ANDROID)
     return GetTouchPosition(0);
 #else
-    return (Vector2){ mousePosition.x*mouseScale, mousePosition.y*mouseScale };
+    return (Vector2){ (mousePosition.x+mouseOffset.x)*mouseScale.x, (mousePosition.y+mouseOffset.y)*mouseScale.y };
 #endif
 }
 
@@ -2111,10 +2112,19 @@ void SetMousePosition(Vector2 position)
 
 // Set mouse scaling
 // NOTE: Useful when rendering to different size targets
-void SetMouseScale(float scale)
+void SetMouseScale(Vector2 scale)
 {
 #if !defined(PLATFORM_ANDROID)
-    mouseScale = scale;
+	mouseScale = scale;
+#endif
+}
+
+// Set mouse offset
+// NOTE: Useful when rendering to different size targets
+void SetMouseOffset(Vector2 offset)
+{
+#if !defined(PLATFORM_ANDROID)
+    mouseScale = offset;
 #endif
 }
 
@@ -4225,10 +4235,10 @@ static void *EventThread(void *arg)
 
             // Screen confinement
             if (mousePosition.x < 0) mousePosition.x = 0;
-            if (mousePosition.x > screenWidth/mouseScale) mousePosition.x = screenWidth/mouseScale;
+            if (mousePosition.x > screenWidth/mouseScale.x) mousePosition.x = screenWidth/mouseScale.x;
 
             if (mousePosition.y < 0) mousePosition.y = 0;
-            if (mousePosition.y > screenHeight/mouseScale) mousePosition.y = screenHeight/mouseScale;
+            if (mousePosition.y > screenHeight/mouseScale.y) mousePosition.y = screenHeight/mouseScale.y;
 
             // Gesture update
             if (GestureNeedsUpdate)

+ 2 - 1
src/raylib.h

@@ -941,7 +941,8 @@ RLAPI int GetMouseX(void);                                    // Returns mouse p
 RLAPI int GetMouseY(void);                                    // Returns mouse position Y
 RLAPI Vector2 GetMousePosition(void);                         // Returns mouse position XY
 RLAPI void SetMousePosition(Vector2 position);                // Set mouse position XY
-RLAPI void SetMouseScale(float scale);                        // Set mouse scaling
+RLAPI void SetMouseScale(Vector2 scale);                      // Set mouse scaling
+RLAPI void SetMouseOffset(Vector2 scale);                     // Set mouse offset
 RLAPI int GetMouseWheelMove(void);                            // Returns mouse wheel movement Y
 
 // Input-related functions: touch