Backed out changeset 575c0de98505
authorWuzzy <Wuzzy2@mail.ru>
Sun, 12 Nov 2017 17:41:01 +0100
changeset 12831 1fbc0d5a82d0
parent 12830 ffa905c96dd8
child 12832 b443395c36ca
Backed out changeset 575c0de98505 Reason: We suspect that this patch might break Windows builds and render the mouse on Windows unusable. This suspicion is based on the bug report of one user: https://hedgewars.org/node/6837#comment-33593 In return, this changeset will definitely re-introduce bug #512.
ChangeLog.txt
hedgewars/SDLh.pas
hedgewars/hwengine.pas
hedgewars/uCursor.pas
hedgewars/uWorld.pas
--- a/ChangeLog.txt	Sun Nov 12 17:25:17 2017 +0100
+++ b/ChangeLog.txt	Sun Nov 12 17:41:01 2017 +0100
@@ -67,7 +67,6 @@
  + Temporarily suspend Heavy Wind mode while turn timer is not running
  + Engine supports now really gigantic maps
  * Fixed cursor often jumping back to screen center when putting target location while moving cursor
- * Fixed cursor not working at all when using custom mouse sensitivity set by the xinput program
  * Fixed team getting infinite ammo when stockpiling >= 100 ammo (max. finite ammo is now limited to 99)
  * Fixed failure to collect crate across wrap world edge
  * Remove buggy “/finish” chat command
--- a/hedgewars/SDLh.pas	Sun Nov 12 17:25:17 2017 +0100
+++ b/hedgewars/SDLh.pas	Sun Nov 12 17:41:01 2017 +0100
@@ -1106,7 +1106,6 @@
 function  SDL_RenderSetViewport(window: PSDL_Window; rect: PSDL_Rect): LongInt; cdecl; external SDLLibName;
 
 function  SDL_GetRelativeMouseState(x, y: PLongInt): Byte; cdecl; external SDLLibName;
-procedure SDL_SetRelativeMouseMode(enabled: Boolean); cdecl; external SDLLibName;
 function  SDL_PixelFormatEnumToMasks(format: TSDL_ArrayByteOrder; bpp: PLongInt; Rmask, Gmask, Bmask, Amask: PLongInt): Boolean; cdecl; external SDLLibName;
 
 procedure SDL_WarpMouseInWindow(window: PSDL_Window; x, y: LongInt); cdecl; external SDLLibName;
--- a/hedgewars/hwengine.pas	Sun Nov 12 17:25:17 2017 +0100
+++ b/hedgewars/hwengine.pas	Sun Nov 12 17:41:01 2017 +0100
@@ -372,7 +372,6 @@
     if not allOK then exit;
     //SDL_StartTextInput();
     SDL_ShowCursor(0);
-    SDL_SetRelativeMouseMode(true);
 
 
 {$IFDEF USE_VIDEO_RECORDING}
--- 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.
--- a/hedgewars/uWorld.pas	Sun Nov 12 17:25:17 2017 +0100
+++ b/hedgewars/uWorld.pas	Sun Nov 12 17:41:01 2017 +0100
@@ -2014,10 +2014,10 @@
 
 procedure updateCursorVisibility;
 begin
-    if isPaused or isAFK or (GameState = gsConfirm) then
-        uCursor.setSystemCursor(true)
+    if isPaused or isAFK then
+        SDL_ShowCursor(1)
     else
-        uCursor.setSystemCursor(false);
+        SDL_ShowCursor(ord(GameState = gsConfirm))
 end;
 
 procedure SetUtilityWidgetState(ammoType: TAmmoType);