diff --git a/imgui.cpp b/imgui.cpp index bc099db2..d7fe0337 100644 --- a/imgui.cpp +++ b/imgui.cpp @@ -1313,7 +1313,7 @@ void NewFrame() g.HoveredWindow = ImGui::FindHoveredWindow(g.IO.MousePos, false); g.HoveredWindowExcludingChilds = ImGui::FindHoveredWindow(g.IO.MousePos, true); - // Are we snooping input? + // Are we using inputs? Tell user so they can capture/discard them. g.IO.WantCaptureMouse = (g.HoveredWindow != NULL) || (g.ActiveId != 0); g.IO.WantCaptureKeyboard = (g.ActiveId != 0); @@ -1349,7 +1349,7 @@ void NewFrame() // NB: Don't discard FocusedWindow if it isn't active, so that a window that go on/off programatically won't lose its keyboard focus. if (g.ActiveId == 0 && g.FocusedWindow != NULL && g.FocusedWindow->Visible && IsKeyPressedMap(ImGuiKey_Tab, false)) { - g.FocusedWindow->FocusIdxRequestNext = 0; + g.FocusedWindow->FocusIdxRequestNext = 0; } // Mark all windows as not visible @@ -1732,6 +1732,19 @@ bool IsMouseHoveringBox(const ImVec2& box_min, const ImVec2& box_max) return IsMouseHoveringBox(ImGuiAabb(box_min, box_max)); } +bool IsMouseHoveringWindow() +{ + ImGuiState& g = GImGui; + ImGuiWindow* window = GetCurrentWindow(); + return g.HoveredWindow == window; +} + +bool IsMouseHoveringAnyWindow() +{ + ImGuiState& g = GImGui; + return g.HoveredWindow != NULL; +} + static bool IsKeyPressedMap(ImGuiKey key, bool repeat) { ImGuiState& g = GImGui; diff --git a/imgui.h b/imgui.h index d1f02fb3..b579ccb1 100644 --- a/imgui.h +++ b/imgui.h @@ -178,7 +178,7 @@ namespace ImGui float GetColumnOffset(int column_index = -1); void SetColumnOffset(int column_index, float offset); float GetColumnWidth(int column_index = -1); - ImVec2 GetCursorPos(); // cursor position relative to window position + ImVec2 GetCursorPos(); // cursor position is relative to window position void SetCursorPos(const ImVec2& pos); // " void SetCursorPosX(float x); // " void SetCursorPosY(float y); // " @@ -260,8 +260,10 @@ namespace ImGui bool IsKeyPressed(int key_index, bool repeat = true); // key_index into the keys_down[512] array, imgui doesn't know the semantic of each entry bool IsMouseClicked(int button, bool repeat = false); bool IsMouseDoubleClicked(int button); - bool IsMouseHoveringBox(const ImVec2& box_min, const ImVec2& box_max); - ImVec2 GetMousePos(); + bool IsMouseHoveringWindow(); // is hovering current window ("window" in API names always refer to current window) + bool IsMouseHoveringAnyWindow(); // is hovering any active imgui window + bool IsMouseHoveringBox(const ImVec2& box_min, const ImVec2& box_max); // is hovering given bounding box + ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls float GetTime(); int GetFrameCount(); const char* GetStyleColorName(ImGuiCol idx);