Esempio n. 1
0
        private void Update(bool hasFocus, GameTime gt)
        {
            // We should only process things that require input if the game is focused, the form is visible, and the form is enabled.
            if (Enabled && Visible && hasFocus)
            {
                if (MouseStateManager.MouseStateNow.X >= Bounds.Left &&
                    MouseStateManager.MouseStateNow.X < Bounds.Right &&
                    MouseStateManager.MouseStateNow.Y >= Bounds.Top &&
                    MouseStateManager.MouseStateNow.Y < Bounds.Bottom)
                {
                    if (MouseStateManager.MouseStateNow.LeftButton == ButtonState.Pressed ||
                        MouseStateManager.MouseStateNow.RightButton == ButtonState.Pressed)
                    {
                        Select();
                        SelectControl(this, MouseStateManager.MouseStateNow);
                    }

                    if (MouseStateManager.WentUp(MouseButtons.Left))
                    {
                        if (DateTime.UtcNow - _clickStart <= _clickTrigger)
                        {
                            OnClick(new MouseEventArgs(MouseStateManager.ButtonsDown(), 1, MouseStateManager.MouseStateNow.X, MouseStateManager.MouseStateNow.Y, 0));
                        }

                        _inDrag = false;

                        OnMouseUp(new MouseEventArgs(MouseButtons.Left, 0, MouseStateManager.MouseStateNow.X, MouseStateManager.MouseStateNow.Y, MouseStateManager.MouseStateNow.ScrollWheelValue - MouseStateManager.MouseStatePrevious.ScrollWheelValue));
                    }
                    else if (MouseStateManager.WentDown(MouseButtons.Left))
                    {
                        _clickStart = DateTime.UtcNow;

                        if (ShowTitleBar)
                        {
                            if (MouseStateManager.MouseStateNow.X >= Bounds.Left &&
                                MouseStateManager.MouseStateNow.X < Bounds.Right &&
                                MouseStateManager.MouseStateNow.Y >= Location.Y &&
                                MouseStateManager.MouseStateNow.Y < Location.Y + TitleBarHeight)
                            {
                                _dragMouseStart = new EFD.Point(MouseStateManager.MouseStateNow.X, MouseStateManager.MouseStateNow.Y);
                                _dragPosStart   = Location;
                                _inDrag         = true;
                            }
                        }

                        OnMouseDown(new MouseEventArgs(MouseButtons.Left, 0, MouseStateManager.MouseStateNow.X, MouseStateManager.MouseStateNow.Y, MouseStateManager.MouseStateNow.ScrollWheelValue - MouseStateManager.MouseStatePrevious.ScrollWheelValue));
                    }
                }

                if (MouseStateManager.MouseStateNow.LeftButton == ButtonState.Pressed)
                {
                    if (AllowDrag && _inDrag && ShowTitleBar)
                    {
                        Location = _dragPosStart + new EFD.Size(MouseStateManager.MouseStateNow.X - _dragMouseStart.X, MouseStateManager.MouseStateNow.Y - _dragMouseStart.Y);
                    }
                }

                foreach (var c in Controls)
                {
                    var updateableControl = c as IUpdateableControl;
                    updateableControl?.Update(c == ActiveControl, gt);
                }
            }
            else if (Enabled && Visible)
            {
                // Down here we can do any updating that doesn't require input. The form must be both Enabled and Visible for us to do anything.
            }
        }