mirror of
https://github.com/Drezil/imgui.git
synced 2024-11-21 19:37:01 +00:00
Windows: shared code for CalcWindowMinSize().
+ Don't apply WindowMinSize during auto-fit of child windows (not exercised yet).
This commit is contained in:
parent
c95fbb4464
commit
e2035a514c
35
imgui.cpp
35
imgui.cpp
@ -5646,6 +5646,24 @@ static ImGuiWindow* CreateNewWindow(const char* name, ImGuiWindowFlags flags)
|
|||||||
return window;
|
return window;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline ImVec2 CalcWindowMinSize(ImGuiWindow* window)
|
||||||
|
{
|
||||||
|
// Popups, menus and childs bypass style.WindowMinSize by default, but we give then a non-zero minimum size to facilitate understanding problematic cases (e.g. empty popups)
|
||||||
|
ImGuiContext& g = *GImGui;
|
||||||
|
ImVec2 size_min;
|
||||||
|
if (window->Flags & (ImGuiWindowFlags_Popup | ImGuiWindowFlags_ChildMenu | ImGuiWindowFlags_ChildWindow))
|
||||||
|
{
|
||||||
|
size_min = ImVec2(4.0f, 4.0f);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ImGuiWindow* window_for_height = window;
|
||||||
|
size_min = g.Style.WindowMinSize;
|
||||||
|
size_min.y = ImMax(size_min.y, window_for_height->TitleBarHeight() + window_for_height->MenuBarHeight() + ImMax(0.0f, g.Style.WindowRounding - 1.0f)); // Reduce artifacts with very small windows
|
||||||
|
}
|
||||||
|
return size_min;
|
||||||
|
}
|
||||||
|
|
||||||
static ImVec2 CalcWindowSizeAfterConstraint(ImGuiWindow* window, const ImVec2& size_desired)
|
static ImVec2 CalcWindowSizeAfterConstraint(ImGuiWindow* window, const ImVec2& size_desired)
|
||||||
{
|
{
|
||||||
ImGuiContext& g = *GImGui;
|
ImGuiContext& g = *GImGui;
|
||||||
@ -5671,14 +5689,8 @@ static ImVec2 CalcWindowSizeAfterConstraint(ImGuiWindow* window, const ImVec2& s
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Minimum size
|
// Minimum size
|
||||||
if (!(window->Flags & (ImGuiWindowFlags_ChildWindow | ImGuiWindowFlags_AlwaysAutoResize)))
|
ImVec2 size_min = CalcWindowMinSize(window);
|
||||||
{
|
return ImMax(new_size, size_min);
|
||||||
ImGuiWindow* window_for_height = window;
|
|
||||||
new_size = ImMax(new_size, g.Style.WindowMinSize);
|
|
||||||
const float minimum_height = window_for_height->TitleBarHeight() + window_for_height->MenuBarHeight() + ImMax(0.0f, g.Style.WindowRounding - 1.0f);
|
|
||||||
new_size.y = ImMax(new_size.y, minimum_height); // Reduce artifacts with very small windows
|
|
||||||
}
|
|
||||||
return new_size;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void CalcWindowContentSizes(ImGuiWindow* window, ImVec2* content_size_current, ImVec2* content_size_ideal)
|
static void CalcWindowContentSizes(ImGuiWindow* window, ImVec2* content_size_current, ImVec2* content_size_ideal)
|
||||||
@ -5717,12 +5729,7 @@ static ImVec2 CalcWindowAutoFitSize(ImGuiWindow* window, const ImVec2& size_cont
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Maximum window size is determined by the viewport size or monitor size
|
// Maximum window size is determined by the viewport size or monitor size
|
||||||
const bool is_popup = (window->Flags & ImGuiWindowFlags_Popup) != 0;
|
ImVec2 size_min = CalcWindowMinSize(window);
|
||||||
const bool is_menu = (window->Flags & ImGuiWindowFlags_ChildMenu) != 0;
|
|
||||||
ImVec2 size_min = style.WindowMinSize;
|
|
||||||
if (is_popup || is_menu) // Popups and menus bypass style.WindowMinSize by default, but we give then a non-zero minimum size to facilitate understanding problematic cases (e.g. empty popups)
|
|
||||||
size_min = ImMin(size_min, ImVec2(4.0f, 4.0f));
|
|
||||||
|
|
||||||
ImVec2 avail_size = ImGui::GetMainViewport()->WorkSize;
|
ImVec2 avail_size = ImGui::GetMainViewport()->WorkSize;
|
||||||
ImVec2 size_auto_fit = ImClamp(size_desired, size_min, ImMax(size_min, avail_size - style.DisplaySafeAreaPadding * 2.0f));
|
ImVec2 size_auto_fit = ImClamp(size_desired, size_min, ImMax(size_min, avail_size - style.DisplaySafeAreaPadding * 2.0f));
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user