#region License // // 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. // #endregion using System; using System.Drawing; 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 { #region Fields MouseState state; #endregion #region Constructors /// /// 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) { } #endregion #region Protected Members 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; } #endregion #region Public Members /// /// 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; } } #endregion } /// /// 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 { #region Fields int x_delta, y_delta; #endregion #region Constructors /// /// 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) { } #endregion #region Public Members /// /// Gets the change in X position produced by this event. /// public int XDelta { get { return x_delta; } internal set { x_delta = value; } } /// /// Gets the change in Y position produced by this event. /// public int YDelta { get { return y_delta; } internal set { y_delta = value; } } #endregion } /// /// 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 { #region Fields MouseButton button; #endregion #region Constructors /// /// 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; } /// /// Constructs a new instance. /// /// The instance to clone. public MouseButtonEventArgs(MouseButtonEventArgs args) : this(args.X, args.Y, args.Button, args.IsPressed) { } #endregion #region Public Members /// /// Gets the that triggered this event. /// public MouseButton Button { get { return button; } internal set { button = value; } } /// /// 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); } } #endregion } /// /// 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 { #region Fields float delta; #endregion #region Constructors /// /// 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.delta = delta; } /// /// Constructs a new instance. /// /// The instance to clone. public MouseWheelEventArgs(MouseWheelEventArgs args) : this(args.X, args.Y, args.Value, args.Delta) { } #endregion #region Public Members /// /// 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(delta, 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 { return delta; } internal set { delta = value; } } #endregion } }