Scaling mouse coordinate to match Retina scaling

This commit is contained in:
mrhelmut 2016-02-09 13:52:37 +01:00 committed by Thomas Altenburger
parent eb72b6fb55
commit 7b73fe4193
2 changed files with 18 additions and 3 deletions

View file

@ -83,6 +83,8 @@ namespace OpenTK.Platform.SDL2
}
}
internal static float Scale = 1.0f;
#endregion
#region Public Members
@ -110,13 +112,19 @@ namespace OpenTK.Platform.SDL2
public MouseState GetState()
{
return state;
MouseState scaledState = state;
if (Configuration.RunningOnMacOS)
{
scaledState.X = (int)Math.Round(scaledState.X * Scale);
scaledState.Y = (int)Math.Round(scaledState.Y * Scale);
}
return scaledState;
}
public MouseState GetState(int index)
{
if (index == 0)
return state;
return GetState();
else
return new MouseState();
}
@ -126,6 +134,12 @@ namespace OpenTK.Platform.SDL2
int x, y;
var buttons = SDL.GetMouseState(out x, out y);
if (Configuration.RunningOnMacOS)
{
x = (int)Math.Round(x * Scale);
y = (int)Math.Round(y * Scale);
}
var c = new MouseState();
c.SetIsConnected(true);
c.X = x;
@ -137,7 +151,7 @@ namespace OpenTK.Platform.SDL2
c[MouseButton.Button1] = (buttons & ButtonFlags.X1) != 0;
c[MouseButton.Button2] = (buttons & ButtonFlags.X2) != 0;
return state;
return c;
}
public void SetPosition(double x, double y)

View file

@ -285,6 +285,7 @@ namespace OpenTK.Platform.SDL2
window.OnMouseMove(
(int)Math.Round(ev.X * scale),
(int)Math.Round(ev.Y * scale));
Sdl2Mouse.Scale = scale;
}
static void ProcessMouseWheelEvent(Sdl2NativeWindow window, MouseWheelEvent ev)