public override void SetCursorPosition()
 {
     if (FocusedWidget != null)
     {
         FocusedWidget.SetCursorPosition();
     }
 }
Esempio n. 2
0
        // *** Heartbeat Service ***

        void Heartbeat()
        {
            bool invalidateFlag = false;

            invalidateFlag = FocusedWidget != null && FocusedWidget.OnHeartBeat();
            foreach (Widget w in HeartbeatSubscriptions)
            {
                if (w.Visible && w != FocusedWidget)
                {
                    invalidateFlag |= w.OnHeartBeat();
                }
            }
            if (invalidateFlag)
            {
                Invalidate(1);
            }

            if (!TooltipDelayAction.Enabled)
            {
                if (m_Tooltip.Text != null)
                {
                    TooltipDelayAction.Start();
                }
            }
        }
Esempio n. 3
0
 public override void OnKeyUp(KeyboardKeyEventArgs e)
 {
     if (FocusedWidget != null)
     {
         FocusedWidget.OnKeyUp(e);
     }
 }
Esempio n. 4
0
        public override bool OnKeyPress(KeyPressEventArgs e)
        {
            if (FocusedWidget != null && FocusedWidget.OnKeyPress(e))
            {
                return(true);
            }

            return(base.OnKeyPress(e));
        }
Esempio n. 5
0
        //----------------------------------------------------------------------
        public void Focus(Widget _widget)
        {
            Debug.Assert(_widget.Screen == this);

            mbHasActivatedFocusedWidget = false;
            if (FocusedWidget != null && FocusedWidget != _widget)
            {
                FocusedWidget.OnBlur();
            }

            if (FocusedWidget != _widget)
            {
                FocusedWidget = _widget;
                FocusedWidget.OnFocus();
            }
        }
Esempio n. 6
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");
        }
        public override bool ProcessKey(int key)
        {
            base.ProcessKey(key);

            switch (key)
            {
            case 259:             // up
                Invalid = true;
                return(Previous());

            case 258:             // down
                Invalid = true;
                return(Next());
            }

            if (FocusedWidget != null)
            {
                return(FocusedWidget.ProcessKey(key));
            }

            return(false);
        }
