예제 #1
0
        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);
        }
예제 #2
0
        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);
        }
예제 #3
0
        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);
        }
예제 #4
0
        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);
        }
예제 #5
0
        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);
        }
예제 #6
0
        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);
        }