Exemplo n.º 1
0
        internal void NewFrame()
        {
            current = this;
            GUIContext    g = this.uiContext;
            WindowManager w = g.WindowManager;

            if (!g.Initialized)
            {
                // Initialize on first frame
                g.Initialized = true;
            }

            // Time
            g.DeltaTime = Time.deltaTime;
            g.Time     += g.DeltaTime;
            g.FrameCount++;

            //fps
            var detlaTime = g.Time - g.lastFPSUpdateTime;

            g.lastFrameCount++;
            if (detlaTime > 1000)
            {
                g.fps               = (int)g.lastFrameCount;
                g.lastFrameCount    = 0;
                g.lastFPSUpdateTime = g.Time;
            }

            #region Input

            #region mouse position
            if (Mouse.Instance.Position.X < 0 && Mouse.Instance.Position.Y < 0)
            {
                Mouse.Instance.Position = new Point(-9999.0f, -9999.0f);
            }
            if ((Mouse.Instance.Position.X < 0 && Mouse.Instance.Position.Y < 0) || (Mouse.Instance.LastPosition.X < 0 && Mouse.Instance.LastPosition.Y < 0))   // if mouse just appeared or disappeared (negative coordinate) we cancel out movement in MouseDelta
            {
                Mouse.Instance.MouseDelta = Vector.Zero;
            }
            else
            {
                Mouse.Instance.MouseDelta = Mouse.Instance.Position - Mouse.Instance.LastPosition;
            }
            Mouse.Instance.LastPosition = Mouse.Instance.Position;
            #endregion

            #region mouse left button
            Mouse.Instance.LeftButtonPressed          = Mouse.Instance.LeftButtonState == KeyState.Down && Mouse.Instance.LeftButtonDownDuration < 0;
            Mouse.Instance.LeftButtonReleased         = Mouse.Instance.LeftButtonState == KeyState.Up && Mouse.Instance.LeftButtonDownDuration >= 0;
            Mouse.Instance.LeftButtonDownDurationPrev = Mouse.Instance.LeftButtonDownDuration;
            Mouse.Instance.LeftButtonDownDuration     = Mouse.Instance.LeftButtonState == KeyState.Down ? (Mouse.Instance.LeftButtonDownDuration < 0 ? 0 : Mouse.Instance.LeftButtonDownDuration + g.DeltaTime) : -1;
            Mouse.Instance.LeftButtonDoubleClicked    = false;
            if (Mouse.Instance.LeftButtonPressed)
            {
                if (g.Time - Mouse.Instance.LeftButtonClickedTime < Mouse.DoubleClickIntervalTimeSpan)
                {
                    if ((Mouse.Instance.Position - Mouse.Instance.LeftButtonPressedPos).LengthSquared < Mouse.DoubleClickMaxDistance * Mouse.DoubleClickMaxDistance)
                    {
                        Mouse.Instance.LeftButtonDoubleClicked = true;
                    }
                    Mouse.Instance.LeftButtonClickedTime = -99999; // so the third click isn't turned into a double-click
                }
                else
                {
                    Mouse.Instance.LeftButtonClickedTime = g.Time;
                }
                Mouse.Instance.LeftButtonPressedPos   = Mouse.Instance.Position;
                Mouse.Instance.DragMaxDiatanceSquared = 0;
            }
            else if (Mouse.Instance.LeftButtonState == KeyState.Down)
            {
                Mouse.Instance.DragMaxDiatanceSquared = Math.Max(Mouse.Instance.DragMaxDiatanceSquared, (Mouse.Instance.Position - Mouse.Instance.LeftButtonPressedPos).LengthSquared);
            }
            if (Mouse.Instance.LeftButtonPressed)
            {
                ++Mouse.Instance.LeftButtonPressedTimes;
            }
            if (Mouse.Instance.LeftButtonReleased)
            {
                ++Mouse.Instance.LeftButtonReleasedTimes;
            }
            if (Mouse.Instance.LeftButtonDoubleClicked)
            {
                ++Mouse.Instance.LeftButtonDoubleClickedTimes;
            }
            #endregion

            #region mouse right button
            Mouse.Instance.RightButtonPressed      = Mouse.Instance.RightButtonState == KeyState.Down && Mouse.Instance.RightButtonDownDuration < 0;
            Mouse.Instance.RightButtonReleased     = Mouse.Instance.RightButtonState == KeyState.Up && Mouse.Instance.RightButtonDownDuration >= 0;
            Mouse.Instance.RightButtonDownDuration = Mouse.Instance.RightButtonState == KeyState.Down ? (Mouse.Instance.RightButtonDownDuration < 0 ? 0 : Mouse.Instance.RightButtonDownDuration + g.DeltaTime) : -1;

            if (Mouse.Instance.RightButtonPressed)
            {
                ++Mouse.Instance.RightButtonPressedTimes;
            }
            if (Mouse.Instance.RightButtonReleased)
            {
                ++Mouse.Instance.RightButtonReleasedTimes;
            }
            #endregion

            #endregion

            // Clear reference to active widget if the widget isn't alive anymore
            g.HoveredIdPreviousFrame = g.HoverId;
            g.HoverId             = 0;
            g.HoverIdAllowOverlap = false;
            if (!g.ActiveIdIsAlive && g.ActiveIdPreviousFrame == g.ActiveId && g.ActiveId != 0)
            {
                g.SetActiveID(0);
            }
            g.ActiveIdPreviousFrame   = g.ActiveId;
            g.ActiveIdIsAlive         = false;
            g.ActiveIdIsJustActivated = false;

            w.NewFrame(g);

            // Create implicit window - we will only render it if the user has added something to it.
            GUI.Begin("Debug", ref this.debugWindowOpen, (0, 0), (200, 140), 0.8);
        }
