hedgewars/uCursor.pas
changeset 12831 1fbc0d5a82d0
parent 12793 575c0de98505
child 12890 9c259fb4d405
child 13498 424944a835a7
--- a/hedgewars/uCursor.pas	Sun Nov 12 17:25:17 2017 +0100
+++ b/hedgewars/uCursor.pas	Sun Nov 12 17:41:01 2017 +0100
@@ -6,7 +6,6 @@
 procedure resetPosition;
 procedure updatePosition;
 procedure handlePositionUpdate(x, y: LongInt);
-procedure setSystemCursor(enabled: boolean);
 
 implementation
 
@@ -19,16 +18,28 @@
 
 procedure resetPosition;
 begin
+    // Move curser by 1px in case it's already centered.
+    // The game camera in the Alpha for 0.9.23 screwed up if
+    // the game started with the mouse already being centered.
+    // This fixes it, but we might have overlooked a related
+    // bug somewhere else.
+    // No big deal since this function is (so far) only called once.
+    SDL_WarpMouse((cScreenWidth div 2) + 1, cScreenHeight div 2);
     SDL_WarpMouse(cScreenWidth div 2, cScreenHeight div 2);
 end;
 
 procedure updatePosition;
 var x, y: LongInt;
 begin
-    SDL_GetRelativeMouseState(@x, @y);
+    SDL_GetMouseState(@x, @y);
 
-    if(x <> 0) or (y <> 0) then
-        handlePositionUpdate(x, y);
+    if(x <> cScreenWidth div 2) or (y <> cScreenHeight div 2) then
+    begin
+        handlePositionUpdate(x - cScreenWidth div 2, y - cScreenHeight div 2);
+
+        if cHasFocus then
+            SDL_WarpMouse(cScreenWidth div 2, cScreenHeight div 2);
+    end
 end;
 
 procedure handlePositionUpdate(x, y: LongInt);
@@ -37,21 +48,4 @@
     CursorPoint.Y:= CursorPoint.Y - y;
 end;
 
-procedure setSystemCursor(enabled: boolean);
-begin
-    if enabled then
-        begin
-        SDL_SetRelativeMouseMode(false);
-        if cHasFocus then
-            resetPosition();
-        SDL_ShowCursor(1);
-        end
-    else
-        begin
-        SDL_ShowCursor(0);
-        SDL_GetRelativeMouseState(nil, nil);
-        SDL_SetRelativeMouseMode(true);
-        end;
-end;
-
 end.