internal bool HandledTextInput(UnicodeInputEventArgs e) { if (!visible || !enabled) { return(false); } for (var index = children.Count - 1; index >= 0; --index) { if (children[index].HandledTextInput(e)) { return(true); } } if (!RegisterEventTypes.HasFlag(EventType.TextEntered) || !HasFocus) { return(false); } OnTextEntered(e.CodePoint, e.Modifiers); TextEntered?.Invoke(this, e); return(true); }
internal bool HandledKeyReleased(KeyEventArgs e) { if (!Visible || !enabled) { return(false); } bool handled = false; for (var index = children.Count - 1; index >= 0; --index) { if (children[index].HandledKeyReleased(e)) { handled = true; } } if (!RegisterEventTypes.HasFlag(EventType.KeyRelease) || !HasFocus) { return(handled); } OnKeyReleased(e.Key, e.ScanCode, e.Modifiers); KeyReleased?.Invoke(this, e); return(true); }
internal bool HandledMouseReleased(MouseButtonEventArgs e) { if (!Visible || !enabled) { return(false); } bool handled = false; for (var index = children.Count - 1; index >= 0; --index) { if (children[index].HandledMouseReleased(e)) { handled = true; } } if (!HasFocus) { return(handled); } if (!RegisterEventTypes.HasFlag(EventType.MouseRelease)) { return(handled); } OnMouseReleased(e.Button, e.Modifiers); MouseReleased?.Invoke(this, e); return(true); }
internal bool HandledMousePressed(MouseButtonEventArgs e) { if (!Visible || !enabled) { return(false); } for (var index = children.Count - 1; index >= 0; --index) { if (children[index].HandledMousePressed(e)) { HasFocus = false; return(true); } } if (!MouseDirectlyOver) { HasFocus = false; return(false); } // TODO: Add smarter bring-to-front functionality. Right now, clicking on ANY child will bring it to the front which will cause lists of Controls to be reordered. //BringToFront(); Focus(); if (!RegisterEventTypes.HasFlag(EventType.MousePress)) { return(false); } OnMousePressed(e.Button, e.Modifiers); MousePressed?.Invoke(this, e); return(true); }
internal bool HandledMouseScroll() { if (!Visible || !enabled) { return(false); } for (var index = children.Count - 1; index >= 0; --index) { if (children[index].HandledMouseScroll()) { return(true); } } if (!RegisterEventTypes.HasFlag(EventType.MouseScroll) || !MouseDirectlyOver) { return(false); } OnMouseScroll(); MouseScrolled?.Invoke(this, EventArgs.Empty); return(true); }
internal bool HandledMouseMove() { if (!Visible || !enabled) { return(false); } var mousePos = Input.Manager.MousePosition; var globalPosition = GlobalPosition; if (!( mousePos.X >= globalPosition.X && mousePos.X <= globalPosition.X + Size.X && mousePos.Y >= globalPosition.Y && mousePos.Y <= globalPosition.Y + Size.Y )) { if (MouseInBounds) { MouseInBounds = false; MouseDirectlyOver = false; if (RegisterEventTypes.HasFlag(EventType.MouseEnterExit)) { OnMouseExit(); MouseExit?.Invoke(this, EventArgs.Empty); } } return(false); } var ret = false; MouseDirectlyOver = true; if (!MouseInBounds) { MouseInBounds = true; if (RegisterEventTypes.HasFlag(EventType.MouseEnterExit)) { OnMouseEnter(); MouseEnter?.Invoke(this, EventArgs.Empty); ret = true; } } for (var index = children.Count - 1; index >= 0; --index) { if (children[index].HandledMouseMove()) { if (MouseDirectlyOver) { MouseDirectlyOver = false; } return(true); } } return(ret); }