From 1457e4430907556764673b7512c63e68b715fd76 Mon Sep 17 00:00:00 2001 From: thefiddler Date: Sun, 4 May 2014 08:33:51 +0200 Subject: [PATCH] [Examples] Hook both MouseDevice and Mouse events They should give identical results. --- Source/Examples/OpenTK/Test/GameWindowStates.cs | 99 ++++++++++++++++++++++--- 1 file changed, 87 insertions(+), 12 deletions(-) diff --git a/Source/Examples/OpenTK/Test/GameWindowStates.cs b/Source/Examples/OpenTK/Test/GameWindowStates.cs index 703c608..d3d3fe2 100644 --- a/Source/Examples/OpenTK/Test/GameWindowStates.cs +++ b/Source/Examples/OpenTK/Test/GameWindowStates.cs @@ -26,9 +26,15 @@ namespace Examples.Tests bool mouse_in_window = false; bool viewport_changed = true; - // mouse information + // legacy NativeWindow.MouseDevice events + Vector4 mousedevice_pos; + int mousedevice_buttons; + MouseState mousedevice_state; + + // new NativeWindow.Mouse* events Vector4 mouse_pos; int mouse_buttons; + MouseState mouse_state; // time drift Stopwatch watch = new Stopwatch(); @@ -60,10 +66,15 @@ namespace Examples.Tests MouseEnter += delegate { mouse_in_window = true; }; MouseLeave += delegate { mouse_in_window = false; }; - Mouse.Move += MouseMoveHandler; - Mouse.WheelChanged += MouseWheelHandler; - Mouse.ButtonDown += MouseButtonHandler; - Mouse.ButtonUp += MouseButtonHandler; + Mouse.Move += MouseDeviceMoveHandler; + Mouse.WheelChanged += MouseDeviceWheelHandler; + Mouse.ButtonDown += MouseDeviceButtonHandler; + Mouse.ButtonUp += MouseDeviceButtonHandler; + + MouseMove += MouseMoveHandler; + MouseWheel += MouseWheelHandler; + MouseDown += MouseButtonHandler; + MouseUp += MouseButtonHandler; } private void KeyPressHandler(object sender, KeyPressEventArgs e) @@ -122,12 +133,53 @@ namespace Examples.Tests modifiers = e.Modifiers; } + #region MouseDevice events + + void MouseDeviceMoveHandler(object sender, MouseMoveEventArgs e) + { + mousedevice_pos.X = e.X; + mousedevice_pos.Y = e.Y; + mousedevice_pos.Z = e.Mouse.Scroll.X; + mousedevice_pos.W = e.Mouse.Scroll.Y; + mousedevice_state = e.Mouse; + } + + void MouseDeviceButtonHandler(object sender, MouseButtonEventArgs e) + { + if (e.Button == MouseButton.Left && e.IsPressed) + { + CursorVisible = false; + } + + if (e.IsPressed) + { + mousedevice_buttons |= 1 << (int)e.Button; + } + else + { + mousedevice_buttons &= ~(1 << (int)e.Button); + } + mousedevice_state = e.Mouse; + } + + void MouseDeviceWheelHandler(object sender, MouseWheelEventArgs e) + { + mousedevice_pos.Z = e.Mouse.Scroll.Y; + mousedevice_pos.W = e.Mouse.Scroll.X; + mousedevice_state = e.Mouse; + } + + #endregion + + #region Mouse events + void MouseMoveHandler(object sender, MouseMoveEventArgs e) { mouse_pos.X = e.X; mouse_pos.Y = e.Y; mouse_pos.Z = e.Mouse.Scroll.X; mouse_pos.W = e.Mouse.Scroll.Y; + mouse_state = e.Mouse; } void MouseButtonHandler(object sender, MouseButtonEventArgs e) @@ -145,14 +197,18 @@ namespace Examples.Tests { mouse_buttons &= ~(1 << (int)e.Button); } + mouse_state = e.Mouse; } void MouseWheelHandler(object sender, MouseWheelEventArgs e) { - mouse_pos.Z += e.Mouse.Scroll.Y; - mouse_pos.W += e.Mouse.Scroll.X; + mouse_pos.Z = e.Mouse.Scroll.Y; + mouse_pos.W = e.Mouse.Scroll.X; + mouse_state = e.Mouse; } + #endregion + static int Clamp(int val, int min, int max) { return val > max ? max : val < min ? min : val; @@ -229,8 +285,8 @@ namespace Examples.Tests { StringBuilder sb = new StringBuilder(); sb.Append("MouseDevice: "); - sb.Append(new Vector3(Mouse.X, Mouse.Y, Mouse.Wheel)); - sb.Append(" "); + sb.AppendFormat("[{0}, {1}, {2:0.00}] ", + Mouse.X, Mouse.Y, Mouse.WheelPrecise); for (var i = MouseButton.Left; i < MouseButton.LastButton; i++) { if (Mouse[i]) @@ -243,9 +299,27 @@ namespace Examples.Tests DrawString(gfx, sb.ToString(), line++); sb.Remove(0, sb.Length); - sb.Append("Mouse events: "); - sb.Append(mouse_pos); + sb.Append("MouseDevice events: "); + sb.AppendFormat("[{0}, {1}, {2:0.00}, {3:0.00}] ", + mousedevice_pos.X, mousedevice_pos.Y, + mousedevice_pos.Z, mousedevice_pos.W); + for (var i = MouseButton.Left; i < MouseButton.LastButton; i++) + { + if ((mousedevice_buttons & (1 << (int)i)) != 0) + { + sb.Append(i); + sb.Append(" "); + } + } sb.Append(" "); + sb.AppendLine(mousedevice_state.ToString()); + DrawString(gfx, sb.ToString(), line++); + + sb.Remove(0, sb.Length); + sb.Append("Mouse events: "); + sb.AppendFormat("[{0}, {1}, {2:0.00}, {3:0.00}] ", + mouse_pos.X, mouse_pos.Y, + mouse_pos.Z, mouse_pos.W); for (var i = MouseButton.Left; i < MouseButton.LastButton; i++) { if ((mouse_buttons & (1 << (int)i)) != 0) @@ -254,7 +328,8 @@ namespace Examples.Tests sb.Append(" "); } } - sb.AppendLine(); + sb.Append(" "); + sb.AppendLine(mouse_state.ToString()); DrawString(gfx, sb.ToString(), line++); return line; } -- 2.7.4