public bool HandleEvent(ISkinLayout skin, Rectangle layout, IGameContext context, Event @event)
{
var mouseEvent = @event as MouseEvent;
var mousePressEvent = @event as MousePressEvent;
var mouseReleaseEvent = @event as MouseReleaseEvent;
var mouseMoveEvent = @event as MouseMoveEvent;
var touchEvent = @event as TouchEvent;
var touchPressEvent = @event as TouchPressEvent;
var touchHeldEvent = @event as TouchHeldEvent;
var touchReleaseEvent = @event as TouchReleaseEvent;
if (mouseEvent == null && touchEvent == null)
{
return false;
}
var x = 0;
var y = 0;
if (mouseEvent != null)
{
x = mouseEvent.MouseState.X;
y = mouseEvent.MouseState.Y;
}
if (touchPressEvent != null)
{
x = (int)touchPressEvent.X;
y = (int)touchPressEvent.Y;
}
if (touchReleaseEvent != null)
{
x = (int)touchReleaseEvent.X;
y = (int)touchReleaseEvent.Y;
}
if (touchHeldEvent != null)
{
x = (int)touchHeldEvent.X;
y = (int)touchHeldEvent.Y;
}
if (layout.Contains(x, y))
{
if (mouseMoveEvent != null)
{
State = ButtonUIState.Hover;
}
else if ((mousePressEvent != null && mousePressEvent.Button == MouseButton.Left) || touchPressEvent != null)
{
if (Click != null && State != ButtonUIState.Clicked)
{
Click(this, new EventArgs());
}
State = ButtonUIState.Clicked;
this.Focus();
return true;
}
}
else if (mouseMoveEvent != null)
{
State = ButtonUIState.None;
}
if (mouseReleaseEvent != null && mouseReleaseEvent.Button == MouseButton.Left)
{
if (touchHeldEvent == null || !layout.Contains(x, y))
{
State = ButtonUIState.None;
}
}
if (touchReleaseEvent != null && layout.Contains(x, y))
{
State = ButtonUIState.None;
}
return false;
}
}