|
@@ -15224,7 +15224,7 @@ static bool ImGui::UpdateTryMergeWindowIntoHostViewports(ImGuiWindow* window)
|
|
|
|
|
|
// Translate Dear ImGui windows when a Host Viewport has been moved
|
|
|
// (This additionally keeps windows at the same place when ImGuiConfigFlags_ViewportsEnable is toggled!)
|
|
|
-void ImGui::TranslateWindowsInViewport(ImGuiViewportP* viewport, const ImVec2& old_pos, const ImVec2& new_pos)
|
|
|
+void ImGui::TranslateWindowsInViewport(ImGuiViewportP* viewport, const ImVec2& old_pos, const ImVec2& new_pos, const ImVec2& old_size, const ImVec2& new_size)
|
|
|
{
|
|
|
ImGuiContext& g = *GImGui;
|
|
|
IM_ASSERT(viewport->Window == NULL && (viewport->Flags & ImGuiViewportFlags_CanHostOtherWindows));
|
|
@@ -15238,7 +15238,7 @@ void ImGui::TranslateWindowsInViewport(ImGuiViewportP* viewport, const ImVec2& o
|
|
|
ImRect test_still_fit_rect(old_pos, old_pos + viewport->Size);
|
|
|
ImVec2 delta_pos = new_pos - old_pos;
|
|
|
for (ImGuiWindow* window : g.Windows) // FIXME-OPT
|
|
|
- if (translate_all_windows || (window->Viewport == viewport && test_still_fit_rect.Contains(window->Rect())))
|
|
|
+ if (translate_all_windows || (window->Viewport == viewport && (old_size == new_size || test_still_fit_rect.Contains(window->Rect()))))
|
|
|
TranslateWindow(window, delta_pos);
|
|
|
}
|
|
|
|
|
@@ -15415,7 +15415,7 @@ static void ImGui::UpdateViewportsNewFrame()
|
|
|
// (This additionally keeps windows at the same place when ImGuiConfigFlags_ViewportsEnable is toggled!)
|
|
|
const ImVec2 viewport_delta_pos = viewport->Pos - viewport->LastPos;
|
|
|
if ((viewport->Flags & ImGuiViewportFlags_CanHostOtherWindows) && (viewport_delta_pos.x != 0.0f || viewport_delta_pos.y != 0.0f))
|
|
|
- TranslateWindowsInViewport(viewport, viewport->LastPos, viewport->Pos);
|
|
|
+ TranslateWindowsInViewport(viewport, viewport->LastPos, viewport->Pos, viewport->LastSize, viewport->Size);
|
|
|
|
|
|
// Update DPI scale
|
|
|
float new_dpi_scale;
|
|
@@ -15525,6 +15525,7 @@ static void ImGui::UpdateViewportsEndFrame()
|
|
|
{
|
|
|
ImGuiViewportP* viewport = g.Viewports[i];
|
|
|
viewport->LastPos = viewport->Pos;
|
|
|
+ viewport->LastSize = viewport->Size;
|
|
|
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;
|
|
@@ -15571,7 +15572,7 @@ ImGuiViewportP* ImGui::AddUpdateViewport(ImGuiWindow* window, ImGuiID id, const
|
|
|
viewport->ID = id;
|
|
|
viewport->Idx = g.Viewports.Size;
|
|
|
viewport->Pos = viewport->LastPos = pos;
|
|
|
- viewport->Size = size;
|
|
|
+ viewport->Size = viewport->LastSize = size;
|
|
|
viewport->Flags = flags;
|
|
|
UpdateViewportPlatformMonitor(viewport);
|
|
|
g.Viewports.push_back(viewport);
|