mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-10-31 13:11:05 +01:00 
			
		
		
		
	ProgressBar() handling of border size + storing border size in window structure (#503)
This commit is contained in:
		
							
								
								
									
										21
									
								
								imgui.cpp
									
									
									
									
									
								
							
							
						
						
									
										21
									
								
								imgui.cpp
									
									
									
									
									
								
							| @@ -1536,6 +1536,7 @@ ImGuiWindow::ImGuiWindow(const char* name) | ||||
|     ScrollTargetCenterRatio = ImVec2(0.5f, 0.5f); | ||||
|     ScrollbarX = ScrollbarY = false; | ||||
|     ScrollbarSizes = ImVec2(0.0f, 0.0f); | ||||
|     BorderSize = 0.0f; | ||||
|     Active = WasActive = false; | ||||
|     Accessed = false; | ||||
|     Collapsed = false; | ||||
| @@ -3931,6 +3932,7 @@ bool ImGui::Begin(const char* name, bool* p_opened, const ImVec2& size_on_first_ | ||||
|             window->ScrollbarY = (flags & ImGuiWindowFlags_ForceVerticalScrollbar) || ((window->SizeContents.y > window->Size.y + style.ItemSpacing.y) && !(flags & ImGuiWindowFlags_NoScrollbar)); | ||||
|             window->ScrollbarX = (flags & ImGuiWindowFlags_ForceHorizontalScrollbar) || ((window->SizeContents.x > window->Size.x - (window->ScrollbarY ? style.ScrollbarSize : 0.0f) - window->WindowPadding.x) && !(flags & ImGuiWindowFlags_NoScrollbar) && (flags & ImGuiWindowFlags_HorizontalScrollbar)); | ||||
|             window->ScrollbarSizes = ImVec2(window->ScrollbarY ? style.ScrollbarSize : 0.0f, window->ScrollbarX ? style.ScrollbarSize : 0.0f); | ||||
|             window->BorderSize = (flags & ImGuiWindowFlags_ShowBorders) ? 1.0f : 0.0f; | ||||
|  | ||||
|             // Window background | ||||
|             if (bg_alpha > 0.0f) | ||||
| @@ -3970,11 +3972,10 @@ bool ImGui::Begin(const char* name, bool* p_opened, const ImVec2& size_on_first_ | ||||
|             // (after the input handling so we don't have a frame of latency) | ||||
|             if (!(flags & ImGuiWindowFlags_NoResize)) | ||||
|             { | ||||
|                 const float border_size = (window->Flags & ImGuiWindowFlags_ShowBorders) ? 1.0f : 0.0f; | ||||
|                 const ImVec2 br = window->Rect().GetBR(); | ||||
|                 window->DrawList->PathLineTo(br + ImVec2(-resize_corner_size, -border_size)); | ||||
|                 window->DrawList->PathLineTo(br + ImVec2(-border_size, -resize_corner_size)); | ||||
|                 window->DrawList->PathArcToFast(ImVec2(br.x - window_rounding - border_size, br.y - window_rounding - border_size), window_rounding, 0, 3); | ||||
|                 window->DrawList->PathLineTo(br + ImVec2(-resize_corner_size, -window->BorderSize)); | ||||
|                 window->DrawList->PathLineTo(br + ImVec2(-window->BorderSize, -resize_corner_size)); | ||||
|                 window->DrawList->PathArcToFast(ImVec2(br.x - window_rounding - window->BorderSize, br.y - window_rounding - window->BorderSize), window_rounding, 0, 3); | ||||
|                 window->DrawList->PathFill(resize_col); | ||||
|             } | ||||
|  | ||||
| @@ -4064,7 +4065,7 @@ bool ImGui::Begin(const char* name, bool* p_opened, const ImVec2& size_on_first_ | ||||
|     // We set this up after processing the resize grip so that our clip rectangle doesn't lag by a frame | ||||
|     // Note that if our window is collapsed we will end up with a null clipping rectangle which is the correct behavior. | ||||
|     const ImRect title_bar_rect = window->TitleBarRect(); | ||||
|     const float border_size = (flags & ImGuiWindowFlags_ShowBorders) ? 1.0f : 0.0f; | ||||
|     const float border_size = window->BorderSize; | ||||
|     ImRect clip_rect; | ||||
|     clip_rect.Min.x = title_bar_rect.Min.x + 0.5f + ImMax(border_size, window->WindowPadding.x*0.5f); | ||||
|     clip_rect.Min.y = title_bar_rect.Max.y + window->MenuBarHeight() + 0.5f + border_size; | ||||
| @@ -4137,7 +4138,7 @@ static void Scrollbar(ImGuiWindow* window, bool horizontal) | ||||
|     bool other_scrollbar = (horizontal ? window->ScrollbarY : window->ScrollbarX); | ||||
|     float other_scrollbar_size_w = other_scrollbar ? style.ScrollbarSize : 0.0f; | ||||
|     const ImRect window_rect = window->Rect(); | ||||
|     const float border_size = (window->Flags & ImGuiWindowFlags_ShowBorders) ? 1.0f : 0.0f; | ||||
|     const float border_size = window->BorderSize; | ||||
|     ImRect bb = horizontal | ||||
|         ? ImRect(window->Pos.x + border_size, window_rect.Max.y - style.ScrollbarSize, window_rect.Max.x - other_scrollbar_size_w - border_size, window_rect.Max.y - border_size) | ||||
|         : ImRect(window_rect.Max.x - style.ScrollbarSize, window->Pos.y + border_size, window_rect.Max.x - border_size, window_rect.Max.y - other_scrollbar_size_w - border_size); | ||||
| @@ -6801,15 +6802,16 @@ void ImGui::ProgressBar(float fraction, const ImVec2& size_arg, const char* over | ||||
|     const ImGuiStyle& style = g.Style; | ||||
|  | ||||
|     ImVec2 pos = window->DC.CursorPos; | ||||
|     const ImRect bb(pos, pos + CalcItemSize(size_arg, CalcItemWidth(), g.FontSize + style.FramePadding.y*2.0f)); | ||||
|     ImRect bb(pos, pos + CalcItemSize(size_arg, CalcItemWidth(), g.FontSize + style.FramePadding.y*2.0f)); | ||||
|     ItemSize(bb, style.FramePadding.y); | ||||
|     if (!ItemAdd(bb, NULL)) | ||||
|         return; | ||||
|  | ||||
|     // Render | ||||
|     fraction = ImSaturate(fraction); | ||||
|     const ImVec2 fill_br = ImVec2(ImLerp(bb.Min.x, bb.Max.x, fraction), bb.Max.y); | ||||
|     RenderFrame(bb.Min, bb.Max, GetColorU32(ImGuiCol_FrameBg), true, style.FrameRounding); | ||||
|     bb.Reduce(ImVec2(window->BorderSize, window->BorderSize)); | ||||
|     const ImVec2 fill_br = ImVec2(ImLerp(bb.Min.x, bb.Max.x, fraction), bb.Max.y); | ||||
|     RenderFrame(bb.Min, fill_br, GetColorU32(ImGuiCol_PlotHistogram), false, style.FrameRounding); | ||||
|  | ||||
|     // Default displaying the fraction as percentage string, but user can override it | ||||
| @@ -8325,8 +8327,7 @@ bool ImGui::BeginMenuBar() | ||||
|     ImGui::BeginGroup(); // Save position | ||||
|     ImGui::PushID("##menubar"); | ||||
|     ImRect rect = window->MenuBarRect(); | ||||
|     float border_size = (window->Flags & ImGuiWindowFlags_ShowBorders) ? 1.0f : 0.0f; | ||||
|     PushClipRect(ImVec2(rect.Min.x+0.5f, rect.Min.y-0.5f+border_size), ImVec2(rect.Max.x+0.5f, rect.Max.y-0.5f), false); | ||||
|     PushClipRect(ImVec2(rect.Min.x+0.5f, rect.Min.y-0.5f+window->BorderSize), ImVec2(rect.Max.x+0.5f, rect.Max.y-0.5f), false); | ||||
|     window->DC.CursorPos = ImVec2(rect.Min.x + window->DC.MenuBarOffsetX, rect.Min.y);// + g.Style.FramePadding.y); | ||||
|     window->DC.LayoutType = ImGuiLayoutType_Horizontal; | ||||
|     window->DC.MenuBarAppending = true; | ||||
|   | ||||
| @@ -598,7 +598,8 @@ struct IMGUI_API ImGuiWindow | ||||
|     ImVec2                  ScrollTarget;                       // target scroll position. stored as cursor position with scrolling canceled out, so the highest point is always 0.0f. (FLT_MAX for no change) | ||||
|     ImVec2                  ScrollTargetCenterRatio;            // 0.0f = scroll so that target position is at top, 0.5f = scroll so that target position is centered | ||||
|     bool                    ScrollbarX, ScrollbarY; | ||||
|     ImVec2                  ScrollbarSizes;                     //  | ||||
|     ImVec2                  ScrollbarSizes; | ||||
|     float                   BorderSize; | ||||
|     bool                    Active;                             // Set to true on Begin() | ||||
|     bool                    WasActive; | ||||
|     bool                    Accessed;                           // Set to true when any widget access the current window | ||||
|   | ||||
		Reference in New Issue
	
	Block a user