// // MouseEventArgs.cs // // Author: // Stefanos A. // // Copyright (c) 2006-2014 Stefanos Apostolopoulos // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. // using System; #if !MINIMAL using System.Drawing; #endif namespace OpenTK.Input { /// /// Defines the event data for events. /// /// /// /// Do not cache instances of this type outside their event handler. /// If necessary, you can clone an instance using the /// constructor. /// /// public class MouseEventArgs : EventArgs { private MouseState state; /// /// Constructs a new instance. /// public MouseEventArgs() { state.SetIsConnected(true); } /// /// Constructs a new instance. /// /// The X position. /// The Y position. public MouseEventArgs(int x, int y) : this() { state.X = x; state.Y = y; } /// /// Constructs a new instance. /// /// The instance to clone. public MouseEventArgs(MouseEventArgs args) : this(args.X, args.Y) { } internal void SetButton(MouseButton button, ButtonState state) { if (button < 0 || button > MouseButton.LastButton) { throw new ArgumentOutOfRangeException(); } switch (state) { case ButtonState.Pressed: this.state.EnableBit((int)button); break; case ButtonState.Released: this.state.DisableBit((int)button); break; } } internal ButtonState GetButton(MouseButton button) { if (button < 0 || button > MouseButton.LastButton) { throw new ArgumentOutOfRangeException(); } return state.ReadBit((int)button) ? ButtonState.Pressed : ButtonState.Released; } /// /// Gets the X position of the mouse for the event. /// public int X { get { return state.X; } internal set { state.X = value; } } /// /// Gets the Y position of the mouse for the event. /// public int Y { get { return state.Y; } internal set { state.Y = value; } } /// /// Gets a representing the location of the mouse for the event. /// public Point Position { get { return new Point(state.X, state.Y); } set { X = value.X; Y = value.Y; } } /// /// Gets the current . /// public MouseState Mouse { get { return state; } internal set { state = value; } } } /// /// Defines the event data for events. /// /// /// /// Do not cache instances of this type outside their event handler. /// If necessary, you can clone an instance using the /// constructor. /// /// public class MouseMoveEventArgs : MouseEventArgs { /// /// Constructs a new instance. /// public MouseMoveEventArgs() { } /// /// Constructs a new instance. /// /// The X position. /// The Y position. /// The change in X position produced by this event. /// The change in Y position produced by this event. public MouseMoveEventArgs(int x, int y, int xDelta, int yDelta) : base(x, y) { XDelta = xDelta; YDelta = yDelta; } /// /// Constructs a new instance. /// /// The instance to clone. public MouseMoveEventArgs(MouseMoveEventArgs args) : this(args.X, args.Y, args.XDelta, args.YDelta) { } /// /// Gets the change in X position produced by this event. /// public int XDelta { get; internal set; } /// /// Gets the change in Y position produced by this event. /// public int YDelta { get; internal set; } } /// /// Defines the event data for and events. /// /// /// /// Do not cache instances of this type outside their event handler. /// If necessary, you can clone an instance using the /// constructor. /// /// public class MouseButtonEventArgs : MouseEventArgs { /// /// Constructs a new instance. /// public MouseButtonEventArgs() { } /// /// Constructs a new instance. /// /// The X position. /// The Y position. /// The mouse button for the event. /// The current state of the button. public MouseButtonEventArgs(int x, int y, MouseButton button, bool pressed) : base(x, y) { this.Button = button; this.IsPressed = pressed; } /// /// Constructs a new instance. /// /// The instance to clone. public MouseButtonEventArgs(MouseButtonEventArgs args) : this(args.X, args.Y, args.Button, args.IsPressed) { } /// /// Gets the that triggered this event. /// public MouseButton Button { get; internal set; } /// /// Gets a System.Boolean representing the state of the mouse button for the event. /// public bool IsPressed { get { return GetButton(Button) == ButtonState.Pressed; } internal set { SetButton(Button, value ? ButtonState.Pressed : ButtonState.Released); } } } /// /// Defines the event data for events. /// /// /// /// Do not cache instances of this type outside their event handler. /// If necessary, you can clone an instance using the /// constructor. /// /// public class MouseWheelEventArgs : MouseEventArgs { /// /// Constructs a new instance. /// public MouseWheelEventArgs() { } /// /// Constructs a new instance. /// /// The X position. /// The Y position. /// The value of the wheel. /// The change in value of the wheel for this event. public MouseWheelEventArgs(int x, int y, int value, int delta) : base(x, y) { Mouse.SetScrollAbsolute(Mouse.Scroll.X, value); this.DeltaPrecise = delta; } /// /// Constructs a new instance. /// /// The instance to clone. public MouseWheelEventArgs(MouseWheelEventArgs args) : this(args.X, args.Y, args.Value, args.Delta) { } /// /// Gets the value of the wheel in integer units. /// To support high-precision mice, it is recommended to use instead. /// public int Value { get { return (int)Math.Round(Mouse.Scroll.Y, MidpointRounding.AwayFromZero); } } /// /// Gets the change in value of the wheel for this event in integer units. /// To support high-precision mice, it is recommended to use instead. /// public int Delta { get { return (int)Math.Round(DeltaPrecise, MidpointRounding.AwayFromZero); } } /// /// Gets the precise value of the wheel in floating-point units. /// public float ValuePrecise { get { return Mouse.Scroll.Y; } } /// /// Gets the precise change in value of the wheel for this event in floating-point units. /// public float DeltaPrecise { get; internal set; } } }