public override InputMessageResult HandleMessage(InputMessage message) { var context = new ControlCallbackContext(_windowManager, _game); switch (message.MessageType) { case InputMessageType.MouseMove: { var mouseOverControls = _windowManager.GetControlsAtPoint(message.Value.MousePosition).ToList(); foreach (var control in _lastMouseOverControls) { if (!mouseOverControls.Contains(control)) { control.InputCallback.Invoke( control, new WndWindowMessage(WndWindowMessageType.MouseExit, control), context); } } foreach (var control in mouseOverControls) { if (!_lastMouseOverControls.Contains(control)) { control.InputCallback.Invoke( control, new WndWindowMessage(WndWindowMessageType.MouseEnter, control), context); } } _lastMouseOverControls.Clear(); _lastMouseOverControls.AddRange(mouseOverControls); foreach (var control in mouseOverControls) { var mousePosition = control.PointToClient(message.Value.MousePosition); control.InputCallback.Invoke( control, new WndWindowMessage(WndWindowMessageType.MouseMove, control, mousePosition), context); } return(mouseOverControls.Count > 0 ? InputMessageResult.Handled : InputMessageResult.NotHandled); } case InputMessageType.MouseLeftButtonDown: { var element = _windowManager.GetControlAtPoint(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.GetControlAtPoint(message.Value.MousePosition); if (element != null) { var mousePosition = element.PointToClient(message.Value.MousePosition); element.InputCallback.Invoke( element, new WndWindowMessage(WndWindowMessageType.MouseUp, element, 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); }
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); }