mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-10-31 05:01:05 +01:00 
			
		
		
		
	Debug Tools: Metrics: Improved Monitors and Viewports minimap display. Highlight on hover.
Added ImGuiViewport ID in Master branch.
This commit is contained in:
		| @@ -68,6 +68,7 @@ Other changes: | |||||||
|   over popups that are also child windows. |   over popups that are also child windows. | ||||||
| - Combo: Fixed not reusing windows optimally when used inside a popup stack. | - Combo: Fixed not reusing windows optimally when used inside a popup stack. | ||||||
| - Debug Tools: Metrics: Fixed debug break in SetShortcutRouting() not handling ImGuiMod_Shortcut redirect. | - Debug Tools: Metrics: Fixed debug break in SetShortcutRouting() not handling ImGuiMod_Shortcut redirect. | ||||||
|  | - Debug Tools: Metrics: Improved Monitors and Viewports minimap display. Highlight on hover. | ||||||
| - Debug Tools: Debug Log: Added "Input Routing" logging. | - Debug Tools: Debug Log: Added "Input Routing" logging. | ||||||
| - Debug Tools: Added "nop" to IM_DEBUG_BREAK macro on GCC to work around GDB bug (#7266) [@Peter0x44] | - Debug Tools: Added "nop" to IM_DEBUG_BREAK macro on GCC to work around GDB bug (#7266) [@Peter0x44] | ||||||
| - Backends: Vulkan: Fixed vkAcquireNextImageKHR() validation errors in VulkanSDK 1.3.275 by | - Backends: Vulkan: Fixed vkAcquireNextImageKHR() validation errors in VulkanSDK 1.3.275 by | ||||||
|   | |||||||
							
								
								
									
										32
									
								
								imgui.cpp
									
									
									
									
									
								
							
							
						
						
									
										32
									
								
								imgui.cpp
									
									
									
									
									
								
							| @@ -1126,6 +1126,7 @@ static void             RenderDimmedBackgroundBehindWindow(ImGuiWindow* window, | |||||||
| static void             RenderDimmedBackgrounds(); | static void             RenderDimmedBackgrounds(); | ||||||
|  |  | ||||||
| // Viewports | // Viewports | ||||||
|  | const ImGuiID           IMGUI_VIEWPORT_DEFAULT_ID = 0x11111111; // Using an arbitrary constant instead of e.g. ImHashStr("ViewportDefault", 0); so it's easier to spot in the debugger. The exact value doesn't matter. | ||||||
| static void             UpdateViewportsNewFrame(); | static void             UpdateViewportsNewFrame(); | ||||||
|  |  | ||||||
| } | } | ||||||
| @@ -3596,6 +3597,7 @@ void ImGui::Initialize() | |||||||
|  |  | ||||||
|     // Create default viewport |     // Create default viewport | ||||||
|     ImGuiViewportP* viewport = IM_NEW(ImGuiViewportP)(); |     ImGuiViewportP* viewport = IM_NEW(ImGuiViewportP)(); | ||||||
|  |     viewport->ID = IMGUI_VIEWPORT_DEFAULT_ID; | ||||||
|     g.Viewports.push_back(viewport); |     g.Viewports.push_back(viewport); | ||||||
|     g.TempBuffer.resize(1024 * 3 + 1, 0); |     g.TempBuffer.resize(1024 * 3 + 1, 0); | ||||||
|  |  | ||||||
| @@ -13975,7 +13977,7 @@ static void SetPlatformImeDataFn_DefaultImpl(ImGuiViewport*, ImGuiPlatformImeDat | |||||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||||
| // [SECTION] METRICS/DEBUGGER WINDOW | // [SECTION] METRICS/DEBUGGER WINDOW | ||||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||||
| // - RenderViewportThumbnail() [Internal] | // - DebugRenderViewportThumbnail() [Internal] | ||||||
| // - RenderViewportsThumbnails() [Internal] | // - RenderViewportsThumbnails() [Internal] | ||||||
| // - DebugTextEncoding() | // - DebugTextEncoding() | ||||||
| // - MetricsHelpMarker() [Internal] | // - MetricsHelpMarker() [Internal] | ||||||
| @@ -14014,7 +14016,7 @@ void ImGui::DebugRenderViewportThumbnail(ImDrawList* draw_list, ImGuiViewportP* | |||||||
|         ImRect thumb_r = thumb_window->Rect(); |         ImRect thumb_r = thumb_window->Rect(); | ||||||
|         ImRect title_r = thumb_window->TitleBarRect(); |         ImRect title_r = thumb_window->TitleBarRect(); | ||||||
|         thumb_r = ImRect(ImTrunc(off + thumb_r.Min * scale), ImTrunc(off +  thumb_r.Max * scale)); |         thumb_r = ImRect(ImTrunc(off + thumb_r.Min * scale), ImTrunc(off +  thumb_r.Max * scale)); | ||||||
|         title_r = ImRect(ImTrunc(off + title_r.Min * scale), ImTrunc(off +  ImVec2(title_r.Max.x, title_r.Min.y) * scale) + ImVec2(0,5)); // Exaggerate title bar height |         title_r = ImRect(ImTrunc(off + title_r.Min * scale), ImTrunc(off +  ImVec2(title_r.Max.x, title_r.Min.y + title_r.GetHeight() * 3.0f) * scale)); // Exaggerate title bar height | ||||||
|         thumb_r.ClipWithFull(bb); |         thumb_r.ClipWithFull(bb); | ||||||
|         title_r.ClipWithFull(bb); |         title_r.ClipWithFull(bb); | ||||||
|         const bool window_is_focused = (g.NavWindow && thumb_window->RootWindowForTitleBarHighlight == g.NavWindow->RootWindowForTitleBarHighlight); |         const bool window_is_focused = (g.NavWindow && thumb_window->RootWindowForTitleBarHighlight == g.NavWindow->RootWindowForTitleBarHighlight); | ||||||
| @@ -14024,6 +14026,8 @@ void ImGui::DebugRenderViewportThumbnail(ImDrawList* draw_list, ImGuiViewportP* | |||||||
|         window->DrawList->AddText(g.Font, g.FontSize * 1.0f, title_r.Min, GetColorU32(ImGuiCol_Text, alpha_mul), thumb_window->Name, FindRenderedTextEnd(thumb_window->Name)); |         window->DrawList->AddText(g.Font, g.FontSize * 1.0f, title_r.Min, GetColorU32(ImGuiCol_Text, alpha_mul), thumb_window->Name, FindRenderedTextEnd(thumb_window->Name)); | ||||||
|     } |     } | ||||||
|     draw_list->AddRect(bb.Min, bb.Max, GetColorU32(ImGuiCol_Border, alpha_mul)); |     draw_list->AddRect(bb.Min, bb.Max, GetColorU32(ImGuiCol_Border, alpha_mul)); | ||||||
|  |     if (viewport->ID == g.DebugMetricsConfig.HighlightViewportID) | ||||||
|  |         window->DrawList->AddRect(bb.Min, bb.Max, IM_COL32(255, 255, 0, 255)); | ||||||
| } | } | ||||||
|  |  | ||||||
| static void RenderViewportsThumbnails() | static void RenderViewportsThumbnails() | ||||||
| @@ -14031,13 +14035,12 @@ static void RenderViewportsThumbnails() | |||||||
|     ImGuiContext& g = *GImGui; |     ImGuiContext& g = *GImGui; | ||||||
|     ImGuiWindow* window = g.CurrentWindow; |     ImGuiWindow* window = g.CurrentWindow; | ||||||
|  |  | ||||||
|     // We don't display full monitor bounds (we could, but it often looks awkward), instead we display just enough to cover all of our viewports. |  | ||||||
|     float SCALE = 1.0f / 8.0f; |     float SCALE = 1.0f / 8.0f; | ||||||
|     ImRect bb_full(FLT_MAX, FLT_MAX, -FLT_MAX, -FLT_MAX); |     ImRect bb_full(g.Viewports[0]->Pos, g.Viewports[0]->Pos + g.Viewports[0]->Size); | ||||||
|     for (ImGuiViewportP* viewport : g.Viewports) |  | ||||||
|         bb_full.Add(viewport->GetMainRect()); |  | ||||||
|     ImVec2 p = window->DC.CursorPos; |     ImVec2 p = window->DC.CursorPos; | ||||||
|     ImVec2 off = p - bb_full.Min * SCALE; |     ImVec2 off = p - bb_full.Min * SCALE; | ||||||
|  |  | ||||||
|  |     // Draw viewports | ||||||
|     for (ImGuiViewportP* viewport : g.Viewports) |     for (ImGuiViewportP* viewport : g.Viewports) | ||||||
|     { |     { | ||||||
|         ImRect viewport_draw_bb(off + (viewport->Pos) * SCALE, off + (viewport->Pos + viewport->Size) * SCALE); |         ImRect viewport_draw_bb(off + (viewport->Pos) * SCALE, off + (viewport->Pos + viewport->Size) * SCALE); | ||||||
| @@ -14280,7 +14283,7 @@ void ImGui::ShowMetricsWindow(bool* p_open) | |||||||
|         MetricsHelpMarker("Will call the IM_DEBUG_BREAK() macro to break in debugger.\nWarning: If you don't have a debugger attached, this will probably crash."); |         MetricsHelpMarker("Will call the IM_DEBUG_BREAK() macro to break in debugger.\nWarning: If you don't have a debugger attached, this will probably crash."); | ||||||
|         if (Checkbox("Show Item Picker", &g.DebugItemPickerActive) && g.DebugItemPickerActive) |         if (Checkbox("Show Item Picker", &g.DebugItemPickerActive) && g.DebugItemPickerActive) | ||||||
|             DebugStartItemPicker(); |             DebugStartItemPicker(); | ||||||
|         Checkbox("Show \"Debug Break\" buttons in other sections", &g.IO.ConfigDebugIsDebuggerPresent); |         Checkbox("Show \"Debug Break\" buttons in other sections (io.ConfigDebugIsDebuggerPresent)", &g.IO.ConfigDebugIsDebuggerPresent); | ||||||
|  |  | ||||||
|         SeparatorText("Visualize"); |         SeparatorText("Visualize"); | ||||||
|  |  | ||||||
| @@ -14416,9 +14419,14 @@ void ImGui::ShowMetricsWindow(bool* p_open) | |||||||
|     // Viewports |     // Viewports | ||||||
|     if (TreeNode("Viewports", "Viewports (%d)", g.Viewports.Size)) |     if (TreeNode("Viewports", "Viewports (%d)", g.Viewports.Size)) | ||||||
|     { |     { | ||||||
|         Indent(GetTreeNodeToLabelSpacing()); |         SetNextItemOpen(true, ImGuiCond_Once); | ||||||
|  |         if (TreeNode("Windows Minimap")) | ||||||
|  |         { | ||||||
|             RenderViewportsThumbnails(); |             RenderViewportsThumbnails(); | ||||||
|         Unindent(GetTreeNodeToLabelSpacing()); |             TreePop(); | ||||||
|  |         } | ||||||
|  |         cfg->HighlightViewportID = 0; | ||||||
|  |  | ||||||
|         for (ImGuiViewportP* viewport : g.Viewports) |         for (ImGuiViewportP* viewport : g.Viewports) | ||||||
|             DebugNodeViewport(viewport); |             DebugNodeViewport(viewport); | ||||||
|         TreePop(); |         TreePop(); | ||||||
| @@ -15120,8 +15128,12 @@ void ImGui::DebugNodeTabBar(ImGuiTabBar* tab_bar, const char* label) | |||||||
|  |  | ||||||
| void ImGui::DebugNodeViewport(ImGuiViewportP* viewport) | void ImGui::DebugNodeViewport(ImGuiViewportP* viewport) | ||||||
| { | { | ||||||
|  |     ImGuiContext& g = *GImGui; | ||||||
|     SetNextItemOpen(true, ImGuiCond_Once); |     SetNextItemOpen(true, ImGuiCond_Once); | ||||||
|     if (TreeNode("viewport0", "Viewport #%d", 0)) |     bool open = TreeNode("viewport0", "Viewport #%d", 0); | ||||||
|  |     if (IsItemHovered()) | ||||||
|  |         g.DebugMetricsConfig.HighlightViewportID = viewport->ID; | ||||||
|  |     if (open) | ||||||
|     { |     { | ||||||
|         ImGuiWindowFlags flags = viewport->Flags; |         ImGuiWindowFlags flags = viewport->Flags; | ||||||
|         BulletText("Main Pos: (%.0f,%.0f), Size: (%.0f,%.0f)\nWorkArea Offset Left: %.0f Top: %.0f, Right: %.0f, Bottom: %.0f", |         BulletText("Main Pos: (%.0f,%.0f), Size: (%.0f,%.0f)\nWorkArea Offset Left: %.0f Top: %.0f, Right: %.0f, Bottom: %.0f", | ||||||
|   | |||||||
							
								
								
									
										1
									
								
								imgui.h
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								imgui.h
									
									
									
									
									
								
							| @@ -3123,6 +3123,7 @@ enum ImGuiViewportFlags_ | |||||||
| //   - Windows are generally trying to stay within the Work Area of their host viewport. | //   - Windows are generally trying to stay within the Work Area of their host viewport. | ||||||
| struct ImGuiViewport | struct ImGuiViewport | ||||||
| { | { | ||||||
|  |     ImGuiID             ID;                     // Unique identifier for the viewport | ||||||
|     ImGuiViewportFlags  Flags;                  // See ImGuiViewportFlags_ |     ImGuiViewportFlags  Flags;                  // See ImGuiViewportFlags_ | ||||||
|     ImVec2              Pos;                    // Main Area: Position of the viewport (Dear ImGui coordinates are the same as OS desktop/native coordinates) |     ImVec2              Pos;                    // Main Area: Position of the viewport (Dear ImGui coordinates are the same as OS desktop/native coordinates) | ||||||
|     ImVec2              Size;                   // Main Area: Size of the viewport. |     ImVec2              Size;                   // Main Area: Size of the viewport. | ||||||
|   | |||||||
| @@ -1865,6 +1865,8 @@ struct ImGuiMetricsConfig | |||||||
|     bool        ShowAtlasTintedWithTextColor = false; |     bool        ShowAtlasTintedWithTextColor = false; | ||||||
|     int         ShowWindowsRectsType = -1; |     int         ShowWindowsRectsType = -1; | ||||||
|     int         ShowTablesRectsType = -1; |     int         ShowTablesRectsType = -1; | ||||||
|  |     int         HighlightMonitorIdx = -1; | ||||||
|  |     ImGuiID     HighlightViewportID = 0; | ||||||
| }; | }; | ||||||
|  |  | ||||||
| struct ImGuiStackLevelInfo | struct ImGuiStackLevelInfo | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user