mirror of
				https://github.com/ocornut/imgui.git
				synced 2025-10-26 12:27:30 +00:00 
			
		
		
		
	Windows: BeginChild(): Resize borders rendered even when ImGuiWindowFlags_NoBackground is specified. (#1710, #7194)
This commit is contained in:
		| @@ -56,6 +56,8 @@ Other changes: | |||||||
|  |  | ||||||
| - Windows: BeginChild(): Fixed auto-resizing erroneously limiting size to host viewport | - Windows: BeginChild(): Fixed auto-resizing erroneously limiting size to host viewport | ||||||
|   minus padding. There are no limit to a child width/height. (#7063) [@Devyre] |   minus padding. There are no limit to a child width/height. (#7063) [@Devyre] | ||||||
|  | - Windows: BeginChild(): Resize borders rendered even when ImGuiWindowFlags_NoBackground | ||||||
|  |   is specified. (#1710, #7194) | ||||||
| - Windows: Fixed some auto-resizing path using style.WindowMinSize.x (instead of x/y) | - Windows: Fixed some auto-resizing path using style.WindowMinSize.x (instead of x/y) | ||||||
|   for both axises since 1.90. (#7106) [@n0bodysec] |   for both axises since 1.90. (#7106) [@n0bodysec] | ||||||
| - Scrolling: internal scrolling value is rounded instead of truncated, as a way to reduce | - Scrolling: internal scrolling value is rounded instead of truncated, as a way to reduce | ||||||
|   | |||||||
							
								
								
									
										36
									
								
								imgui.cpp
									
									
									
									
									
								
							
							
						
						
									
										36
									
								
								imgui.cpp
									
									
									
									
									
								
							| @@ -6082,28 +6082,40 @@ static inline void ClampWindowPos(ImGuiWindow* window, const ImRect& visibility_ | |||||||
|     window->Pos = ImClamp(window->Pos, visibility_rect.Min - size_for_clamping, visibility_rect.Max); |     window->Pos = ImClamp(window->Pos, visibility_rect.Min - size_for_clamping, visibility_rect.Max); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | static void RenderWindowOuterSingleBorder(ImGuiWindow* window, int border_n, ImU32 border_col, float border_size) | ||||||
|  | { | ||||||
|  |     const ImGuiResizeBorderDef& def = resize_border_def[border_n]; | ||||||
|  |     const float rounding = window->WindowRounding; | ||||||
|  |     const ImRect border_r = GetResizeBorderRect(window, border_n, rounding, 0.0f); | ||||||
|  |     window->DrawList->PathArcTo(ImLerp(border_r.Min, border_r.Max, def.SegmentN1) + ImVec2(0.5f, 0.5f) + def.InnerDir * rounding, rounding, def.OuterAngle - IM_PI * 0.25f, def.OuterAngle); | ||||||
|  |     window->DrawList->PathArcTo(ImLerp(border_r.Min, border_r.Max, def.SegmentN2) + ImVec2(0.5f, 0.5f) + def.InnerDir * rounding, rounding, def.OuterAngle, def.OuterAngle + IM_PI * 0.25f); | ||||||
|  |     window->DrawList->PathStroke(border_col, ImDrawFlags_None, border_size); | ||||||
|  | } | ||||||
|  |  | ||||||
| static void ImGui::RenderWindowOuterBorders(ImGuiWindow* window) | static void ImGui::RenderWindowOuterBorders(ImGuiWindow* window) | ||||||
| { | { | ||||||
|     ImGuiContext& g = *GImGui; |     ImGuiContext& g = *GImGui; | ||||||
|     float rounding = window->WindowRounding; |     const float border_size = window->WindowBorderSize; | ||||||
|     float border_size = window->WindowBorderSize; |     const ImU32 border_col = GetColorU32(ImGuiCol_Border); | ||||||
|     if (border_size > 0.0f && !(window->Flags & ImGuiWindowFlags_NoBackground)) |     if (border_size > 0.0f && (window->Flags & ImGuiWindowFlags_NoBackground) == 0) | ||||||
|         window->DrawList->AddRect(window->Pos, window->Pos + window->Size, GetColorU32(ImGuiCol_Border), rounding, 0, border_size); |         window->DrawList->AddRect(window->Pos, window->Pos + window->Size, border_col, window->WindowRounding, 0, window->WindowBorderSize); | ||||||
|  |     else if (border_size > 0.0f) | ||||||
|  |     { | ||||||
|  |         if (window->ChildFlags & ImGuiChildFlags_ResizeX) // Similar code as 'resize_border_mask' computation in UpdateWindowManualResize() but we specifically only always draw explicit child resize border. | ||||||
|  |             RenderWindowOuterSingleBorder(window, 1, border_col, border_size); | ||||||
|  |         if (window->ChildFlags & ImGuiChildFlags_ResizeY) | ||||||
|  |             RenderWindowOuterSingleBorder(window, 3, border_col, border_size); | ||||||
|  |     } | ||||||
|     if (window->ResizeBorderHovered != -1 || window->ResizeBorderHeld != -1) |     if (window->ResizeBorderHovered != -1 || window->ResizeBorderHeld != -1) | ||||||
|     { |     { | ||||||
|         const int border_n = (window->ResizeBorderHeld != -1) ? window->ResizeBorderHeld : window->ResizeBorderHovered; |         const int border_n = (window->ResizeBorderHeld != -1) ? window->ResizeBorderHeld : window->ResizeBorderHovered; | ||||||
|         const ImGuiResizeBorderDef& def = resize_border_def[border_n]; |         const ImU32 border_col_resizing = GetColorU32((window->ResizeBorderHeld != -1) ? ImGuiCol_SeparatorActive : ImGuiCol_SeparatorHovered); | ||||||
|         const ImRect border_r = GetResizeBorderRect(window, border_n, rounding, 0.0f); |         RenderWindowOuterSingleBorder(window, border_n, border_col_resizing, ImMax(2.0f, window->WindowBorderSize)); // Thicker than usual | ||||||
|         const ImU32 border_col = GetColorU32((window->ResizeBorderHeld != -1) ? ImGuiCol_SeparatorActive : ImGuiCol_SeparatorHovered); |  | ||||||
|         window->DrawList->PathArcTo(ImLerp(border_r.Min, border_r.Max, def.SegmentN1) + ImVec2(0.5f, 0.5f) + def.InnerDir * rounding, rounding, def.OuterAngle - IM_PI * 0.25f, def.OuterAngle); |  | ||||||
|         window->DrawList->PathArcTo(ImLerp(border_r.Min, border_r.Max, def.SegmentN2) + ImVec2(0.5f, 0.5f) + def.InnerDir * rounding, rounding, def.OuterAngle, def.OuterAngle + IM_PI * 0.25f); |  | ||||||
|         window->DrawList->PathStroke(border_col, 0, ImMax(2.0f, border_size)); // Thicker than usual |  | ||||||
|     } |     } | ||||||
|     if (g.Style.FrameBorderSize > 0 && !(window->Flags & ImGuiWindowFlags_NoTitleBar)) |     if (g.Style.FrameBorderSize > 0 && !(window->Flags & ImGuiWindowFlags_NoTitleBar)) | ||||||
|     { |     { | ||||||
|         float y = window->Pos.y + window->TitleBarHeight() - 1; |         float y = window->Pos.y + window->TitleBarHeight() - 1; | ||||||
|         window->DrawList->AddLine(ImVec2(window->Pos.x + border_size, y), ImVec2(window->Pos.x + window->Size.x - border_size, y), GetColorU32(ImGuiCol_Border), g.Style.FrameBorderSize); |         window->DrawList->AddLine(ImVec2(window->Pos.x + border_size, y), ImVec2(window->Pos.x + window->Size.x - border_size, y), border_col, g.Style.FrameBorderSize); | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 ocornut
					ocornut