mirror of
https://github.com/Ryujinx/Opentk.git
synced 2025-02-24 04:26:57 +00:00
[Examples] Hook both MouseDevice and Mouse events
They should give identical results.
This commit is contained in:
parent
67359a5d90
commit
1457e44309
|
@ -26,9 +26,15 @@ namespace Examples.Tests
|
||||||
bool mouse_in_window = false;
|
bool mouse_in_window = false;
|
||||||
bool viewport_changed = true;
|
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;
|
Vector4 mouse_pos;
|
||||||
int mouse_buttons;
|
int mouse_buttons;
|
||||||
|
MouseState mouse_state;
|
||||||
|
|
||||||
// time drift
|
// time drift
|
||||||
Stopwatch watch = new Stopwatch();
|
Stopwatch watch = new Stopwatch();
|
||||||
|
@ -60,10 +66,15 @@ namespace Examples.Tests
|
||||||
MouseEnter += delegate { mouse_in_window = true; };
|
MouseEnter += delegate { mouse_in_window = true; };
|
||||||
MouseLeave += delegate { mouse_in_window = false; };
|
MouseLeave += delegate { mouse_in_window = false; };
|
||||||
|
|
||||||
Mouse.Move += MouseMoveHandler;
|
Mouse.Move += MouseDeviceMoveHandler;
|
||||||
Mouse.WheelChanged += MouseWheelHandler;
|
Mouse.WheelChanged += MouseDeviceWheelHandler;
|
||||||
Mouse.ButtonDown += MouseButtonHandler;
|
Mouse.ButtonDown += MouseDeviceButtonHandler;
|
||||||
Mouse.ButtonUp += MouseButtonHandler;
|
Mouse.ButtonUp += MouseDeviceButtonHandler;
|
||||||
|
|
||||||
|
MouseMove += MouseMoveHandler;
|
||||||
|
MouseWheel += MouseWheelHandler;
|
||||||
|
MouseDown += MouseButtonHandler;
|
||||||
|
MouseUp += MouseButtonHandler;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void KeyPressHandler(object sender, KeyPressEventArgs e)
|
private void KeyPressHandler(object sender, KeyPressEventArgs e)
|
||||||
|
@ -122,12 +133,53 @@ namespace Examples.Tests
|
||||||
modifiers = e.Modifiers;
|
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)
|
void MouseMoveHandler(object sender, MouseMoveEventArgs e)
|
||||||
{
|
{
|
||||||
mouse_pos.X = e.X;
|
mouse_pos.X = e.X;
|
||||||
mouse_pos.Y = e.Y;
|
mouse_pos.Y = e.Y;
|
||||||
mouse_pos.Z = e.Mouse.Scroll.X;
|
mouse_pos.Z = e.Mouse.Scroll.X;
|
||||||
mouse_pos.W = e.Mouse.Scroll.Y;
|
mouse_pos.W = e.Mouse.Scroll.Y;
|
||||||
|
mouse_state = e.Mouse;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MouseButtonHandler(object sender, MouseButtonEventArgs e)
|
void MouseButtonHandler(object sender, MouseButtonEventArgs e)
|
||||||
|
@ -145,14 +197,18 @@ namespace Examples.Tests
|
||||||
{
|
{
|
||||||
mouse_buttons &= ~(1 << (int)e.Button);
|
mouse_buttons &= ~(1 << (int)e.Button);
|
||||||
}
|
}
|
||||||
|
mouse_state = e.Mouse;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MouseWheelHandler(object sender, MouseWheelEventArgs e)
|
void MouseWheelHandler(object sender, MouseWheelEventArgs e)
|
||||||
{
|
{
|
||||||
mouse_pos.Z += e.Mouse.Scroll.Y;
|
mouse_pos.Z = e.Mouse.Scroll.Y;
|
||||||
mouse_pos.W += e.Mouse.Scroll.X;
|
mouse_pos.W = e.Mouse.Scroll.X;
|
||||||
|
mouse_state = e.Mouse;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
static int Clamp(int val, int min, int max)
|
static int Clamp(int val, int min, int max)
|
||||||
{
|
{
|
||||||
return val > max ? max : val < min ? min : val;
|
return val > max ? max : val < min ? min : val;
|
||||||
|
@ -229,8 +285,8 @@ namespace Examples.Tests
|
||||||
{
|
{
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
sb.Append("MouseDevice: ");
|
sb.Append("MouseDevice: ");
|
||||||
sb.Append(new Vector3(Mouse.X, Mouse.Y, Mouse.Wheel));
|
sb.AppendFormat("[{0}, {1}, {2:0.00}] ",
|
||||||
sb.Append(" ");
|
Mouse.X, Mouse.Y, Mouse.WheelPrecise);
|
||||||
for (var i = MouseButton.Left; i < MouseButton.LastButton; i++)
|
for (var i = MouseButton.Left; i < MouseButton.LastButton; i++)
|
||||||
{
|
{
|
||||||
if (Mouse[i])
|
if (Mouse[i])
|
||||||
|
@ -243,9 +299,27 @@ namespace Examples.Tests
|
||||||
DrawString(gfx, sb.ToString(), line++);
|
DrawString(gfx, sb.ToString(), line++);
|
||||||
|
|
||||||
sb.Remove(0, sb.Length);
|
sb.Remove(0, sb.Length);
|
||||||
sb.Append("Mouse events: ");
|
sb.Append("MouseDevice events: ");
|
||||||
sb.Append(mouse_pos);
|
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.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++)
|
for (var i = MouseButton.Left; i < MouseButton.LastButton; i++)
|
||||||
{
|
{
|
||||||
if ((mouse_buttons & (1 << (int)i)) != 0)
|
if ((mouse_buttons & (1 << (int)i)) != 0)
|
||||||
|
@ -254,7 +328,8 @@ namespace Examples.Tests
|
||||||
sb.Append(" ");
|
sb.Append(" ");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
sb.AppendLine();
|
sb.Append(" ");
|
||||||
|
sb.AppendLine(mouse_state.ToString());
|
||||||
DrawString(gfx, sb.ToString(), line++);
|
DrawString(gfx, sb.ToString(), line++);
|
||||||
return line;
|
return line;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue