Skip to content

Commit

Permalink
Child windows: look at the parent window's flags to decide whether to…
Browse files Browse the repository at this point in the history
… clamp child resizes. (ocornut#7440, ocornut#1710)
  • Loading branch information
cfillion authored and pull[bot] committed Mar 27, 2024
1 parent 012268b commit ecb7e13
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 4 deletions.
2 changes: 2 additions & 0 deletions docs/CHANGELOG.txt
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,8 @@ Other changes:
- Windows: Double-click to collapse may be disabled via key-ownership mechanism. (#7369)
- Windows: Extend outer resize borders to the edges when there are no corner grips.
Essentially affects resizable child windows. (#7440, #1710) [@cfillion]
- Windows: Resizing logic for child windows evaluates whether per-axis clamping should be
applied based on parent scrollbars, not child scrollbars. (#7440, #1710) [@cfillion]
- Tables: Angled headers: fixed border hit box extending beyond when used within
non-scrollable tables. (#7416) [@cfillion]
- Tables: Angled headers: fixed borders not moving back up after TableAngleHeadersRow()
Expand Down
10 changes: 6 additions & 4 deletions imgui.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6029,10 +6029,12 @@ static int ImGui::UpdateWindowManualResize(ImGuiWindow* window, const ImVec2& si
border_target = ImClamp(border_target, clamp_min, clamp_max);
if (flags & ImGuiWindowFlags_ChildWindow) // Clamp resizing of childs within parent
{
if ((flags & (ImGuiWindowFlags_HorizontalScrollbar | ImGuiWindowFlags_AlwaysHorizontalScrollbar)) == 0 || (flags & ImGuiWindowFlags_NoScrollbar))
border_target.x = ImClamp(border_target.x, window->ParentWindow->InnerClipRect.Min.x, window->ParentWindow->InnerClipRect.Max.x);
if (flags & ImGuiWindowFlags_NoScrollbar)
border_target.y = ImClamp(border_target.y, window->ParentWindow->InnerClipRect.Min.y, window->ParentWindow->InnerClipRect.Max.y);
ImGuiWindowFlags parent_flags = window->ParentWindow->Flags;
const ImRect parent_rect = window->ParentWindow->InnerClipRect;
if ((parent_flags & (ImGuiWindowFlags_HorizontalScrollbar | ImGuiWindowFlags_AlwaysHorizontalScrollbar)) == 0 || (parent_flags & ImGuiWindowFlags_NoScrollbar))
border_target.x = ImClamp(border_target.x, parent_rect.Min.x, parent_rect.Max.x);
if (parent_flags & ImGuiWindowFlags_NoScrollbar)
border_target.y = ImClamp(border_target.y, parent_rect.Min.y, parent_rect.Max.y);
}
if (!ignore_resize)
CalcResizePosSizeFromAnyCorner(window, border_target, ImMin(def.SegmentN1, def.SegmentN2), &pos_target, &size_target);
Expand Down

0 comments on commit ecb7e13

Please sign in to comment.