mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-10-31 21:21:06 +01:00 
			
		
		
		
	TabBar, Style: added style.TabBarBorderSize and associated ImGuiStyleVar_TabBarBorderSize. (#6820, #4859, #5022, #5239)
Cherry-picked from docking's 64b1e44
This commit is contained in:
		| @@ -122,6 +122,8 @@ Other changes: | |||||||
| - Windows: Layout of Close/Collapse buttons uses style.ItemInnerSpacing.x between items, | - Windows: Layout of Close/Collapse buttons uses style.ItemInnerSpacing.x between items, | ||||||
|   stopped incorrectly using FramePadding in a way where hit-boxes could overlap when |   stopped incorrectly using FramePadding in a way where hit-boxes could overlap when | ||||||
|   setting large values. (#6749) |   setting large values. (#6749) | ||||||
|  | - TabBar, Style: added style.TabBarBorderSize and associated ImGuiStyleVar_TabBarBorderSize. | ||||||
|  |   Tweaked rendering of that separator to allow thicker values. (#6820, #4859, #5022, #5239) | ||||||
| - InputFloat, SliderFloat, DragFloat: always turn both '.' and ',' into the current decimal | - InputFloat, SliderFloat, DragFloat: always turn both '.' and ',' into the current decimal | ||||||
|   point character when using Decimal/Scientific character filter. (#6719, #2278) [@adamsepp] |   point character when using Decimal/Scientific character filter. (#6719, #2278) [@adamsepp] | ||||||
| - ColorEdit, ColorPicker: Manipulating options popup don't mark item as edited. (#6722) | - ColorEdit, ColorPicker: Manipulating options popup don't mark item as edited. (#6722) | ||||||
|   | |||||||
| @@ -1185,6 +1185,7 @@ ImGuiStyle::ImGuiStyle() | |||||||
|     TabRounding             = 4.0f;             // Radius of upper corners of a tab. Set to 0.0f to have rectangular tabs. |     TabRounding             = 4.0f;             // Radius of upper corners of a tab. Set to 0.0f to have rectangular tabs. | ||||||
|     TabBorderSize           = 0.0f;             // Thickness of border around tabs. |     TabBorderSize           = 0.0f;             // Thickness of border around tabs. | ||||||
|     TabMinWidthForCloseButton = 0.0f;           // Minimum width for close button to appear on an unselected tab when hovered. Set to 0.0f to always show when hovering, set to FLT_MAX to never show close button unless selected. |     TabMinWidthForCloseButton = 0.0f;           // Minimum width for close button to appear on an unselected tab when hovered. Set to 0.0f to always show when hovering, set to FLT_MAX to never show close button unless selected. | ||||||
|  |     TabBarBorderSize        = 1.0f;             // Thickness of tab-bar separator, which takes on the tab active color to denote focus. | ||||||
|     ColorButtonPosition     = ImGuiDir_Right;   // Side of the color button in the ColorEdit4 widget (left/right). Defaults to ImGuiDir_Right. |     ColorButtonPosition     = ImGuiDir_Right;   // Side of the color button in the ColorEdit4 widget (left/right). Defaults to ImGuiDir_Right. | ||||||
|     ButtonTextAlign         = ImVec2(0.5f,0.5f);// Alignment of button text when button is larger than text. |     ButtonTextAlign         = ImVec2(0.5f,0.5f);// Alignment of button text when button is larger than text. | ||||||
|     SelectableTextAlign     = ImVec2(0.0f,0.0f);// Alignment of selectable text. Defaults to (0.0f, 0.0f) (top-left aligned). It's generally important to keep this left-aligned if you want to lay multiple items on a same line. |     SelectableTextAlign     = ImVec2(0.0f,0.0f);// Alignment of selectable text. Defaults to (0.0f, 0.0f) (top-left aligned). It's generally important to keep this left-aligned if you want to lay multiple items on a same line. | ||||||
| @@ -3140,6 +3141,7 @@ static const ImGuiDataVarInfo GStyleVarInfo[] = | |||||||
|     { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, GrabMinSize) },         // ImGuiStyleVar_GrabMinSize |     { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, GrabMinSize) },         // ImGuiStyleVar_GrabMinSize | ||||||
|     { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, GrabRounding) },        // ImGuiStyleVar_GrabRounding |     { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, GrabRounding) },        // ImGuiStyleVar_GrabRounding | ||||||
|     { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, TabRounding) },         // ImGuiStyleVar_TabRounding |     { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, TabRounding) },         // ImGuiStyleVar_TabRounding | ||||||
|  |     { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, TabBarBorderSize) },    // ImGuiStyleVar_TabBarBorderSize | ||||||
|     { ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, ButtonTextAlign) },     // ImGuiStyleVar_ButtonTextAlign |     { ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, ButtonTextAlign) },     // ImGuiStyleVar_ButtonTextAlign | ||||||
|     { ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, SelectableTextAlign) }, // ImGuiStyleVar_SelectableTextAlign |     { ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, SelectableTextAlign) }, // ImGuiStyleVar_SelectableTextAlign | ||||||
|     { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, SeparatorTextBorderSize) },// ImGuiStyleVar_SeparatorTextBorderSize |     { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, SeparatorTextBorderSize) },// ImGuiStyleVar_SeparatorTextBorderSize | ||||||
|   | |||||||
							
								
								
									
										2
									
								
								imgui.h
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								imgui.h
									
									
									
									
									
								
							| @@ -1645,6 +1645,7 @@ enum ImGuiStyleVar_ | |||||||
