MCPcopy Create free account
hub / github.com/KebsCS/KBotExt / FindHoveredWindow

Function FindHoveredWindow

KBotExt/imgui/imgui.cpp:5160–5210  ·  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

5158// with SetWindowPos() and not SetNextWindowPos() will have that rectangle lagging by a frame at the time FindHoveredWindow() is
5159// called, aka before the next Begin(). Moving window isn't affected.
5160static void FindHoveredWindow()
5161{
5162 ImGuiContext& g = *GImGui;
5163
5164 ImGuiWindow* hovered_window = NULL;
5165 ImGuiWindow* hovered_window_ignoring_moving_window = NULL;
5166 if (g.MovingWindow && !(g.MovingWindow->Flags & ImGuiWindowFlags_NoMouseInputs))
5167 hovered_window = g.MovingWindow;
5168
5169 ImVec2 padding_regular = g.Style.TouchExtraPadding;
5170 ImVec2 padding_for_resize = g.IO.ConfigWindowsResizeFromEdges ? g.WindowsHoverPadding : padding_regular;
5171 for (int i = g.Windows.Size - 1; i >= 0; i--)
5172 {
5173 ImGuiWindow* window = g.Windows[i];
5174 IM_MSVC_WARNING_SUPPRESS(28182); // [Static Analyzer] Dereferencing NULL pointer.
5175 if (!window->Active || window->Hidden)
5176 continue;
5177 if (window->Flags & ImGuiWindowFlags_NoMouseInputs)
5178 continue;
5179
5180 // Using the clipped AABB, a child window will typically be clipped by its parent (not always)
5181 ImRect bb(window->OuterRectClipped);
5182 if (window->Flags & (ImGuiWindowFlags_ChildWindow | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_AlwaysAutoResize))
5183 bb.Expand(padding_regular);
5184 else
5185 bb.Expand(padding_for_resize);
5186 if (!bb.Contains(g.IO.MousePos))
5187 continue;
5188
5189 // Support for one rectangular hole in any given window
5190 // FIXME: Consider generalizing hit-testing override (with more generic data, callback, etc.) (#1512)
5191 if (window->HitTestHoleSize.x != 0)
5192 {
5193 ImVec2 hole_pos(window->Pos.x + (float)window->HitTestHoleOffset.x, window->Pos.y + (float)window->HitTestHoleOffset.y);
5194 ImVec2 hole_size((float)window->HitTestHoleSize.x, (float)window->HitTestHoleSize.y);
5195 if (ImRect(hole_pos, hole_pos + hole_size).Contains(g.IO.MousePos))
5196 continue;
5197 }
5198
5199 if (hovered_window == NULL)
5200 hovered_window = window;
5201 IM_MSVC_WARNING_SUPPRESS(28182); // [Static Analyzer] Dereferencing NULL pointer.
5202 if (hovered_window_ignoring_moving_window == NULL && (!g.MovingWindow || window->RootWindow != g.MovingWindow->RootWindow))
5203 hovered_window_ignoring_moving_window = window;
5204 if (hovered_window && hovered_window_ignoring_moving_window)
5205 break;
5206 }
5207
5208 g.HoveredWindow = hovered_window;
5209 g.HoveredWindowUnderMovingWindow = hovered_window_ignoring_moving_window;
5210}
5211
5212bool ImGui::IsItemActive()
5213{

Callers 1

Calls 2

ContainsMethod · 0.80
ImRectFunction · 0.70

Tested by

no test coverage detected