|
@@ -5463,10 +5463,6 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
|
|
|
window->ContentsRegionRect.Max.x = window->Pos.x - window->Scroll.x - window->WindowPadding.x + (window->SizeContentsExplicit.x != 0.0f ? window->SizeContentsExplicit.x : (window->Size.x - window->ScrollbarSizes.x + ImMin(window->ScrollbarSizes.x, window->WindowBorderSize)));
|
|
|
window->ContentsRegionRect.Max.y = window->Pos.y - window->Scroll.y - window->WindowPadding.y + (window->SizeContentsExplicit.y != 0.0f ? window->SizeContentsExplicit.y : (window->Size.y - window->ScrollbarSizes.y + ImMin(window->ScrollbarSizes.y, window->WindowBorderSize)));
|
|
|
|
|
|
- // Save clipped aabb so we can access it in constant-time in FindHoveredWindow()
|
|
|
- window->OuterRectClipped = window->Rect();
|
|
|
- window->OuterRectClipped.ClipWith(window->ClipRect);
|
|
|
-
|
|
|
// Inner rectangle
|
|
|
// We set this up after processing the resize grip so that our clip rectangle doesn't lag by a frame
|
|
|
// Note that if our window is collapsed we will end up with an inverted (~null) clipping rectangle which is the correct behavior.
|
|
@@ -5476,13 +5472,23 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
|
|
|
window->InnerMainRect.Max.x = window->Pos.x + window->Size.x - ImMax(window->ScrollbarSizes.x, window->WindowBorderSize);
|
|
|
window->InnerMainRect.Max.y = window->Pos.y + window->Size.y - ImMax(window->ScrollbarSizes.y, window->WindowBorderSize);
|
|
|
|
|
|
+ // Outer host rectangle for drawing background and borders
|
|
|
+ ImRect host_rect = ((flags & ImGuiWindowFlags_ChildWindow) && !(flags & ImGuiWindowFlags_Popup) && !window_is_child_tooltip) ? parent_window->ClipRect : viewport_rect;
|
|
|
+
|
|
|
+ // Save clipped aabb so we can access it in constant-time in FindHoveredWindow()
|
|
|
+ window->OuterRectClipped = window->Rect();
|
|
|
+ window->OuterRectClipped.ClipWith(host_rect);
|
|
|
+
|
|
|
// Inner clipping rectangle will extend a little bit outside the work region.
|
|
|
// This is to allow e.g. Selectable or CollapsingHeader or some separators to cover that space.
|
|
|
// Force round operator last to ensure that e.g. (int)(max.x-min.x) in user's render code produce correct result.
|
|
|
+ // FIXME: This is currently not clipped by the host rectangle, which is misleading because our call to PushClipRect() below will do it anyway.
|
|
|
+ // If we fix the value in InnerClipRect, which is desirable, we need to fix the two lines of code relying on it.
|
|
|
window->InnerClipRect.Min.x = ImFloor(0.5f + window->InnerMainRect.Min.x + ImMax(0.0f, ImFloor(window->WindowPadding.x * 0.5f - window->WindowBorderSize)));
|
|
|
window->InnerClipRect.Min.y = ImFloor(0.5f + window->InnerMainRect.Min.y);
|
|
|
window->InnerClipRect.Max.x = ImFloor(0.5f + window->InnerMainRect.Max.x - ImMax(0.0f, ImFloor(window->WindowPadding.x * 0.5f - window->WindowBorderSize)));
|
|
|
window->InnerClipRect.Max.y = ImFloor(0.5f + window->InnerMainRect.Max.y);
|
|
|
+ //window->InnerClipRect.ClipWithFull(host_rect);
|
|
|
|
|
|
// DRAWING
|
|
|
|
|
@@ -5490,10 +5496,7 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
|
|
|
window->DrawList->Clear();
|
|
|
window->DrawList->Flags = (g.Style.AntiAliasedLines ? ImDrawListFlags_AntiAliasedLines : 0) | (g.Style.AntiAliasedFill ? ImDrawListFlags_AntiAliasedFill : 0);
|
|
|
window->DrawList->PushTextureID(g.Font->ContainerAtlas->TexID);
|
|
|
- if ((flags & ImGuiWindowFlags_ChildWindow) && !(flags & ImGuiWindowFlags_Popup) && !window_is_child_tooltip)
|
|
|
- PushClipRect(parent_window->ClipRect.Min, parent_window->ClipRect.Max, true);
|
|
|
- else
|
|
|
- PushClipRect(viewport_rect.Min, viewport_rect.Max, true);
|
|
|
+ PushClipRect(host_rect.Min, host_rect.Max, false);
|
|
|
|
|
|
// Draw modal window background (darkens what is behind them, all viewports)
|
|
|
const bool dim_bg_for_modal = (flags & ImGuiWindowFlags_Modal) && window == GetFrontMostPopupModal() && window->HiddenFramesCannotSkipItems <= 0;
|