mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-11-04 07:01:04 +01:00 
			
		
		
		
	Fixed tooltip in own viewport over modal from being incorrectly dimmed. (#4729)
Normally we would aim to ensure that g.Windows[] gets maintained to reflect display layer but it is presently non trivial.
This commit is contained in:
		
							
								
								
									
										18
									
								
								imgui.cpp
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								imgui.cpp
									
									
									
									
									
								
							@@ -4365,11 +4365,15 @@ static void AddWindowToDrawData(ImGuiWindow* window, int layer)
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Layer is locked for the root window, however child windows may use a different viewport (e.g. extruding menu)
 | 
					static inline int GetWindowDisplayLayer(ImGuiWindow* window)
 | 
				
			||||||
static void AddRootWindowToDrawData(ImGuiWindow* window)
 | 
					 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    int layer = (window->Flags & ImGuiWindowFlags_Tooltip) ? 1 : 0;
 | 
					    return (window->Flags & ImGuiWindowFlags_Tooltip) ? 1 : 0;
 | 
				
			||||||
    AddWindowToDrawData(window, layer);
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Layer is locked for the root window, however child windows may use a different viewport (e.g. extruding menu)
 | 
				
			||||||
 | 
					static inline void AddRootWindowToDrawData(ImGuiWindow* window)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    AddWindowToDrawData(window, GetWindowDisplayLayer(window));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ImDrawDataBuilder::FlattenIntoSingleLayer()
 | 
					void ImDrawDataBuilder::FlattenIntoSingleLayer()
 | 
				
			||||||
@@ -6763,6 +6767,12 @@ bool ImGui::IsWindowChildOf(ImGuiWindow* window, ImGuiWindow* potential_parent,
 | 
				
			|||||||
bool ImGui::IsWindowAbove(ImGuiWindow* potential_above, ImGuiWindow* potential_below)
 | 
					bool ImGui::IsWindowAbove(ImGuiWindow* potential_above, ImGuiWindow* potential_below)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiContext& g = *GImGui;
 | 
					    ImGuiContext& g = *GImGui;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // It would be saner to ensure that display layer is always reflected in the g.Windows[] order, which would likely requires altering all manipulations of that array
 | 
				
			||||||
 | 
					    const int display_layer_delta = GetWindowDisplayLayer(potential_above) - GetWindowDisplayLayer(potential_below);
 | 
				
			||||||
 | 
					    if (display_layer_delta != 0)
 | 
				
			||||||
 | 
					        return display_layer_delta > 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for (int i = g.Windows.Size - 1; i >= 0; i--)
 | 
					    for (int i = g.Windows.Size - 1; i >= 0; i--)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        ImGuiWindow* candidate_window = g.Windows[i];
 | 
					        ImGuiWindow* candidate_window = g.Windows[i];
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user