mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-10-31 21:21:06 +01:00 
			
		
		
		
	Internals: TabBar: minor tweaks and renaming.
This commit is contained in:
		| @@ -1897,7 +1897,7 @@ struct ImGuiTabBar | |||||||
|     ImGuiTabBarFlags    Flags; |     ImGuiTabBarFlags    Flags; | ||||||
|     ImGuiID             ID;                     // Zero for tab-bars used by docking |     ImGuiID             ID;                     // Zero for tab-bars used by docking | ||||||
|     ImGuiID             SelectedTabId;          // Selected tab/window |     ImGuiID             SelectedTabId;          // Selected tab/window | ||||||
|     ImGuiID             NextSelectedTabId; |     ImGuiID             NextSelectedTabId;      // Next selected tab/window. Will also trigger a scrolling animation | ||||||
|     ImGuiID             VisibleTabId;           // Can occasionally be != SelectedTabId (e.g. when previewing contents for CTRL+TAB preview) |     ImGuiID             VisibleTabId;           // Can occasionally be != SelectedTabId (e.g. when previewing contents for CTRL+TAB preview) | ||||||
|     int                 CurrFrameVisible; |     int                 CurrFrameVisible; | ||||||
|     int                 PrevFrameVisible; |     int                 PrevFrameVisible; | ||||||
|   | |||||||
| @@ -6906,7 +6906,7 @@ namespace ImGui | |||||||
|     static ImU32            TabBarCalcTabID(ImGuiTabBar* tab_bar, const char* label); |     static ImU32            TabBarCalcTabID(ImGuiTabBar* tab_bar, const char* label); | ||||||
|     static float            TabBarCalcMaxTabWidth(); |     static float            TabBarCalcMaxTabWidth(); | ||||||
|     static float            TabBarScrollClamp(ImGuiTabBar* tab_bar, float scrolling); |     static float            TabBarScrollClamp(ImGuiTabBar* tab_bar, float scrolling); | ||||||
|     static void             TabBarScrollToTab(ImGuiTabBar* tab_bar, ImGuiTabItem* tab, ImGuiTabBarSection* sections); |     static void             TabBarScrollToTab(ImGuiTabBar* tab_bar, ImGuiID tab_id, ImGuiTabBarSection* sections); | ||||||
|     static ImGuiTabItem*    TabBarScrollingButtons(ImGuiTabBar* tab_bar); |     static ImGuiTabItem*    TabBarScrollingButtons(ImGuiTabBar* tab_bar); | ||||||
|     static ImGuiTabItem*    TabBarTabListPopupButton(ImGuiTabBar* tab_bar); |     static ImGuiTabItem*    TabBarTabListPopupButton(ImGuiTabBar* tab_bar); | ||||||
| } | } | ||||||
| @@ -7117,12 +7117,12 @@ static void ImGui::TabBarLayout(ImGuiTabBar* tab_bar) | |||||||
|     sections[1].Spacing = sections[1].TabCount > 0 && sections[2].TabCount > 0 ? g.Style.ItemInnerSpacing.x : 0.0f; |     sections[1].Spacing = sections[1].TabCount > 0 && sections[2].TabCount > 0 ? g.Style.ItemInnerSpacing.x : 0.0f; | ||||||
|  |  | ||||||
|     // Setup next selected tab |     // Setup next selected tab | ||||||
|     ImGuiID scroll_track_selected_tab_id = 0; |     ImGuiID scroll_to_tab_id = 0; | ||||||
|     if (tab_bar->NextSelectedTabId) |     if (tab_bar->NextSelectedTabId) | ||||||
|     { |     { | ||||||
|         tab_bar->SelectedTabId = tab_bar->NextSelectedTabId; |         tab_bar->SelectedTabId = tab_bar->NextSelectedTabId; | ||||||
|         tab_bar->NextSelectedTabId = 0; |         tab_bar->NextSelectedTabId = 0; | ||||||
|         scroll_track_selected_tab_id = tab_bar->SelectedTabId; |         scroll_to_tab_id = tab_bar->SelectedTabId; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     // Process order change request (we could probably process it when requested but it's just saner to do it in a single spot). |     // Process order change request (we could probably process it when requested but it's just saner to do it in a single spot). | ||||||
| @@ -7130,7 +7130,7 @@ static void ImGui::TabBarLayout(ImGuiTabBar* tab_bar) | |||||||
|     { |     { | ||||||
|         if (TabBarProcessReorder(tab_bar)) |         if (TabBarProcessReorder(tab_bar)) | ||||||
|             if (tab_bar->ReorderRequestTabId == tab_bar->SelectedTabId) |             if (tab_bar->ReorderRequestTabId == tab_bar->SelectedTabId) | ||||||
|                 scroll_track_selected_tab_id = tab_bar->ReorderRequestTabId; |                 scroll_to_tab_id = tab_bar->ReorderRequestTabId; | ||||||
|         tab_bar->ReorderRequestTabId = 0; |         tab_bar->ReorderRequestTabId = 0; | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -7138,7 +7138,7 @@ static void ImGui::TabBarLayout(ImGuiTabBar* tab_bar) | |||||||
|     const bool tab_list_popup_button = (tab_bar->Flags & ImGuiTabBarFlags_TabListPopupButton) != 0; |     const bool tab_list_popup_button = (tab_bar->Flags & ImGuiTabBarFlags_TabListPopupButton) != 0; | ||||||
|     if (tab_list_popup_button) |     if (tab_list_popup_button) | ||||||
|         if (ImGuiTabItem* tab_to_select = TabBarTabListPopupButton(tab_bar)) // NB: Will alter BarRect.Min.x! |         if (ImGuiTabItem* tab_to_select = TabBarTabListPopupButton(tab_bar)) // NB: Will alter BarRect.Min.x! | ||||||
|             scroll_track_selected_tab_id = tab_bar->SelectedTabId = tab_to_select->ID; |             scroll_to_tab_id = tab_bar->SelectedTabId = tab_to_select->ID; | ||||||
|  |  | ||||||
|     // Leading/Trailing tabs will be shrink only if central one aren't visible anymore, so layout the shrink data as: leading, trailing, central |     // Leading/Trailing tabs will be shrink only if central one aren't visible anymore, so layout the shrink data as: leading, trailing, central | ||||||
|     // (whereas our tabs are stored as: leading, central, trailing) |     // (whereas our tabs are stored as: leading, central, trailing) | ||||||
| @@ -7158,8 +7158,8 @@ static void ImGui::TabBarLayout(ImGuiTabBar* tab_bar) | |||||||
|             most_recently_selected_tab = tab; |             most_recently_selected_tab = tab; | ||||||
|         if (tab->ID == tab_bar->SelectedTabId) |         if (tab->ID == tab_bar->SelectedTabId) | ||||||
|             found_selected_tab_id = true; |             found_selected_tab_id = true; | ||||||
|         if (scroll_track_selected_tab_id == 0 && g.NavJustMovedToId == tab->ID) |         if (scroll_to_tab_id == 0 && g.NavJustMovedToId == tab->ID) | ||||||
|             scroll_track_selected_tab_id = tab->ID; |             scroll_to_tab_id = tab->ID; | ||||||
|  |  | ||||||
|         // Refresh tab width immediately, otherwise changes of style e.g. style.FramePadding.x would noticeably lag in the tab bar. |         // Refresh tab width immediately, otherwise changes of style e.g. style.FramePadding.x would noticeably lag in the tab bar. | ||||||
|         // Additionally, when using TabBarAddTab() to manipulate tab bar order we occasionally insert new tabs that don't have a width yet, |         // Additionally, when using TabBarAddTab() to manipulate tab bar order we occasionally insert new tabs that don't have a width yet, | ||||||
| @@ -7190,11 +7190,11 @@ static void ImGui::TabBarLayout(ImGuiTabBar* tab_bar) | |||||||
|     // Horizontal scrolling buttons |     // Horizontal scrolling buttons | ||||||
|     // (note that TabBarScrollButtons() will alter BarRect.Max.x) |     // (note that TabBarScrollButtons() will alter BarRect.Max.x) | ||||||
|     if ((tab_bar->WidthAllTabsIdeal > tab_bar->BarRect.GetWidth() && tab_bar->Tabs.Size > 1) && !(tab_bar->Flags & ImGuiTabBarFlags_NoTabListScrollingButtons) && (tab_bar->Flags & ImGuiTabBarFlags_FittingPolicyScroll)) |     if ((tab_bar->WidthAllTabsIdeal > tab_bar->BarRect.GetWidth() && tab_bar->Tabs.Size > 1) && !(tab_bar->Flags & ImGuiTabBarFlags_NoTabListScrollingButtons) && (tab_bar->Flags & ImGuiTabBarFlags_FittingPolicyScroll)) | ||||||
|         if (ImGuiTabItem* scroll_track_selected_tab = TabBarScrollingButtons(tab_bar)) |         if (ImGuiTabItem* scroll_and_select_tab = TabBarScrollingButtons(tab_bar)) | ||||||
|         { |         { | ||||||
|             scroll_track_selected_tab_id = scroll_track_selected_tab->ID; |             scroll_to_tab_id = scroll_and_select_tab->ID; | ||||||
|             if (!(scroll_track_selected_tab->Flags & ImGuiTabItemFlags_Button)) |             if ((scroll_and_select_tab->Flags & ImGuiTabItemFlags_Button) == 0) | ||||||
|                 tab_bar->SelectedTabId = scroll_track_selected_tab_id; |                 tab_bar->SelectedTabId = scroll_to_tab_id; | ||||||
|         } |         } | ||||||
|  |  | ||||||
|     // Shrink widths if full tabs don't fit in their allocated space |     // Shrink widths if full tabs don't fit in their allocated space | ||||||
| @@ -7254,16 +7254,15 @@ static void ImGui::TabBarLayout(ImGuiTabBar* tab_bar) | |||||||
|     if (found_selected_tab_id == false) |     if (found_selected_tab_id == false) | ||||||
|         tab_bar->SelectedTabId = 0; |         tab_bar->SelectedTabId = 0; | ||||||
|     if (tab_bar->SelectedTabId == 0 && tab_bar->NextSelectedTabId == 0 && most_recently_selected_tab != NULL) |     if (tab_bar->SelectedTabId == 0 && tab_bar->NextSelectedTabId == 0 && most_recently_selected_tab != NULL) | ||||||
|         scroll_track_selected_tab_id = tab_bar->SelectedTabId = most_recently_selected_tab->ID; |         scroll_to_tab_id = tab_bar->SelectedTabId = most_recently_selected_tab->ID; | ||||||
|  |  | ||||||
|     // Lock in visible tab |     // Lock in visible tab | ||||||
|     tab_bar->VisibleTabId = tab_bar->SelectedTabId; |     tab_bar->VisibleTabId = tab_bar->SelectedTabId; | ||||||
|     tab_bar->VisibleTabWasSubmitted = false; |     tab_bar->VisibleTabWasSubmitted = false; | ||||||
|  |  | ||||||
|     // Update scrolling |     // Update scrolling | ||||||
|     if (scroll_track_selected_tab_id) |     if (scroll_to_tab_id != 0) | ||||||
|         if (ImGuiTabItem* scroll_track_selected_tab = TabBarFindTabByID(tab_bar, scroll_track_selected_tab_id)) |         TabBarScrollToTab(tab_bar, scroll_to_tab_id, sections); | ||||||
|             TabBarScrollToTab(tab_bar, scroll_track_selected_tab, sections); |  | ||||||
|     tab_bar->ScrollingAnim = TabBarScrollClamp(tab_bar, tab_bar->ScrollingAnim); |     tab_bar->ScrollingAnim = TabBarScrollClamp(tab_bar, tab_bar->ScrollingAnim); | ||||||
|     tab_bar->ScrollingTarget = TabBarScrollClamp(tab_bar, tab_bar->ScrollingTarget); |     tab_bar->ScrollingTarget = TabBarScrollClamp(tab_bar, tab_bar->ScrollingTarget); | ||||||
|     if (tab_bar->ScrollingAnim != tab_bar->ScrollingTarget) |     if (tab_bar->ScrollingAnim != tab_bar->ScrollingTarget) | ||||||
| @@ -7363,8 +7362,12 @@ static float ImGui::TabBarScrollClamp(ImGuiTabBar* tab_bar, float scrolling) | |||||||
|     return ImMax(scrolling, 0.0f); |     return ImMax(scrolling, 0.0f); | ||||||
| } | } | ||||||
|  |  | ||||||
| static void ImGui::TabBarScrollToTab(ImGuiTabBar* tab_bar, ImGuiTabItem* tab, ImGuiTabBarSection* sections) | // Note: we may scroll to tab that are not selected! e.g. using keyboard arrow keys | ||||||
|  | static void ImGui::TabBarScrollToTab(ImGuiTabBar* tab_bar, ImGuiID tab_id, ImGuiTabBarSection* sections) | ||||||
| { | { | ||||||
|  |     ImGuiTabItem* tab = TabBarFindTabByID(tab_bar, tab_id); | ||||||
|  |     if (tab == NULL) | ||||||
|  |         return; | ||||||
|     if (tab->Flags & (ImGuiTabItemFlags_Leading | ImGuiTabItemFlags_Trailing)) |     if (tab->Flags & (ImGuiTabItemFlags_Leading | ImGuiTabItemFlags_Trailing)) | ||||||
|         return; |         return; | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user