Esempio n. 8
0
        //----------------------------------------------------------------------
        public void HandleInput()
        {
            //------------------------------------------------------------------
            // Make sure we don't hold references to orphaned widgets
            if (FocusedWidget != null && FocusedWidget.IsOrphan)
            {
                FocusedWidget = null;
                mbHasActivatedFocusedWidget = false;
            }

            if (HoveredWidget != null && HoveredWidget.IsOrphan)
            {
                Game.SetCursor(MouseCursor.Default);
                HoveredWidget = null;
            }

            if (mClickedWidget != null && mClickedWidget.IsOrphan)
            {
                mClickedWidget = null;
            }

            //------------------------------------------------------------------
            Point mouseHitPoint = new Point(
                (int)(Game.InputMgr.MouseState.X / Resolution.ScaleFactor),
                (int)((Game.InputMgr.MouseState.Y - Game.GraphicsDevice.Viewport.Y) / Resolution.ScaleFactor)
                );

            if (!IsActive)
            {
                if (HoveredWidget != null)
                {
                    HoveredWidget.OnMouseOut(mouseHitPoint);
                    HoveredWidget = null;
                }

                if (mClickedWidget != null)
                {
                    mClickedWidget.OnMouseUp(mouseHitPoint, miClickedWidgetMouseButton);
                    mClickedWidget = null;
                }

                return;
            }

            //------------------------------------------------------------------
            // Mouse buttons
            bool bHasMouseEvent = false;

            if (miIgnoreClickFrames == 0)
            {
                for (int iButton = 0; iButton < 3; iButton++)
                {
                    if (Game.InputMgr.WasMouseButtonJustPressed(iButton))
                    {
                        bHasMouseEvent = true;

                        if (mClickedWidget == null)
                        {
                            miClickedWidgetMouseButton = iButton;

                            Widget hitWidget = null;

                            if (FocusedWidget != null)
                            {
                                hitWidget = FocusedWidget.HitTest(mouseHitPoint);
                            }

                            if (hitWidget == null)
                            {
                                hitWidget = Root.HitTest(mouseHitPoint);
                            }

                            while (hitWidget != null && !hitWidget.OnMouseDown(mouseHitPoint, iButton))
                            {
                                hitWidget = hitWidget.Parent;
                            }

                            mClickedWidget = hitWidget;
                        }
                    }
                }

                if (Game.InputMgr.WasMouseJustDoubleClicked())
                {
                    bHasMouseEvent = true;

                    Widget widget = FocusedWidget == null ? null : FocusedWidget.HitTest(mouseHitPoint);
                    if (widget != null)
                    {
                        bool bPressed;

                        switch (Game.InputMgr.PrimaryMouseButton)
                        {
                        case 0:
                            bPressed = Game.InputMgr.MouseState.LeftButton == ButtonState.Pressed;
                            break;

                        case 2:
                            bPressed = Game.InputMgr.MouseState.RightButton == ButtonState.Pressed;
                            break;

                        default:
                            throw new NotSupportedException();
                        }

                        if (bPressed)
                        {
                            mClickedWidget             = widget;
                            miClickedWidgetMouseButton = Game.InputMgr.PrimaryMouseButton;
                        }

                        if (widget.OnMouseDoubleClick(mouseHitPoint))
                        {
                            miIgnoreClickFrames = 3;
                        }
                    }
                }
            }
            else
            {
                miIgnoreClickFrames--;
            }

            for (int iButton = 0; iButton < 3; iButton++)
            {
                if (Game.InputMgr.WasMouseButtonJustReleased(iButton))
                {
                    bHasMouseEvent = true;

                    if (mClickedWidget != null && iButton == miClickedWidgetMouseButton)
                    {
                        mClickedWidget.OnMouseUp(mouseHitPoint, iButton);
                        mClickedWidget = null;
                    }
                }
            }

            if (!bHasMouseEvent)
            {
                Widget hoveredWidget = (FocusedWidget == null ? null : FocusedWidget.HitTest(mouseHitPoint)) ?? Root.HitTest(mouseHitPoint);

                if (mouseHitPoint != mPreviousMouseHitPoint)
                {
                    if (mClickedWidget == null)
                    {
                        if (hoveredWidget != null && hoveredWidget == HoveredWidget)
                        {
                            HoveredWidget.OnMouseMove(mouseHitPoint);
                        }
                        else
                        {
                            if (HoveredWidget != null)
                            {
                                HoveredWidget.OnMouseOut(mouseHitPoint);
                            }

                            HoveredWidget = hoveredWidget;
                            if (HoveredWidget != null)
                            {
                                HoveredWidget.OnMouseEnter(mouseHitPoint);
                            }
                        }
                    }
                    else
                    {
                        mClickedWidget.OnMouseMove(mouseHitPoint);
                    }
                }
            }

            // Mouse wheel
            int iWheelDelta = Game.InputMgr.GetMouseWheelDelta();

            if (iWheelDelta != 0)
            {
                Widget hoveredWidget = (FocusedWidget == null ? null : FocusedWidget.HitTest(mouseHitPoint)) ?? Root.HitTest(mouseHitPoint);

                if (hoveredWidget != null)
                {
                    hoveredWidget.OnMouseWheel(mouseHitPoint, iWheelDelta);
                }
            }

            mPreviousMouseHitPoint = mouseHitPoint;

            //------------------------------------------------------------------
            // Keyboard
            if (FocusedWidget != null)
            {
                foreach (char character in Game.InputMgr.EnteredText)
                {
                    FocusedWidget.OnTextEntered(character);
                }

                if (Game.InputMgr.JustPressedOSKeys.Contains(OSKey.Enter) || Game.InputMgr.JustPressedOSKeys.Contains(OSKey.Return) || Game.InputMgr.JustPressedOSKeys.Contains(OSKey.Space))
                {
                    if (FocusedWidget.OnActivateDown())
                    {
                        mbHasActivatedFocusedWidget = true;
                    }
                }
                else
                if (Game.InputMgr.JustReleasedOSKeys.Contains(OSKey.Enter) || Game.InputMgr.JustReleasedOSKeys.Contains(OSKey.Return) || Game.InputMgr.JustReleasedOSKeys.Contains(OSKey.Space))
                {
                    if (mbHasActivatedFocusedWidget)
                    {
                        FocusedWidget.OnActivateUp();
                        mbHasActivatedFocusedWidget = false;
                    }
                }

                if (Game.InputMgr.WasKeyJustPressed(Keys.Left))
                {
                    FocusedWidget.OnPadMove(UI.Direction.Left);
                }
                if (Game.InputMgr.WasKeyJustPressed(Keys.Right))
                {
                    FocusedWidget.OnPadMove(UI.Direction.Right);
                }
                if (Game.InputMgr.WasKeyJustPressed(Keys.Up))
                {
                    FocusedWidget.OnPadMove(UI.Direction.Up);
                }
                if (Game.InputMgr.WasKeyJustPressed(Keys.Down))
                {
                    FocusedWidget.OnPadMove(UI.Direction.Down);
                }

                foreach (Keys key in Game.InputMgr.JustPressedKeys)
                {
                    FocusedWidget.OnKeyPress(key);
                }

                foreach (var key in Game.InputMgr.JustPressedOSKeys)
                {
                    FocusedWidget.OnOSKeyPress(key);
                }
            }
        }
Esempio n. 9
0
        public override bool OnKeyDown(KeyboardKeyEventArgs e)
        {
            //Console.WriteLine (e.Key);

            if (SelectedMenu != null)
            {
                if (e.Key == Key.Escape)
                {
                    SelectedMenu = null;
                }
                else
                {
                    if (ModifierKeys.AltPressed && SelectedMenu.OnKeyDown(e))
                    {
                        Invalidate();
                        return(true);
                    }
                }
            }

            /***
             * else if (e.Key == Key.F10) {
             *      Widget wmenu = MainMenuWidget;
             *      if (wmenu != null) {
             *              wmenu.Select ();
             *      }
             *      if (base.OnKeyDown (e)) {
             *              Invalidate ();
             *              return true;
             *      }
             * }
             ***/

            Widget formerlyFocusedWidget = FocusedWidget;

            try {
                if (FocusedWidget != null && FocusedWidget != this && FocusedWidget.OnKeyDown(e))
                {
                    return(true);
                }

                if (e.Key == OpenTK.Input.Key.Tab)
                {
                    if (e.Shift)
                    {
                        SelectPrevWidget();
                    }
                    else
                    {
                        SelectNextWidget();
                    }

                    //this.LogVerbose ("Widget focused: {0}", FocusedWidget != null ? FocusedWidget.Name : "null");
                    return(true);
                }

                // bubble up from focused
                if (FocusedWidget != null)
                {
                    Widget parent = FocusedWidget.Parent;
                    while (parent != null && parent != this)
                    {
                        if (parent.OnKeyDown(e))
                        {
                            return(true);
                        }
                        parent = parent.Parent;
                    }
                }

                return(base.OnKeyDown(e));
            } catch (Exception ex) {
                ex.LogError();
            } finally {
                if ((FocusedWidget == null || FocusedWidget == this) && formerlyFocusedWidget != null && !formerlyFocusedWidget.IsDisposed)
                {
                    formerlyFocusedWidget.Focus();
                }
            }

            return(false);
        }