Relative mouse pos

This commit is contained in:
teinarss
2019-06-09 20:34:37 +02:00
committed by abcdefg30
parent d7643602c1
commit f325a4d190
3 changed files with 16 additions and 10 deletions

View File

@@ -138,15 +138,13 @@ namespace OpenRA.Graphics
void Update()
{
if (cursor == null)
if (cursor != null && frame >= cursor.Length)
frame %= cursor.Length;
if (cursor == null || isLocked)
Game.Renderer.Window.SetHardwareCursor(null);
else
{
if (frame >= cursor.Length)
frame = frame % cursor.Length;
Game.Renderer.Window.SetHardwareCursor(hardwareCursors[cursor.Name][frame]);
}
}
public void Render(Renderer renderer)
@@ -171,12 +169,14 @@ namespace OpenRA.Graphics
lockedPosition = Viewport.LastMousePos;
Game.Renderer.Window.SetRelativeMouseMode(true);
isLocked = true;
Update();
}
public void Unlock()
{
Game.Renderer.Window.SetRelativeMouseMode(false);
isLocked = false;
Update();
}
public void Dispose()

View File

@@ -130,9 +130,14 @@ namespace OpenRA.Platforms.Default
case SDL.SDL_EventType.SDL_MOUSEMOTION:
{
var input = lockedMousePosition ?? new int2(e.motion.x, e.motion.y);
var mousePos = new int2(e.motion.x, e.motion.y);
var input = lockedMousePosition ?? mousePos;
var pos = EventPosition(device, input.X, input.Y);
var delta = EventPosition(device, e.motion.xrel, e.motion.yrel);
var delta = lockedMousePosition == null
? EventPosition(device, e.motion.xrel, e.motion.yrel)
: mousePos - lockedMousePosition.Value;
pendingMotion = new MouseInput(
MouseInputEvent.Move, lastButtonBits, pos, delta, mods, 0);

View File

@@ -284,11 +284,9 @@ namespace OpenRA.Platforms.Default
int x, y;
SDL.SDL_GetMouseState(out x, out y);
lockedMousePosition = new int2(x, y);
SDL.SDL_SetRelativeMouseMode(SDL.SDL_bool.SDL_TRUE);
}
else
{
SDL.SDL_SetRelativeMouseMode(SDL.SDL_bool.SDL_FALSE);
if (lockedMousePosition.HasValue)
SDL.SDL_WarpMouseInWindow(window, lockedMousePosition.Value.X, lockedMousePosition.Value.Y);
@@ -352,6 +350,9 @@ namespace OpenRA.Platforms.Default
{
VerifyThreadAffinity();
input.PumpInput(this, inputHandler, lockedMousePosition);
if (lockedMousePosition.HasValue)
SDL.SDL_WarpMouseInWindow(window, lockedMousePosition.Value.X, lockedMousePosition.Value.Y);
}
public string GetClipboardText()