mirror of
https://github.com/Drezil/imgui.git
synced 2025-07-06 04:58:47 +02:00
Internals: removed HoveredRootWindow, tweak IsWindowHovered().
This commit is contained in:
29
imgui.cpp
29
imgui.cpp
@ -3557,7 +3557,7 @@ void ImGui::UpdateMouseMovingWindowEndFrame()
|
||||
{
|
||||
// Handle the edge case of a popup being closed while clicking in its empty space.
|
||||
// If we try to focus it, FocusWindow() > ClosePopupsOverWindow() will accidentally close any parent popups because they are not linked together any more.
|
||||
ImGuiWindow* root_window = g.HoveredRootWindow;
|
||||
ImGuiWindow* root_window = g.HoveredWindow ? g.HoveredWindow->RootWindow : NULL;
|
||||
const bool is_closed_popup = root_window && (root_window->Flags & ImGuiWindowFlags_Popup) && !IsPopupOpen(root_window->PopupId, ImGuiPopupFlags_AnyPopupLevel);
|
||||
|
||||
if (root_window != NULL && !is_closed_popup)
|
||||
@ -3794,7 +3794,7 @@ void ImGui::UpdateHoveredWindowAndCaptureFlags()
|
||||
|
||||
// Modal windows prevents mouse from hovering behind them.
|
||||
ImGuiWindow* modal_window = GetTopMostPopupModal();
|
||||
if (modal_window && g.HoveredRootWindow && !IsWindowChildOf(g.HoveredRootWindow, modal_window))
|
||||
if (modal_window && g.HoveredWindow && !IsWindowChildOf(g.HoveredWindow->RootWindow, modal_window))
|
||||
clear_hovered_windows = true;
|
||||
|
||||
// Disabled mouse?
|
||||
@ -3822,7 +3822,7 @@ void ImGui::UpdateHoveredWindowAndCaptureFlags()
|
||||
clear_hovered_windows = true;
|
||||
|
||||
if (clear_hovered_windows)
|
||||
g.HoveredWindow = g.HoveredRootWindow = g.HoveredWindowUnderMovingWindow = NULL;
|
||||
g.HoveredWindow = g.HoveredWindowUnderMovingWindow = NULL;
|
||||
|
||||
// Update io.WantCaptureMouse for the user application (true = dispatch mouse info to imgui, false = dispatch mouse info to Dear ImGui + app)
|
||||
if (g.WantCaptureMouseNextFrame != -1)
|
||||
@ -4146,7 +4146,7 @@ void ImGui::Shutdown(ImGuiContext* context)
|
||||
g.CurrentWindowStack.clear();
|
||||
g.WindowsById.Clear();
|
||||
g.NavWindow = NULL;
|
||||
g.HoveredWindow = g.HoveredRootWindow = g.HoveredWindowUnderMovingWindow = NULL;
|
||||
g.HoveredWindow = g.HoveredWindowUnderMovingWindow = NULL;
|
||||
g.ActiveIdWindow = g.ActiveIdPreviousFrameWindow = NULL;
|
||||
g.MovingWindow = NULL;
|
||||
g.ColorStack.clear();
|
||||
@ -4550,7 +4550,6 @@ static void FindHoveredWindow()
|
||||
}
|
||||
|
||||
g.HoveredWindow = hovered_window;
|
||||
g.HoveredRootWindow = g.HoveredWindow ? g.HoveredWindow->RootWindow : NULL;
|
||||
g.HoveredWindowUnderMovingWindow = hovered_window_ignoring_moving_window;
|
||||
}
|
||||
|
||||
@ -6560,30 +6559,28 @@ bool ImGui::IsWindowHovered(ImGuiHoveredFlags flags)
|
||||
{
|
||||
IM_ASSERT((flags & ImGuiHoveredFlags_AllowWhenOverlapped) == 0); // Flags not supported by this function
|
||||
ImGuiContext& g = *GImGui;
|
||||
if (g.HoveredWindow == NULL)
|
||||
return false;
|
||||
|
||||
if (flags & ImGuiHoveredFlags_AnyWindow)
|
||||
{
|
||||
if (g.HoveredWindow == NULL)
|
||||
return false;
|
||||
}
|
||||
else
|
||||
if ((flags & ImGuiHoveredFlags_AnyWindow) == 0)
|
||||
{
|
||||
ImGuiWindow* window = g.CurrentWindow;
|
||||
switch (flags & (ImGuiHoveredFlags_RootWindow | ImGuiHoveredFlags_ChildWindows))
|
||||
{
|
||||
case ImGuiHoveredFlags_RootWindow | ImGuiHoveredFlags_ChildWindows:
|
||||
if (g.HoveredRootWindow != g.CurrentWindow->RootWindow)
|
||||
if (g.HoveredWindow->RootWindow != window->RootWindow)
|
||||
return false;
|
||||
break;
|
||||
case ImGuiHoveredFlags_RootWindow:
|
||||
if (g.HoveredWindow != g.CurrentWindow->RootWindow)
|
||||
if (g.HoveredWindow != window->RootWindow)
|
||||
return false;
|
||||
break;
|
||||
case ImGuiHoveredFlags_ChildWindows:
|
||||
if (g.HoveredWindow == NULL || !IsWindowChildOf(g.HoveredWindow, g.CurrentWindow))
|
||||
if (!IsWindowChildOf(g.HoveredWindow, window))
|
||||
return false;
|
||||
break;
|
||||
default:
|
||||
if (g.HoveredWindow != g.CurrentWindow)
|
||||
if (g.HoveredWindow != window)
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
@ -11047,7 +11044,7 @@ void ImGui::ShowMetricsWindow(bool* p_open)
|
||||
Text("WINDOWING");
|
||||
Indent();
|
||||
Text("HoveredWindow: '%s'", g.HoveredWindow ? g.HoveredWindow->Name : "NULL");
|
||||
Text("HoveredRootWindow: '%s'", g.HoveredRootWindow ? g.HoveredRootWindow->Name : "NULL");
|
||||
Text("HoveredWindow->Root: '%s'", g.HoveredWindow ? g.HoveredWindow->RootWindow->Name : "NULL");
|
||||
Text("HoveredWindowUnderMovingWindow: '%s'", g.HoveredWindowUnderMovingWindow ? g.HoveredWindowUnderMovingWindow->Name : "NULL");
|
||||
Text("MovingWindow: '%s'", g.MovingWindow ? g.MovingWindow->Name : "NULL");
|
||||
Unindent();
|
||||
|
Reference in New Issue
Block a user