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.
--- 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);