Fix for doing multiple Begin()/End() during the same frame
diff --git a/imgui.cpp b/imgui.cpp
index 7ad8be8..05ef8c1 100644
--- a/imgui.cpp
+++ b/imgui.cpp
@@ -1833,15 +1833,13 @@
parent_window->DC.ChildWindows.push_back(window);
window->Pos = window->PosFloat = parent_window->DC.CursorPos;
window->SizeFull = size;
- if (!(flags & ImGuiWindowFlags_ComboBox))
- ImGui::PushClipRect(parent_window->ClipRectStack.back());
- else
- ImGui::PushClipRect(ImVec4(0.0f, 0.0f, g.IO.DisplaySize.x, g.IO.DisplaySize.y));
}
+
+ // Outer clipping rectangle
+ if ((flags & ImGuiWindowFlags_ChildWindow) && !(flags & ImGuiWindowFlags_ComboBox))
+ ImGui::PushClipRect(g.CurrentWindowStack[g.CurrentWindowStack.size()-2]->ClipRectStack.back());
else
- {
ImGui::PushClipRect(ImVec4(0.0f, 0.0f, g.IO.DisplaySize.x, g.IO.DisplaySize.y));
- }
// ID stack
window->IDStack.resize(0);
@@ -2082,8 +2080,16 @@
ImGui::CloseWindowButton(open);
}
}
+ else
+ {
+ // Outer clipping rectangle
+ if ((flags & ImGuiWindowFlags_ChildWindow) && !(flags & ImGuiWindowFlags_ComboBox))
+ ImGui::PushClipRect(g.CurrentWindowStack[g.CurrentWindowStack.size()-2]->ClipRectStack.back());
+ else
+ ImGui::PushClipRect(ImVec4(0.0f, 0.0f, g.IO.DisplaySize.x, g.IO.DisplaySize.y));
+ }
- // Clip rectangle
+ // Innter clipping rectangle
// We set this up after processing the resize grip so that our clip rectangle doesn't lag by a frame
const ImGuiAabb title_bar_aabb = window->TitleBarAabb();
ImVec4 clip_rect(title_bar_aabb.Min.x+0.5f, title_bar_aabb.Max.y+0.5f, window->Aabb().Max.x-1.5f, window->Aabb().Max.y-1.5f);