Beispiel #1
0
        //----------------------------------------------------------------------
        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");
        }
Beispiel #2
0
        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;
        }