Viewport: Fixed minimization of main viewport leading to it being omitted from platform_io.Viewport list where the users assume it is at index 0. Fix d8ab2c1ac. It wasn't a problem when other viewports were child of the main viewport because they would all be minimized together. (#1542)

This commit is contained in:
omar 2019-01-03 20:16:40 +01:00
parent 599a52629a
commit 05bc323be0

View File

@ -7419,7 +7419,6 @@ static void ImGui::UpdateViewportsNewFrame()
ImGuiContext& g = *GImGui; ImGuiContext& g = *GImGui;
IM_ASSERT(g.PlatformIO.Viewports.Size <= g.Viewports.Size); IM_ASSERT(g.PlatformIO.Viewports.Size <= g.Viewports.Size);
// Update main viewport with current platform position and size
ImGuiViewportP* main_viewport = g.Viewports[0]; ImGuiViewportP* main_viewport = g.Viewports[0];
IM_ASSERT(main_viewport->ID == IMGUI_VIEWPORT_DEFAULT_ID); IM_ASSERT(main_viewport->ID == IMGUI_VIEWPORT_DEFAULT_ID);
IM_ASSERT(main_viewport->Window == NULL); IM_ASSERT(main_viewport->Window == NULL);
@ -7461,9 +7460,6 @@ static void ImGui::UpdateViewportsNewFrame()
const bool platform_funcs_available = (n == 0 || viewport->PlatformWindowCreated); const bool platform_funcs_available = (n == 0 || viewport->PlatformWindowCreated);
if ((g.ConfigFlagsForFrame & ImGuiConfigFlags_ViewportsEnable)) if ((g.ConfigFlagsForFrame & ImGuiConfigFlags_ViewportsEnable))
{ {
if (g.PlatformIO.Platform_GetWindowMinimized && platform_funcs_available)
viewport->PlatformWindowMinimized = g.PlatformIO.Platform_GetWindowMinimized(viewport);
// Update Position and Size (from Platform Window to ImGui) if requested. // Update Position and Size (from Platform Window to ImGui) if requested.
// We do it early in the frame instead of waiting for UpdatePlatformWindows() to avoid a frame of lag when moving/resizing using OS facilities. // We do it early in the frame instead of waiting for UpdatePlatformWindows() to avoid a frame of lag when moving/resizing using OS facilities.
if (!viewport->PlatformWindowMinimized && platform_funcs_available) if (!viewport->PlatformWindowMinimized && platform_funcs_available)
@ -7577,6 +7573,7 @@ static void ImGui::UpdateViewportsEndFrame()
ImGuiViewportP* viewport = g.Viewports[i]; ImGuiViewportP* viewport = g.Viewports[i];
viewport->LastPos = viewport->Pos; viewport->LastPos = viewport->Pos;
if (viewport->LastFrameActive < g.FrameCount || viewport->Size.x <= 0.0f || viewport->Size.y <= 0.0f) if (viewport->LastFrameActive < g.FrameCount || viewport->Size.x <= 0.0f || viewport->Size.y <= 0.0f)
if (i > 0) // Always include main viewport in the list
continue; continue;
if (viewport->Window && !IsWindowActiveAndVisible(viewport->Window)) if (viewport->Window && !IsWindowActiveAndVisible(viewport->Window))
continue; continue;