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();
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)
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)
{
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;
{
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])
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)
sb.Append(" ");
}
}
- sb.AppendLine();
+ sb.Append(" ");
+ sb.AppendLine(mouse_state.ToString());
DrawString(gfx, sb.ToString(), line++);
return line;
}