Exemplo n.º 2
0
        internal static void NewFrame()
        {
            GUIContext    g = Application.ImGuiContext;
            WindowManager w = g.WindowManager;

            if (!g.Initialized)
            {
                // Initialize on first frame
                g.Initialized = true;
            }

            g.ConfigFlagsLastFrame = g.ConfigFlagsCurrFrame;
            g.ConfigFlagsCurrFrame = IO.ConfigFlags;

            // Time
            g.DeltaTime = Time.deltaTime;
            g.Time     += g.DeltaTime;
            g.FrameCount++;

            Metrics.ActiveWindows = 0;

            //fps
            var detlaTime = g.Time - g.lastFPSUpdateTime;

            g.lastFrameCount++;
            if (detlaTime > 1000)
            {
                g.fps               = (int)g.lastFrameCount;
                g.lastFrameCount    = 0;
                g.lastFPSUpdateTime = g.Time;
            }

            UpdateViewportsNewFrame();

            #region Input
            //TODO move to Mouse
            #region mouse position
            if (Mouse.Instance.Position.X < 0 && Mouse.Instance.Position.Y < 0)
            {
                Mouse.Instance.Position = new Point(-9999.0f, -9999.0f);
            }
            if ((Mouse.Instance.Position.X < 0 && Mouse.Instance.Position.Y < 0) || (Mouse.Instance.LastPosition.X < 0 && Mouse.Instance.LastPosition.Y < 0))   // if mouse just appeared or disappeared (negative coordinate) we cancel out movement in MouseDelta
            {
                Mouse.Instance.MouseDelta = Vector.Zero;
            }
            else
            {
                Mouse.Instance.MouseDelta = Mouse.Instance.Position - Mouse.Instance.LastPosition;
            }
            Mouse.Instance.LastPosition = Mouse.Instance.Position;
            #endregion

            #region mouse left button
            Mouse.Instance.LeftButtonPressed          = Mouse.Instance.LeftButtonState == KeyState.Down && Mouse.Instance.LeftButtonDownDuration < 0;
            Mouse.Instance.LeftButtonReleased         = Mouse.Instance.LeftButtonState == KeyState.Up && Mouse.Instance.LeftButtonDownDuration >= 0;
            Mouse.Instance.LeftButtonDownDurationPrev = Mouse.Instance.LeftButtonDownDuration;
            Mouse.Instance.LeftButtonDownDuration     = Mouse.Instance.LeftButtonState == KeyState.Down ? (Mouse.Instance.LeftButtonDownDuration < 0 ? 0 : Mouse.Instance.LeftButtonDownDuration + g.DeltaTime) : -1;
            Mouse.Instance.LeftButtonDoubleClicked    = false;
            if (Mouse.Instance.LeftButtonPressed)
            {
                if (g.Time - Mouse.Instance.LeftButtonClickedTime < Mouse.DoubleClickIntervalTimeSpan)
                {
                    if ((Mouse.Instance.Position - Mouse.Instance.LeftButtonPressedPosition).LengthSquared < Mouse.DoubleClickMaxDistance * Mouse.DoubleClickMaxDistance)
                    {
                        Mouse.Instance.LeftButtonDoubleClicked = true;
                    }
                    Mouse.Instance.LeftButtonClickedTime = -99999; // so the third click isn't turned into a double-click
                }
                else
                {
                    Mouse.Instance.LeftButtonClickedTime = g.Time;
                }
                Mouse.Instance.LeftButtonPressedPosition = Mouse.Instance.Position;
                Mouse.Instance.DragMaxDistanceSquared    = 0;
            }
            else if (Mouse.Instance.LeftButtonState == KeyState.Down)
            {
                Mouse.Instance.DragMaxDistanceSquared = Math.Max(Mouse.Instance.DragMaxDistanceSquared, (Mouse.Instance.Position - Mouse.Instance.LeftButtonPressedPosition).LengthSquared);
            }
            if (Mouse.Instance.LeftButtonPressed)
            {
                ++Mouse.Instance.LeftButtonPressedTimes;
            }
            if (Mouse.Instance.LeftButtonReleased)
            {
                ++Mouse.Instance.LeftButtonReleasedTimes;
            }
            if (Mouse.Instance.LeftButtonDoubleClicked)
            {
                ++Mouse.Instance.LeftButtonDoubleClickedTimes;
            }
            #endregion

            #region mouse right button
            Mouse.Instance.RightButtonPressed      = Mouse.Instance.RightButtonState == KeyState.Down && Mouse.Instance.RightButtonDownDuration < 0;
            Mouse.Instance.RightButtonReleased     = Mouse.Instance.RightButtonState == KeyState.Up && Mouse.Instance.RightButtonDownDuration >= 0;
            Mouse.Instance.RightButtonDownDuration = Mouse.Instance.RightButtonState == KeyState.Down ? (Mouse.Instance.RightButtonDownDuration < 0 ? 0 : Mouse.Instance.RightButtonDownDuration + g.DeltaTime) : -1;

            if (Mouse.Instance.RightButtonPressed)
            {
                ++Mouse.Instance.RightButtonPressedTimes;
            }
            if (Mouse.Instance.RightButtonReleased)
            {
                ++Mouse.Instance.RightButtonReleasedTimes;
            }
            #endregion

            #endregion

            // Update HoverId data
            // 1. record data related to previous frame
            // 2. reset
            g.HoverId                = 0;
            g.HoverIdAllowOverlap    = false;
            g.HoveredIdPreviousFrame = g.HoverId;

            // Update ActiveId data
            // 1. record data related to previous frame
            // 2. reset
            if (g.ActiveIdIsAlive != g.ActiveId && g.ActiveIdPreviousFrame == g.ActiveId && g.ActiveId != 0)
            {//Clear reference to active widget if the widget isn't alive anymore
                g.SetActiveID(0, null);
            }
            g.ActiveIdPreviousFrame        = g.ActiveId;
            g.ActiveIdIsAlive              = 0;
            g.ActiveIdPreviousFrameIsAlive = false;
            g.ActiveIdIsJustActivated      = false;

            w.NewFrame(g);

            foreach (var form in w.Viewports)
            {
                if (!form.PlatformWindowCreated)
                {
                    continue;
                }
                form.ForeBackGroundRenderOpen();
            }

            // [DEBUG] Item picker tool - start with DebugStartItemPicker()
            // useful to visually select an item and break into its call-stack.
            UpdateDebugToolItemPicker();

            // Create implicit debug window - we will only render it if the user has added something to it.
            GUI.Begin("Debug##Default", Application.InitialDebugWindowRect);
        }