|
@@ -7090,6 +7090,7 @@ bool ImGui::TabItemEx(ImGuiTabBar* tab_bar, const char* label, bool* p_open,
|
|
|
tab_bar->NextSelectedTabId = id;
|
|
|
|
|
|
// Lock visibility
|
|
|
+ // (Note: tab_contents_visible != tab_selected... because CTRL+TAB operations may preview some tabs without selecting them!)
|
|
|
bool tab_contents_visible = (tab_bar->VisibleTabId == id);
|
|
|
if (tab_contents_visible)
|
|
|
tab_bar->VisibleTabWasSubmitted = true;
|
|
@@ -7195,7 +7196,7 @@ bool ImGui::TabItemEx(ImGuiTabBar* tab_bar, const char* label, bool* p_open,
|
|
|
|
|
|
// Render tab label, process close button
|
|
|
const ImGuiID close_button_id = p_open ? window->GetID((void*)((intptr_t)id + 1)) : 0;
|
|
|
- bool just_closed = TabItemLabelAndCloseButton(display_draw_list, bb, flags, tab_bar->FramePadding, label, id, close_button_id);
|
|
|
+ bool just_closed = TabItemLabelAndCloseButton(display_draw_list, bb, flags, tab_bar->FramePadding, label, id, close_button_id, tab_contents_visible);
|
|
|
if (just_closed && p_open != NULL)
|
|
|
{
|
|
|
*p_open = false;
|
|
@@ -7270,13 +7271,21 @@ void ImGui::TabItemBackground(ImDrawList* draw_list, const ImRect& bb, ImGuiTabI
|
|
|
|
|
|
// Render text label (with custom clipping) + Unsaved Document marker + Close Button logic
|
|
|
// We tend to lock style.FramePadding for a given tab-bar, hence the 'frame_padding' parameter.
|
|
|
-bool ImGui::TabItemLabelAndCloseButton(ImDrawList* draw_list, const ImRect& bb, ImGuiTabItemFlags flags, ImVec2 frame_padding, const char* label, ImGuiID tab_id, ImGuiID close_button_id)
|
|
|
+bool ImGui::TabItemLabelAndCloseButton(ImDrawList* draw_list, const ImRect& bb, ImGuiTabItemFlags flags, ImVec2 frame_padding, const char* label, ImGuiID tab_id, ImGuiID close_button_id, bool is_contents_visible)
|
|
|
{
|
|
|
ImGuiContext& g = *GImGui;
|
|
|
ImVec2 label_size = CalcTextSize(label, NULL, true);
|
|
|
if (bb.GetWidth() <= 1.0f)
|
|
|
return false;
|
|
|
|
|
|
+ // In Style V2 we'll have full override of all colors per state (e.g. focused, selected)
|
|
|
+ // But right now if you want to alter text color of tabs this is what you need to do.
|
|
|
+#if 0
|
|
|
+ const float backup_alpha = g.Style.Alpha;
|
|
|
+ if (!is_contents_visible)
|
|
|
+ g.Style.Alpha *= 0.7f;
|
|
|
+#endif
|
|
|
+
|
|
|
// Render text label (with clipping + alpha gradient) + unsaved marker
|
|
|
const char* TAB_UNSAVED_MARKER = "*";
|
|
|
ImRect text_pixel_clip_bb(bb.Min.x + frame_padding.x, bb.Min.y + frame_padding.y, bb.Max.x - frame_padding.x, bb.Max.y);
|
|
@@ -7296,8 +7305,9 @@ bool ImGui::TabItemLabelAndCloseButton(ImDrawList* draw_list, const ImRect& bb,
|
|
|
bool close_button_pressed = false;
|
|
|
bool close_button_visible = false;
|
|
|
if (close_button_id != 0)
|
|
|
- if (g.HoveredId == tab_id || g.HoveredId == close_button_id || g.ActiveId == close_button_id)
|
|
|
- close_button_visible = true;
|
|
|
+ if (is_contents_visible || bb.GetWidth() >= g.Style.TabMinWidthForUnselectedCloseButton)
|
|
|
+ if (g.HoveredId == tab_id || g.HoveredId == close_button_id || g.ActiveId == close_button_id)
|
|
|
+ close_button_visible = true;
|
|
|
if (close_button_visible)
|
|
|
{
|
|
|
ImGuiItemHoveredDataBackup last_item_backup;
|
|
@@ -7318,6 +7328,11 @@ bool ImGui::TabItemLabelAndCloseButton(ImDrawList* draw_list, const ImRect& bb,
|
|
|
float ellipsis_max_x = close_button_visible ? text_pixel_clip_bb.Max.x : bb.Max.x - 1.0f;
|
|
|
RenderTextEllipsis(draw_list, text_ellipsis_clip_bb.Min, text_ellipsis_clip_bb.Max, text_pixel_clip_bb.Max.x, ellipsis_max_x, label, NULL, &label_size);
|
|
|
|
|
|
+#if 0
|
|
|
+ if (!is_contents_visible)
|
|
|
+ g.Style.Alpha = backup_alpha;
|
|
|
+#endif
|
|
|
+
|
|
|
return close_button_pressed;
|
|
|
}
|
|
|
|