MCPcopy Create free account
hub / github.com/clementgallet/libTAS / FindHoveredWindow

Function FindHoveredWindow

src/external/imgui/imgui.cpp:5199–5245  ·  view source on GitHub ↗

Find window given position, search front-to-back FIXME: Note that we have an inconsequential lag here: OuterRectClipped is updated in Begin(), so windows moved programmatically with SetWindowPos() and not SetNextWindowPos() will have that rectangle lagging by a frame at the time FindHoveredWindow() is called, aka before the next Begin(). Moving window isn't affected.

Source from the content-addressed store, hash-verified

5197// with SetWindowPos() and not SetNextWindowPos() will have that rectangle lagging by a frame at the time FindHoveredWindow() is
5198// called, aka before the next Begin(). Moving window isn't affected.
5199static void FindHoveredWindow()
5200{
5201 ImGuiContext& g = *GImGui;
5202
5203 ImGuiWindow* hovered_window = NULL;
5204 ImGuiWindow* hovered_window_ignoring_moving_window = NULL;
5205 if (g.MovingWindow && !(g.MovingWindow->Flags & ImGuiWindowFlags_NoMouseInputs))
5206 hovered_window = g.MovingWindow;
5207
5208 ImVec2 padding_regular = g.Style.TouchExtraPadding;
5209 ImVec2 padding_for_resize = g.IO.ConfigWindowsResizeFromEdges ? g.WindowsHoverPadding : padding_regular;
5210 for (int i = g.Windows.Size - 1; i >= 0; i--)
5211 {
5212 ImGuiWindow* window = g.Windows[i];
5213 IM_MSVC_WARNING_SUPPRESS(28182); // [Static Analyzer] Dereferencing NULL pointer.
5214 if (!window->Active || window->Hidden)
5215 continue;
5216 if (window->Flags & ImGuiWindowFlags_NoMouseInputs)
5217 continue;
5218
5219 // Using the clipped AABB, a child window will typically be clipped by its parent (not always)
5220 ImVec2 hit_padding = (window->Flags & (ImGuiWindowFlags_NoResize | ImGuiWindowFlags_AlwaysAutoResize)) ? padding_regular : padding_for_resize;
5221 if (!window->OuterRectClipped.ContainsWithPad(g.IO.MousePos, hit_padding))
5222 continue;
5223
5224 // Support for one rectangular hole in any given window
5225 // FIXME: Consider generalizing hit-testing override (with more generic data, callback, etc.) (#1512)
5226 if (window->HitTestHoleSize.x != 0)
5227 {
5228 ImVec2 hole_pos(window->Pos.x + (float)window->HitTestHoleOffset.x, window->Pos.y + (float)window->HitTestHoleOffset.y);
5229 ImVec2 hole_size((float)window->HitTestHoleSize.x, (float)window->HitTestHoleSize.y);
5230 if (ImRect(hole_pos, hole_pos + hole_size).Contains(g.IO.MousePos))
5231 continue;
5232 }
5233
5234 if (hovered_window == NULL)
5235 hovered_window = window;
5236 IM_MSVC_WARNING_SUPPRESS(28182); // [Static Analyzer] Dereferencing NULL pointer.
5237 if (hovered_window_ignoring_moving_window == NULL && (!g.MovingWindow || window->RootWindow != g.MovingWindow->RootWindow))
5238 hovered_window_ignoring_moving_window = window;
5239 if (hovered_window && hovered_window_ignoring_moving_window)
5240 break;
5241 }
5242
5243 g.HoveredWindow = hovered_window;
5244 g.HoveredWindowUnderMovingWindow = hovered_window_ignoring_moving_window;
5245}
5246
5247bool ImGui::IsItemActive()
5248{

Callers 1

Calls 2

ImRectFunction · 0.70
ContainsMethod · 0.45

Tested by

no test coverage detected