From d13451d181569b7acbc99a17b971285c4814c876 Mon Sep 17 00:00:00 2001 From: VPeruS Date: Thu, 8 Jun 2017 22:25:59 +0300 Subject: [PATCH] Change HIPoint to NSPoint, hipoint wasn't arch independent --- src/OpenTK/Platform/MacOS/HIDInput.cs | 12 ++++++++-- .../Platform/MacOS/Quartz/DisplayServices.cs | 4 ++-- src/OpenTK/Platform/MacOS/Quartz/EventServices.cs | 27 +++++++++++++++++++++- 3 files changed, 38 insertions(+), 5 deletions(-) diff --git a/src/OpenTK/Platform/MacOS/HIDInput.cs b/src/OpenTK/Platform/MacOS/HIDInput.cs index ca6eecd..87d06ae 100644 --- a/src/OpenTK/Platform/MacOS/HIDInput.cs +++ b/src/OpenTK/Platform/MacOS/HIDInput.cs @@ -273,7 +273,7 @@ namespace OpenTK.Platform.MacOS case CGEventType.RightMouseDragged: case CGEventType.OtherMouseDragged: { - Carbon.HIPoint p = CG.EventGetLocation(@event); + NSPoint p = CG.EventGetLocation(@event); CursorState.X = (int)Math.Round(p.X); CursorState.Y = (int)Math.Round(p.Y); } @@ -1045,7 +1045,15 @@ namespace OpenTK.Platform.MacOS void IMouseDriver2.SetPosition(double x, double y) { CG.SetLocalEventsSuppressionInterval(0.0); - CG.WarpMouseCursorPosition(new Carbon.HIPoint(x, y)); + + NSPoint p = new NSPoint(); + unsafe + { + p.X.Value = *(IntPtr *)&x; + p.Y.Value = *(IntPtr *)&y; + } + + CG.WarpMouseCursorPosition(p); } #endregion diff --git a/src/OpenTK/Platform/MacOS/Quartz/DisplayServices.cs b/src/OpenTK/Platform/MacOS/Quartz/DisplayServices.cs index 9a1b3d1..853d32d 100644 --- a/src/OpenTK/Platform/MacOS/Quartz/DisplayServices.cs +++ b/src/OpenTK/Platform/MacOS/Quartz/DisplayServices.cs @@ -60,7 +60,7 @@ namespace OpenTK.Platform.MacOS { const string lib = "/System/Library/Frameworks/ApplicationServices.framework/Versions/Current/ApplicationServices"; - // CGPoint -> HIPoint + // CGPoint -> NSPoint // CGSize -> HISize // CGRect -> HIRect @@ -116,7 +116,7 @@ namespace OpenTK.Platform.MacOS internal static extern IntPtr DisplaySwitchToMode(IntPtr display, IntPtr displayMode); [DllImport(lib, EntryPoint = "CGWarpMouseCursorPosition")] - internal static extern CGError WarpMouseCursorPosition(HIPoint newCursorPosition); + internal static extern CGError WarpMouseCursorPosition(NSPoint newCursorPosition); [DllImport(lib, EntryPoint = "CGCursorIsVisible")] internal static extern bool CursorIsVisible(); diff --git a/src/OpenTK/Platform/MacOS/Quartz/EventServices.cs b/src/OpenTK/Platform/MacOS/Quartz/EventServices.cs index 7e61bdd..73067be 100644 --- a/src/OpenTK/Platform/MacOS/Quartz/EventServices.cs +++ b/src/OpenTK/Platform/MacOS/Quartz/EventServices.cs @@ -66,7 +66,32 @@ namespace OpenTK.Platform.MacOS CGEventField field); [DllImport(lib, EntryPoint = "CGEventGetLocation")] - internal static extern Carbon.HIPoint EventGetLocation(CGEventRef @event); + internal static extern NSPointF EventGetLocationF(CGEventRef @event); + [DllImport(lib, EntryPoint = "CGEventGetLocation")] + internal static extern NSPointD EventGetLocationD(CGEventRef @event); + + internal static NSPoint EventGetLocation(CGEventRef @event) + { + NSPoint r = new NSPoint(); + + unsafe { + if (IntPtr.Size == 4) + { + NSPointF pf = EventGetLocationF(@event); + r.X.Value = *(IntPtr *)&pf.x; + r.Y.Value = *(IntPtr *)&pf.y; + } + else + { + NSPointD pd = EventGetLocationD(@event); + r.X.Value = *(IntPtr *)&pd.x; + r.Y.Value = *(IntPtr *)&pd.y; + } + } + + return r; + } + } enum CGEventTapLocation -- 2.7.4