/// <summary> /// Updates any UI elements. /// </summary> /// <returns>Whether or not we should block mouse actions when updating entities.</returns> public bool Update() { foreach (var element in _elements) { if (element.Active && element is IUIFocusable) { var focusable = element as IUIFocusable; if (focusable.Focused) { focusable.FocusUpdate(); } } } // TODO: Check other mouse buttons. var mouseState = Mouse.GetState(); var mousePosition = mouseState.GetPosition(); var mouseButton = mouseState.GetButtonUp(MouseButtons.LeftButton) ? MouseButtons.LeftButton : MouseButtons.None; var e = new UIMouseEventData(mousePosition, mouseButton); var block = false; foreach (var element in _elements) { block |= UpdateHelper(element, e); } _elements.RemoveAll(element => element.Deleted); return(block); }
private bool UpdateHelper(UIElement element, UIMouseEventData e) { var block = false; if (element.Active && !element.Deleted) { if (element is IUIClickable) { var clickable = element as IUIClickable; if (clickable.CheckMouseOver(e.Position)) { clickable.MousedOver = true; block = clickable.MouseOver(e); } else { if (clickable.MousedOver) { clickable.MouseOut(e); } clickable.MousedOver = false; } if (e.Button == MouseButtons.LeftButton && clickable.CheckReleased(e)) { clickable.Click(e); } } if (element is IUIFocusable) { var focusable = element as IUIFocusable; if (focusable.Focused) { focusable.FocusUpdate(); } } } foreach (var child in element.Children) { block |= UpdateHelper(child, e); } return(block); }