public void HandleMouseEvents(UpdateState state)
{
var mouseBtnDown = state.MouseState.LeftButton == Microsoft.Xna.Framework.Input.ButtonState.Pressed;
var mouseDif = mouseBtnDown != LastMouseDownState;
LastMouseDownState = mouseBtnDown;
if (mouseDif)
{
if (mouseBtnDown)
{
if (LastMouseDown != null)
{
/** We already have mouse down on an object **/
return;
}
if (LastMouseOver != null)
{
LastMouseDown = LastMouseOver;
LastMouseDown.Callback(UIMouseEventType.MouseDown, state);
}
}
else
{
if (LastMouseDown != null)
{
LastMouseDown.Callback(UIMouseEventType.MouseUp, state);
LastMouseDown = null;
}
}
}
if (state.MouseEvents.Count > 0)
{
var topMost =
state.MouseEvents.OrderByDescending(x => x.Element.Depth).First();
/** Same element **/
if (LastMouseOver == topMost)
{
return;
}
if (LastMouseOver != null)
{
LastMouseOver.Callback(UIMouseEventType.MouseOut, state);
}
topMost.Callback(UIMouseEventType.MouseOver, state);
LastMouseOver = topMost;
}
else
{
if (LastMouseOver != null)
{
LastMouseOver.Callback(UIMouseEventType.MouseOut, state);
LastMouseOver = null;
}
}
}