Pārlūkot izejas kodu

Added IsMouseHoveringWindow(), IsMouseHoveringAnyWindow()

ocornut 11 gadi atpakaļ
vecāks
revīzija
d5ed586d70
2 mainītis faili ar 20 papildinājumiem un 5 dzēšanām
  1. 15 2
      imgui.cpp
  2. 5 3
      imgui.h

+ 15 - 2
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;

+ 5 - 3
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);