mirror of
				https://github.com/ocornut/imgui.git
				synced 2025-10-26 12:27:30 +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:
		
							
								
								
									
										35
									
								
								imgui.cpp
									
									
									
									
									
								
							
							
						
						
									
										35
									
								
								imgui.cpp
									
									
									
									
									
								
							| @@ -5646,6 +5646,24 @@ static ImGuiWindow* CreateNewWindow(const char* name, ImGuiWindowFlags flags) | ||||
|     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) | ||||
| { | ||||
|     ImGuiContext& g = *GImGui; | ||||
| @@ -5671,14 +5689,8 @@ static ImVec2 CalcWindowSizeAfterConstraint(ImGuiWindow* window, const ImVec2& s | ||||
|     } | ||||
|  | ||||
|     // Minimum size | ||||
|     if (!(window->Flags & (ImGuiWindowFlags_ChildWindow | ImGuiWindowFlags_AlwaysAutoResize))) | ||||
|     { | ||||
|         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; | ||||
|     ImVec2 size_min = CalcWindowMinSize(window); | ||||
|     return ImMax(new_size, size_min); | ||||
| } | ||||
|  | ||||
| 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 | ||||
|     { | ||||
|         // Maximum window size is determined by the viewport size or monitor size | ||||
|         const bool is_popup = (window->Flags & ImGuiWindowFlags_Popup) != 0; | ||||
|         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 size_min = CalcWindowMinSize(window); | ||||
|         ImVec2 avail_size = ImGui::GetMainViewport()->WorkSize; | ||||
|         ImVec2 size_auto_fit = ImClamp(size_desired, size_min, ImMax(size_min, avail_size - style.DisplaySafeAreaPadding * 2.0f)); | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 ocornut
					ocornut