コード例 #1
0
        public override InputMessageResult HandleMessage(InputMessage message)
        {
            var context = new UIElementCallbackContext(_windowManager, _game);

            switch (message.MessageType)
            {
            case InputMessageType.MouseMove:
            {
                var element = _windowManager.FindWindow(message.Value.MousePosition);
                if (element != _lastHighlightedElement)
                {
                    if (_lastHighlightedElement != null)
                    {
                        _lastHighlightedElement.InputCallback.Invoke(
                            _lastHighlightedElement,
                            new WndWindowMessage(WndWindowMessageType.MouseExit, _lastHighlightedElement),
                            context);
                    }
                    _lastHighlightedElement = element;
                    if (element != null)
                    {
                        element.InputCallback.Invoke(
                            element,
                            new WndWindowMessage(WndWindowMessageType.MouseEnter, element),
                            context);
                    }
                }
                if (element != null)
                {
                    var mousePosition = element?.PointToClient(message.Value.MousePosition);
                    element.InputCallback.Invoke(
                        element,
                        new WndWindowMessage(WndWindowMessageType.MouseMove, element, mousePosition),
                        context);
                    return(InputMessageResult.Handled);
                }
                break;
            }

            case InputMessageType.MouseLeftButtonDown:
            {
                var element = _windowManager.FindWindow(message.Value.MousePosition);
                if (element != null)
                {
                    var mousePosition = element.PointToClient(message.Value.MousePosition);
                    element.InputCallback.Invoke(
                        element,
                        new WndWindowMessage(WndWindowMessageType.MouseDown, element, mousePosition),
                        context);
                    return(InputMessageResult.Handled);
                }
                break;
            }

            case InputMessageType.MouseLeftButtonUp:
            {
                var element = _windowManager.FindWindow(message.Value.MousePosition);
                if (element != null)
                {
                    element.InputCallback.Invoke(
                        element,
                        new WndWindowMessage(WndWindowMessageType.MouseUp, element, message.Value.MousePosition),
                        context);
                    return(InputMessageResult.Handled);
                }
                break;
            }

            case InputMessageType.KeyDown:
            {
                if (message.Value.Key == Key.Escape && _windowManager.OpenWindowCount > 1)
                {
                    _windowManager.PopWindow();
                    return(InputMessageResult.Handled);
                }
                break;
            }
            }

            return(InputMessageResult.NotHandled);
        }
コード例 #2
0
        public override InputMessageResult HandleMessage(InputMessage message)
        {
            var context = new UIElementCallbackContext(_windowManager);

            switch (message.MessageType)
            {
            case InputMessageType.MouseMove:
            {
                var element = _windowManager.FindWindow(new Vector2(message.MouseX.Value, message.MouseY.Value));
                if (element != _lastHighlightedElement)
                {
                    if (_lastHighlightedElement != null)
                    {
                        _lastHighlightedElement.InputCallback.Invoke(
                            _lastHighlightedElement,
                            new WndWindowMessage(WndWindowMessageType.MouseExit, _lastHighlightedElement),
                            context);
                    }
                    _lastHighlightedElement = element;
                    if (element != null)
                    {
                        element.InputCallback.Invoke(
                            element,
                            new WndWindowMessage(WndWindowMessageType.MouseEnter, element),
                            context);
                    }
                }
                if (element != null)
                {
                    element.InputCallback.Invoke(
                        element,
                        new WndWindowMessage(WndWindowMessageType.MouseMove, element),
                        context);
                    return(InputMessageResult.Handled);
                }
                break;
            }

            case InputMessageType.MouseDown:
            {
                var element = _windowManager.FindWindow(new Vector2(message.MouseX.Value, message.MouseY.Value));
                if (element != null)
                {
                    element.InputCallback.Invoke(
                        element,
                        new WndWindowMessage(WndWindowMessageType.MouseDown, element),
                        context);
                    return(InputMessageResult.Handled);
                }
                break;
            }

            case InputMessageType.MouseUp:
            {
                var element = _windowManager.FindWindow(new Vector2(message.MouseX.Value, message.MouseY.Value));
                if (element != null)
                {
                    element.InputCallback.Invoke(
                        element,
                        new WndWindowMessage(WndWindowMessageType.MouseUp, element),
                        context);
                    return(InputMessageResult.Handled);
                }
                break;
            }
            }

            return(InputMessageResult.NotHandled);
        }