|     ImGuiStyleVar_GrabMinSize,         // float     GrabMinSize |     ImGuiStyleVar_GrabMinSize,         // float     GrabMinSize | ||||||
|     ImGuiStyleVar_GrabRounding,        // float     GrabRounding |     ImGuiStyleVar_GrabRounding,        // float     GrabRounding | ||||||
|     ImGuiStyleVar_TabRounding,         // float     TabRounding |     ImGuiStyleVar_TabRounding,         // float     TabRounding | ||||||
|  |     ImGuiStyleVar_TabBarBorderSize,    // float     TabBarBorderSize | ||||||
|     ImGuiStyleVar_ButtonTextAlign,     // ImVec2    ButtonTextAlign |     ImGuiStyleVar_ButtonTextAlign,     // ImVec2    ButtonTextAlign | ||||||
|     ImGuiStyleVar_SelectableTextAlign, // ImVec2    SelectableTextAlign |     ImGuiStyleVar_SelectableTextAlign, // ImVec2    SelectableTextAlign | ||||||
|     ImGuiStyleVar_SeparatorTextBorderSize,// float  SeparatorTextBorderSize |     ImGuiStyleVar_SeparatorTextBorderSize,// float  SeparatorTextBorderSize | ||||||
| @@ -1912,6 +1913,7 @@ struct ImGuiStyle | |||||||
|     float       TabRounding;                // Radius of upper corners of a tab. Set to 0.0f to have rectangular tabs. |     float       TabRounding;                // Radius of upper corners of a tab. Set to 0.0f to have rectangular tabs. | ||||||
|     float       TabBorderSize;              // Thickness of border around tabs. |     float       TabBorderSize;              // Thickness of border around tabs. | ||||||
|     float       TabMinWidthForCloseButton;  // Minimum width for close button to appear on an unselected tab when hovered. Set to 0.0f to always show when hovering, set to FLT_MAX to never show close button unless selected. |     float       TabMinWidthForCloseButton;  // Minimum width for close button to appear on an unselected tab when hovered. Set to 0.0f to always show when hovering, set to FLT_MAX to never show close button unless selected. | ||||||
|  |     float       TabBarBorderSize;           // Thickness of tab-bar separator, which takes on the tab active color to denote focus. | ||||||
|     ImGuiDir    ColorButtonPosition;        // Side of the color button in the ColorEdit4 widget (left/right). Defaults to ImGuiDir_Right. |     ImGuiDir    ColorButtonPosition;        // Side of the color button in the ColorEdit4 widget (left/right). Defaults to ImGuiDir_Right. | ||||||
|     ImVec2      ButtonTextAlign;            // Alignment of button text when button is larger than text. Defaults to (0.5f, 0.5f) (centered). |     ImVec2      ButtonTextAlign;            // Alignment of button text when button is larger than text. Defaults to (0.5f, 0.5f) (centered). | ||||||
|     ImVec2      SelectableTextAlign;        // Alignment of selectable text. Defaults to (0.0f, 0.0f) (top-left aligned). It's generally important to keep this left-aligned if you want to lay multiple items on a same line. |     ImVec2      SelectableTextAlign;        // Alignment of selectable text. Defaults to (0.0f, 0.0f) (top-left aligned). It's generally important to keep this left-aligned if you want to lay multiple items on a same line. | ||||||
|   | |||||||
| @@ -6369,6 +6369,7 @@ void ImGui::ShowStyleEditor(ImGuiStyle* ref) | |||||||
|             ImGui::SliderFloat("PopupBorderSize", &style.PopupBorderSize, 0.0f, 1.0f, "%.0f"); |             ImGui::SliderFloat("PopupBorderSize", &style.PopupBorderSize, 0.0f, 1.0f, "%.0f"); | ||||||
|             ImGui::SliderFloat("FrameBorderSize", &style.FrameBorderSize, 0.0f, 1.0f, "%.0f"); |             ImGui::SliderFloat("FrameBorderSize", &style.FrameBorderSize, 0.0f, 1.0f, "%.0f"); | ||||||
|             ImGui::SliderFloat("TabBorderSize", &style.TabBorderSize, 0.0f, 1.0f, "%.0f"); |             ImGui::SliderFloat("TabBorderSize", &style.TabBorderSize, 0.0f, 1.0f, "%.0f"); | ||||||
|  |             ImGui::SliderFloat("TabBarBorderSize", &style.TabBarBorderSize, 0.0f, 2.0f, "%.0f"); | ||||||
|  |  | ||||||
|             ImGui::SeparatorText("Rounding"); |             ImGui::SeparatorText("Rounding"); | ||||||
|             ImGui::SliderFloat("WindowRounding", &style.WindowRounding, 0.0f, 12.0f, "%.0f"); |             ImGui::SliderFloat("WindowRounding", &style.WindowRounding, 0.0f, 12.0f, "%.0f"); | ||||||
|   | |||||||
| @@ -2551,6 +2551,8 @@ struct IMGUI_API ImGuiTabBar | |||||||
|     float               ScrollingSpeed; |     float               ScrollingSpeed; | ||||||
|     float               ScrollingRectMinX; |     float               ScrollingRectMinX; | ||||||
|     float               ScrollingRectMaxX; |     float               ScrollingRectMaxX; | ||||||
|  |     float               SeparatorMinX; | ||||||
|  |     float               SeparatorMaxX; | ||||||
|     ImGuiID             ReorderRequestTabId; |     ImGuiID             ReorderRequestTabId; | ||||||
|     ImS16               ReorderRequestOffset; |     ImS16               ReorderRequestOffset; | ||||||
|     ImS8                BeginCount; |     ImS8                BeginCount; | ||||||
|   | |||||||
| @@ -7788,6 +7788,8 @@ bool    ImGui::BeginTabBar(const char* str_id, ImGuiTabBarFlags flags) | |||||||
|     ImGuiTabBar* tab_bar = g.TabBars.GetOrAddByKey(id); |     ImGuiTabBar* tab_bar = g.TabBars.GetOrAddByKey(id); | ||||||
|     ImRect tab_bar_bb = ImRect(window->DC.CursorPos.x, window->DC.CursorPos.y, window->WorkRect.Max.x, window->DC.CursorPos.y + g.FontSize + g.Style.FramePadding.y * 2); |     ImRect tab_bar_bb = ImRect(window->DC.CursorPos.x, window->DC.CursorPos.y, window->WorkRect.Max.x, window->DC.CursorPos.y + g.FontSize + g.Style.FramePadding.y * 2); | ||||||
|     tab_bar->ID = id; |     tab_bar->ID = id; | ||||||
|  |     tab_bar->SeparatorMinX = tab_bar->BarRect.Min.x - IM_FLOOR(window->WindowPadding.x * 0.5f); | ||||||
|  |     tab_bar->SeparatorMaxX = tab_bar->BarRect.Max.x + IM_FLOOR(window->WindowPadding.x * 0.5f); | ||||||
|     return BeginTabBarEx(tab_bar, tab_bar_bb, flags | ImGuiTabBarFlags_IsFocused); |     return BeginTabBarEx(tab_bar, tab_bar_bb, flags | ImGuiTabBarFlags_IsFocused); | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -7798,6 +7800,7 @@ bool    ImGui::BeginTabBarEx(ImGuiTabBar* tab_bar, const ImRect& tab_bar_bb, ImG | |||||||
|     if (window->SkipItems) |     if (window->SkipItems) | ||||||
|         return false; |         return false; | ||||||
|  |  | ||||||
|  |     IM_ASSERT(tab_bar->ID != 0); | ||||||
|     if ((flags & ImGuiTabBarFlags_DockNode) == 0) |     if ((flags & ImGuiTabBarFlags_DockNode) == 0) | ||||||
|         PushOverrideID(tab_bar->ID); |         PushOverrideID(tab_bar->ID); | ||||||
|  |  | ||||||
| @@ -7840,12 +7843,12 @@ bool    ImGui::BeginTabBarEx(ImGuiTabBar* tab_bar, const ImRect& tab_bar_bb, ImG | |||||||
|     window->DC.CursorPos = ImVec2(tab_bar->BarRect.Min.x, tab_bar->BarRect.Max.y + tab_bar->ItemSpacingY); |     window->DC.CursorPos = ImVec2(tab_bar->BarRect.Min.x, tab_bar->BarRect.Max.y + tab_bar->ItemSpacingY); | ||||||
|  |  | ||||||
|     // Draw separator |     // Draw separator | ||||||
|  |     // (it would be misleading to draw this in EndTabBar() suggesting that it may be drawn over tabs, as tab bar are appendable) | ||||||
|     const ImU32 col = GetColorU32((flags & ImGuiTabBarFlags_IsFocused) ? ImGuiCol_TabActive : ImGuiCol_TabUnfocusedActive); |     const ImU32 col = GetColorU32((flags & ImGuiTabBarFlags_IsFocused) ? ImGuiCol_TabActive : ImGuiCol_TabUnfocusedActive); | ||||||
|     const float y = tab_bar->BarRect.Max.y - 1.0f; |     if (g.Style.TabBarBorderSize > 0.0f) | ||||||
|     { |     { | ||||||
|         const float separator_min_x = tab_bar->BarRect.Min.x - IM_FLOOR(window->WindowPadding.x * 0.5f); |         const float y = tab_bar->BarRect.Max.y; | ||||||
|         const float separator_max_x = tab_bar->BarRect.Max.x + IM_FLOOR(window->WindowPadding.x * 0.5f); |         window->DrawList->AddRectFilled(ImVec2(tab_bar->SeparatorMinX, y - g.Style.TabBarBorderSize), ImVec2(tab_bar->SeparatorMaxX, y), col); | ||||||
|         window->DrawList->AddLine(ImVec2(separator_min_x, y), ImVec2(separator_max_x, y), col, 1.0f); |  | ||||||
|     } |     } | ||||||
|     return true; |     return true; | ||||||
| } | } | ||||||
| @@ -8787,7 +8790,7 @@ void ImGui::TabItemBackground(ImDrawList* draw_list, const ImRect& bb, ImGuiTabI | |||||||
|     IM_ASSERT(width > 0.0f); |     IM_ASSERT(width > 0.0f); | ||||||
|     const float rounding = ImMax(0.0f, ImMin((flags & ImGuiTabItemFlags_Button) ? g.Style.FrameRounding : g.Style.TabRounding, width * 0.5f - 1.0f)); |     const float rounding = ImMax(0.0f, ImMin((flags & ImGuiTabItemFlags_Button) ? g.Style.FrameRounding : g.Style.TabRounding, width * 0.5f - 1.0f)); | ||||||
|     const float y1 = bb.Min.y + 1.0f; |     const float y1 = bb.Min.y + 1.0f; | ||||||
|     const float y2 = bb.Max.y - 1.0f; |     const float y2 = bb.Max.y - g.Style.TabBarBorderSize; | ||||||
|     draw_list->PathLineTo(ImVec2(bb.Min.x, y2)); |     draw_list->PathLineTo(ImVec2(bb.Min.x, y2)); | ||||||
|     draw_list->PathArcToFast(ImVec2(bb.Min.x + rounding, y1 + rounding), rounding, 6, 9); |     draw_list->PathArcToFast(ImVec2(bb.Min.x + rounding, y1 + rounding), rounding, 6, 9); | ||||||
|     draw_list->PathArcToFast(ImVec2(bb.Max.x - rounding, y1 + rounding), rounding, 9, 12); |     draw_list->PathArcToFast(ImVec2(bb.Max.x - rounding, y1 + rounding), rounding, 9, 12); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user