//---------------------------------------------------------------------- public void Draw() { Game.SpriteBatch.Begin(SpriteSortMode.Deferred, null, null, null, null, null, Game.SpriteMatrix); Root.Draw(); if (FocusedWidget != null && IsActive) { FocusedWidget.DrawFocused(); } if (HoveredWidget != null && IsActive) { HoveredWidget.DrawHovered(); } Game.SpriteBatch.End(); Debug.Assert(mlScissorRects.Count == 0, "Unbalanced calls to PushScissorRectangles"); }
private void ProcessMouseMove(int x, int y) { if (x == 0 && y == 0) { return; } _mouseX = x; _mouseY = y; foreach (var widget in _widgets) { if (widget.IgnoreInput || !widget.Visible) { continue; } if (widget.GlobalGeometry.Contains(x, y)) { if (HoveredWidget != null && HoveredWidget != widget && HoveredWidget.Hovered) { HoveredWidget.Hovered = false; HoveredWidget.ProcessMouseLeave(); _refresh = true; } var to_be_hovered = widget; if (widget.BubbleEventsToParent && widget.Parent != null) { to_be_hovered = widget.Parent; } if (!to_be_hovered.Hovered) { _refresh = true; widget.ProcessMouseEnter(); } SetHovered(to_be_hovered, true); break; } if (widget.Hovered && widget == HoveredWidget) { widget.ProcessMouseLeave(); SetHovered(widget, false); } } if (ActiveWidget != null) { if (!ActiveWidget.Draggable) { ActiveWidget.ProcessMouseMove(x - ActiveWidget.DrawX, y - ActiveWidget.DrawY); } else if (ActiveWidget.Dragging) { var dx = _mouseX - _lastMouseX; var dy = _mouseY - _lastMouseY; ActiveWidget.X += dx; ActiveWidget.Y += dy; } } else { HoveredWidget?.ProcessMouseMove(x - HoveredWidget.DrawX, y - HoveredWidget.DrawY); } _lastMouseX = _mouseX; _lastMouseY = _mouseY; }