瀏覽代碼

Viewports: Comments, removed unnecessary use of ViewportFrontMostStampCount (the LastFrontMostStampCount is enough)

ocornut 5 年之前
父節點
當前提交
6bc526676c
共有 2 個文件被更改,包括 6 次插入9 次删除
  1. 6 7
      imgui.cpp
  2. 0 2
      imgui_internal.h

+ 6 - 7
imgui.cpp

@@ -3493,7 +3493,7 @@ void ImGui::UpdateMouseMovingWindowNewFrame()
                 g.MouseViewport = moving_window->Viewport;
                 g.MouseViewport = moving_window->Viewport;
 
 
             // Clear the NoInput window flag set by the Viewport system
             // Clear the NoInput window flag set by the Viewport system
-            moving_window->Viewport->Flags &= ~ImGuiViewportFlags_NoInputs;
+            moving_window->Viewport->Flags &= ~ImGuiViewportFlags_NoInputs; // FIXME-VIEWPORT: Test engine managed to crash here because Viewport was NULL.
 
 
             ClearActiveID();
             ClearActiveID();
             g.MovingWindow = NULL;
             g.MovingWindow = NULL;
@@ -11523,6 +11523,7 @@ void ImGui::UpdatePlatformWindows()
 
 
     // Update our implicit z-order knowledge of platform windows, which is used when the back-end cannot provide io.MouseHoveredViewport.
     // Update our implicit z-order knowledge of platform windows, which is used when the back-end cannot provide io.MouseHoveredViewport.
     // When setting Platform_GetWindowFocus, it is expected that the platform back-end can handle calls without crashing if it doesn't have data stored.
     // When setting Platform_GetWindowFocus, it is expected that the platform back-end can handle calls without crashing if it doesn't have data stored.
+    // FIXME-VIEWPORT: We should use this information to also set dear imgui-side focus, allowing us to handle os-level alt+tab.
     if (g.PlatformIO.Platform_GetWindowFocus != NULL)
     if (g.PlatformIO.Platform_GetWindowFocus != NULL)
     {
     {
         ImGuiViewportP* focused_viewport = NULL;
         ImGuiViewportP* focused_viewport = NULL;
@@ -11533,12 +11534,10 @@ void ImGui::UpdatePlatformWindows()
                 if (g.PlatformIO.Platform_GetWindowFocus(viewport))
                 if (g.PlatformIO.Platform_GetWindowFocus(viewport))
                     focused_viewport = viewport;
                     focused_viewport = viewport;
         }
         }
-        if (focused_viewport && g.PlatformLastFocusedViewport != focused_viewport->ID)
-        {
-            if (focused_viewport->LastFrontMostStampCount != g.ViewportFrontMostStampCount)
-                focused_viewport->LastFrontMostStampCount = ++g.ViewportFrontMostStampCount;
-            g.PlatformLastFocusedViewport = focused_viewport->ID;
-        }
+
+        // Store a tag so we can infer z-order easily from all our windows
+        if (focused_viewport && focused_viewport->LastFrontMostStampCount != g.ViewportFrontMostStampCount)
+            focused_viewport->LastFrontMostStampCount = ++g.ViewportFrontMostStampCount;
     }
     }
 }
 }
 
 

+ 0 - 2
imgui_internal.h

@@ -1353,7 +1353,6 @@ struct ImGuiContext
     ImGuiViewportP*         CurrentViewport;                    // We track changes of viewport (happening in Begin) so we can call Platform_OnChangedViewport()
     ImGuiViewportP*         CurrentViewport;                    // We track changes of viewport (happening in Begin) so we can call Platform_OnChangedViewport()
     ImGuiViewportP*         MouseViewport;
     ImGuiViewportP*         MouseViewport;
     ImGuiViewportP*         MouseLastHoveredViewport;           // Last known viewport that was hovered by mouse (even if we are not hovering any viewport any more) + honoring the _NoInputs flag.
     ImGuiViewportP*         MouseLastHoveredViewport;           // Last known viewport that was hovered by mouse (even if we are not hovering any viewport any more) + honoring the _NoInputs flag.
-    ImGuiID                 PlatformLastFocusedViewport;        // Record of last focused platform window/viewport, when this changes we stamp the viewport as front-most
     int                     ViewportFrontMostStampCount;        // Every time the front-most window changes, we stamp its viewport with an incrementing counter
     int                     ViewportFrontMostStampCount;        // Every time the front-most window changes, we stamp its viewport with an incrementing counter
 
 
     // Gamepad/keyboard Navigation
     // Gamepad/keyboard Navigation
@@ -1558,7 +1557,6 @@ struct ImGuiContext
         CurrentDpiScale = 0.0f;
         CurrentDpiScale = 0.0f;
         CurrentViewport = NULL;
         CurrentViewport = NULL;
         MouseViewport = MouseLastHoveredViewport = NULL;
         MouseViewport = MouseLastHoveredViewport = NULL;
-        PlatformLastFocusedViewport = 0;
         ViewportFrontMostStampCount = 0;
         ViewportFrontMostStampCount = 0;
 
 
         NavWindow = NULL;
         NavWindow = NULL;