#region License
/* FNA - XNA4 Reimplementation for Desktop Platforms
* Copyright 2009-2020 Ethan Lee and the MonoGame Team
*
* Released under the Microsoft Public License.
* See LICENSE for details.
*/
#endregion
namespace Microsoft.Xna.Framework.Input
{
///
/// Represents a mouse state with cursor position and button press information.
///
public struct MouseState
{
#region Public Properties
///
/// Gets horizontal position of the cursor.
///
public int X
{
get;
internal set;
}
///
/// Gets vertical position of the cursor.
///
public int Y
{
get;
internal set;
}
///
/// Gets state of the left mouse button.
///
public ButtonState LeftButton
{
get;
internal set;
}
///
/// Gets state of the right mouse button.
///
public ButtonState RightButton
{
get;
internal set;
}
///
/// Gets state of the middle mouse button.
///
public ButtonState MiddleButton
{
get;
internal set;
}
///
/// Gets state of the XButton1.
///
public ButtonState XButton1
{
get;
internal set;
}
///
/// Gets state of the XButton2.
///
public ButtonState XButton2
{
get;
internal set;
}
///
/// Returns cumulative scroll wheel value since the game start.
///
public int ScrollWheelValue
{
get;
internal set;
}
#endregion
#region Public Constructor
///
/// Initializes a new instance of the MouseState.
///
/// Horizontal position of the mouse.
/// Vertical position of the mouse.
/// Mouse scroll wheel's value.
/// Left mouse button's state.
/// Middle mouse button's state.
/// Right mouse button's state.
/// XBUTTON1's state.
/// XBUTTON2's state.
///
/// Normally should be used to get mouse current
/// state. The constructor is provided for simulating mouse input.
///
public MouseState (
int x,
int y,
int scrollWheel,
ButtonState leftButton,
ButtonState middleButton,
ButtonState rightButton,
ButtonState xButton1,
ButtonState xButton2
) : this() {
X = x;
Y = y;
ScrollWheelValue = scrollWheel;
LeftButton = leftButton;
MiddleButton = middleButton;
RightButton = rightButton;
XButton1 = xButton1;
XButton2 = xButton2;
}
#endregion
#region Public Static Operators and Override Methods
///
/// Compares whether two MouseState instances are equal.
///
/// MouseState instance on the left of the equal sign.
/// MouseState instance on the right of the equal sign.
/// true if the instances are equal; false otherwise.
public static bool operator ==(MouseState left, MouseState right)
{
return ( left.X == right.X &&
left.Y == right.Y &&
left.LeftButton == right.LeftButton &&
left.MiddleButton == right.MiddleButton &&
left.RightButton == right.RightButton &&
left.ScrollWheelValue == right.ScrollWheelValue );
}
///
/// Compares whether two MouseState instances are not equal.
///
/// MouseState instance on the left of the equal sign.
/// MouseState instance on the right of the equal sign.
/// true if the objects are not equal; false otherwise.
public static bool operator !=(MouseState left, MouseState right)
{
return !(left == right);
}
///
/// Compares whether current instance is equal to specified object.
///
/// The MouseState to compare.
///
public override bool Equals(object obj)
{
return (obj is MouseState) && (this == (MouseState) obj);
}
///
/// Gets the hash code for MouseState instance.
///
/// Hash code of the object.
public override int GetHashCode()
{
return base.GetHashCode();
}
///
/// Returns a string describing the mouse state.
///
public override string ToString()
{
string buttons = string.Empty;
if (LeftButton == ButtonState.Pressed)
{
buttons = "Left";
}
if (RightButton == ButtonState.Pressed)
{
if (buttons.Length > 0)
{
buttons += " ";
}
buttons += "Right";
}
if (MiddleButton == ButtonState.Pressed)
{
if (buttons.Length > 0)
{
buttons += " ";
}
buttons += "Middle";
}
if (XButton1 == ButtonState.Pressed)
{
if (buttons.Length > 0)
{
buttons += " ";
}
buttons += "XButton1";
}
if (XButton2 == ButtonState.Pressed)
{
if (buttons.Length > 0)
{
buttons += " ";
}
buttons += "XButton2";
}
if (string.IsNullOrEmpty(buttons))
{
buttons = "None";
}
return string.Format(
"[MouseState X={0}, Y={1}, Buttons={2}, Wheel={3}]",
X,
Y,
buttons,
ScrollWheelValue
);
}
#endregion
}
}