Scaling mouse coordinate to match Retina scaling
This commit is contained in:
parent
eb72b6fb55
commit
7b73fe4193
2 changed files with 18 additions and 3 deletions
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in a new issue