mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-10-31 05:01:05 +01:00 
			
		
		
		
	Internals: Clarified internal storage for RootWindow with specific semantic (the Docking branch will need to introduce finer differenciation there.)
This commit is contained in:
		
							
								
								
									
										32
									
								
								imgui.cpp
									
									
									
									
									
								
							
							
						
						
									
										32
									
								
								imgui.cpp
									
									
									
									
									
								
							| @@ -1938,9 +1938,10 @@ ImGuiWindow::ImGuiWindow(ImGuiContext* context, const char* name) | ||||
|     DrawList->_OwnerName = Name; | ||||
|     ParentWindow = NULL; | ||||
|     RootWindow = NULL; | ||||
|     RootNonPopupWindow = NULL; | ||||
|     RootWindowForTitleBarHighlight = NULL; | ||||
|     RootWindowForTabbing = NULL; | ||||
|     RootWindowForNav = NULL; | ||||
|  | ||||
|     NavRootWindow = NULL; | ||||
|     NavLastIds[0] = NavLastIds[1] = 0; | ||||
|     NavRectRel[0] = NavRectRel[1] = ImRect(); | ||||
|     NavLastChildNavWindow = NULL; | ||||
| @@ -2408,7 +2409,7 @@ bool ImGui::ItemAdd(const ImRect& bb, ImGuiID id, const ImRect* nav_bb_arg) | ||||
|         //      We could early out with "if (is_clipped && !g.NavInitRequest) return false;" but when we wouldn't be able to reach unclipped widgets. This would work if user had explicit scrolling control (e.g. mapped on a stick) | ||||
|         window->DC.NavLayerActiveMaskNext |= window->DC.NavLayerCurrentMask; | ||||
|         if (g.NavId == id || g.NavAnyRequest) | ||||
|             if (g.NavWindow->NavRootWindow == window->NavRootWindow) | ||||
|             if (g.NavWindow->RootWindowForNav == window->RootWindowForNav) | ||||
|                 if (window == g.NavWindow || ((window->Flags | g.NavWindow->Flags) & ImGuiWindowFlags_NavFlattened)) | ||||
|                     NavProcessItem(window, nav_bb_arg ? *nav_bb_arg : bb, id); | ||||
|     } | ||||
| @@ -2808,7 +2809,7 @@ static void ImGui::NavUpdateWindowing() | ||||
|     if (start_windowing_with_gamepad || start_windowing_with_keyboard) | ||||
|         if (ImGuiWindow* window = g.NavWindow ? g.NavWindow : FindWindowNavigable(g.Windows.Size - 1, -INT_MAX, -1)) | ||||
|         { | ||||
|             g.NavWindowingTarget = window->RootNonPopupWindow; | ||||
|             g.NavWindowingTarget = window->RootWindowForTabbing; | ||||
|             g.NavWindowingHighlightTimer = g.NavWindowingHighlightAlpha = 0.0f; | ||||
|             g.NavWindowingToggleLayer = start_windowing_with_keyboard ? false : true; | ||||
|             g.NavWindowingInputSource = start_windowing_with_keyboard ? ImGuiInputSource_NavKeyboard : ImGuiInputSource_NavGamepad; | ||||
| @@ -2877,7 +2878,7 @@ static void ImGui::NavUpdateWindowing() | ||||
|     } | ||||
|  | ||||
|     // Apply final focus | ||||
|     if (apply_focus_window && (g.NavWindow == NULL || apply_focus_window != g.NavWindow->RootNonPopupWindow)) | ||||
|     if (apply_focus_window && (g.NavWindow == NULL || apply_focus_window != g.NavWindow->RootWindowForTabbing)) | ||||
|     { | ||||
|         g.NavDisableHighlight = false; | ||||
|         g.NavDisableMouseHover = true; | ||||
| @@ -5659,14 +5660,13 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags) | ||||
|  | ||||
|         // Initialize | ||||
|         window->ParentWindow = parent_window; | ||||
|         window->RootWindow = window->RootNonPopupWindow = window; | ||||
|         window->RootWindow = window->RootWindowForTitleBarHighlight = window->RootWindowForTabbing = window->RootWindowForNav = window; | ||||
|         if (parent_window && (flags & ImGuiWindowFlags_ChildWindow) && !window_is_child_tooltip) | ||||
|             window->RootWindow = parent_window->RootWindow; | ||||
|         if (parent_window && !(flags & ImGuiWindowFlags_Modal) && (flags & (ImGuiWindowFlags_ChildWindow | ImGuiWindowFlags_Popup))) | ||||
|             window->RootNonPopupWindow = parent_window->RootNonPopupWindow; | ||||
|         window->NavRootWindow = window; | ||||
|         while (window->NavRootWindow->Flags & ImGuiWindowFlags_NavFlattened) | ||||
|             window->NavRootWindow = window->NavRootWindow->ParentWindow; | ||||
|             window->RootWindowForTitleBarHighlight = window->RootWindowForTabbing = parent_window->RootWindowForTitleBarHighlight; // Same value in master branch, will differ for docking | ||||
|         while (window->RootWindowForNav->Flags & ImGuiWindowFlags_NavFlattened) | ||||
|             window->RootWindowForNav = window->RootWindowForNav->ParentWindow; | ||||
|  | ||||
|         window->Active = true; | ||||
|         window->BeginOrderWithinParent = 0; | ||||
| @@ -5894,14 +5894,14 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags) | ||||
|         // Draw window + handle manual resize | ||||
|         const float window_rounding = window->WindowRounding; | ||||
|         const float window_border_size = window->WindowBorderSize; | ||||
|         ImRect title_bar_rect = window->TitleBarRect(); | ||||
|         const bool window_is_focused = want_focus || (g.NavWindow && window->RootNonPopupWindow == g.NavWindow->RootNonPopupWindow); | ||||
|         const bool title_bar_is_highlight = want_focus || (g.NavWindow && window->RootWindowForTitleBarHighlight == g.NavWindow->RootWindowForTitleBarHighlight); | ||||
|         const ImRect title_bar_rect = window->TitleBarRect(); | ||||
|         if (window->Collapsed) | ||||
|         { | ||||
|             // Title bar only | ||||
|             float backup_border_size = style.FrameBorderSize; | ||||
|             g.Style.FrameBorderSize = window->WindowBorderSize; | ||||
|             ImU32 title_bar_col = GetColorU32((window_is_focused && !g.NavDisableHighlight) ? ImGuiCol_TitleBgActive : ImGuiCol_TitleBgCollapsed); | ||||
|             ImU32 title_bar_col = GetColorU32((title_bar_is_highlight && !g.NavDisableHighlight) ? ImGuiCol_TitleBgActive : ImGuiCol_TitleBgCollapsed); | ||||
|             RenderFrame(title_bar_rect.Min, title_bar_rect.Max, title_bar_col, true, window_rounding); | ||||
|             g.Style.FrameBorderSize = backup_border_size; | ||||
|         } | ||||
| @@ -5917,7 +5917,7 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags) | ||||
|             window->DrawList->AddRectFilled(window->Pos+ImVec2(0,window->TitleBarHeight()), window->Pos+window->Size, bg_col, window_rounding, (flags & ImGuiWindowFlags_NoTitleBar) ? ImDrawCornerFlags_All : ImDrawCornerFlags_Bot); | ||||
|  | ||||
|             // Title bar | ||||
|             ImU32 title_bar_col = GetColorU32(window->Collapsed ? ImGuiCol_TitleBgCollapsed : window_is_focused ? ImGuiCol_TitleBgActive : ImGuiCol_TitleBg); | ||||
|             ImU32 title_bar_col = GetColorU32(window->Collapsed ? ImGuiCol_TitleBgCollapsed : title_bar_is_highlight ? ImGuiCol_TitleBgActive : ImGuiCol_TitleBg); | ||||
|             if (!(flags & ImGuiWindowFlags_NoTitleBar)) | ||||
|                 window->DrawList->AddRectFilled(title_bar_rect.Min, title_bar_rect.Max, title_bar_col, window_rounding, ImDrawCornerFlags_Top); | ||||
|  | ||||
| @@ -6753,7 +6753,7 @@ bool ImGui::IsWindowFocused(ImGuiFocusedFlags flags) | ||||
| bool ImGui::IsWindowNavFocusable(ImGuiWindow* window) | ||||
| { | ||||
|     ImGuiContext& g = *GImGui; | ||||
|     return window->Active && window == window->RootNonPopupWindow && (!(window->Flags & ImGuiWindowFlags_NoNavFocus) || window == g.NavWindow); | ||||
|     return window->Active && window == window->RootWindowForTabbing && (!(window->Flags & ImGuiWindowFlags_NoNavFocus) || window == g.NavWindow); | ||||
| } | ||||
|  | ||||
| float ImGui::GetWindowWidth() | ||||
| @@ -7198,7 +7198,7 @@ void ImGui::SetItemDefaultFocus() | ||||
|     ImGuiWindow* window = g.CurrentWindow; | ||||
|     if (!window->Appearing) | ||||
|         return; | ||||
|     if (g.NavWindow == window->NavRootWindow && (g.NavInitRequest || g.NavInitResultId != 0) && g.NavLayer == g.NavWindow->DC.NavLayerCurrent) | ||||
|     if (g.NavWindow == window->RootWindowForNav && (g.NavInitRequest || g.NavInitResultId != 0) && g.NavLayer == g.NavWindow->DC.NavLayerCurrent) | ||||
|     { | ||||
|         g.NavInitRequest = false; | ||||
|         g.NavInitResultId = g.NavWindow->DC.LastItemId; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user