Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Minor improvements to child window resizing behavior #7440

Closed
wants to merge 3 commits into from

Conversation

cfillion
Copy link
Contributor

@cfillion cfillion commented Mar 25, 2024

Child window resizing is currently clamped to the parent window only if the child window itself has no scrollbar on that axis. It seems unintuitive to look at the child window's scrollbars rather than at the parent window's.

In a situation where the parent window is non-resizable, has scrollbars+mousewheel disabled and persistent storage enabled, that makes it very easy for end users to accidentally brick their UI until the .ini is manually cleared.

Screencap

This PR also changes the clamp rect to take into account window padding. Currently it has half the window padding at the right side and no padding at the bottom. It's asymmetrical and makes it hard to neatly align a resizable child with other full-width items (eg. -FLT_MIN).

Lastly, this PR extends child window resize grips to cover the entire border length since childs don't have diagonal resize grips at the corners.

ocornut pushed a commit that referenced this pull request Mar 27, 2024
ocornut pushed a commit that referenced this pull request Mar 27, 2024
ocornut added a commit that referenced this pull request Mar 27, 2024
@ocornut
Copy link
Owner

ocornut commented Mar 27, 2024

Hello,
I've merged two out of three commits.
Looking at parent flags seems correct, amends fa4c49b.

Using WorkRect instead of InnerClipRect is however incorrect. WorkRect encompass the scrolling area.
I suppose you'd want to use InnerRect + apply WindowPadding over it:

ImRect border_limit_rect = window->ParentWindow->InnerRect;
border_limit_rect.Expand(ImVec2(-ImMax(window->WindowPadding.x, window->WindowBorderSize), -ImMax(window->WindowPadding.y, window->WindowBorderSize)));
if ((parent_flags & (ImGuiWindowFlags_HorizontalScrollbar | ImGuiWindowFlags_AlwaysHorizontalScrollbar)) == 0 || (parent_flags & ImGuiWindowFlags_NoScrollbar))
    border_target.x = ImClamp(border_target.x, border_limit_rect.Min.x, border_limit_rect.Max.x);
if (parent_flags & ImGuiWindowFlags_NoScrollbar)
    border_target.y = ImClamp(border_target.y, border_limit_rect.Min.y, border_limit_rect.Max.y);

I pushed that as 742e534

Eventually we should apply #3312 and might add a helper rectangle corresponding to that.

Thank you!

@ocornut ocornut closed this Mar 27, 2024
pull bot pushed a commit to TeamREPENTOGON/imgui that referenced this pull request Mar 27, 2024
pull bot pushed a commit to TeamREPENTOGON/imgui that referenced this pull request Mar 27, 2024
pull bot pushed a commit to TeamREPENTOGON/imgui that referenced this pull request Mar 27, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants