|
@@ -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 separator_max_x = tab_bar->BarRect.Max.x + IM_FLOOR(window->WindowPadding.x * 0.5f);
|
|
|
|
- window->DrawList->AddLine(ImVec2(separator_min_x, y), ImVec2(separator_max_x, y), col, 1.0f);
|
|
|
|
|
|
+ const float y = tab_bar->BarRect.Max.y;
|
|
|
|
+ window->DrawList->AddRectFilled(ImVec2(tab_bar->SeparatorMinX, y - g.Style.TabBarBorderSize), ImVec2(tab_bar->SeparatorMaxX, y), col);
|
|
}
|
|
}
|
|
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);
|