Browse Source

don't track the mouse when the window is not focused to do what the example GLFW backend does, define RLIMGUI_ALWAYS_TRACK_MOUSE to go back to the old behavior

Jeffery Myers 9 months ago
parent
commit
aba659ea01
1 changed files with 31 additions and 18 deletions
  1. 31 18
      rlImGui.cpp

+ 31 - 18
rlImGui.cpp

@@ -801,28 +801,41 @@ bool ImGui_ImplRaylib_ProcessEvents(void)
         }
     }
 
-    if (!io.WantSetMousePos)
-    {
-        io.AddMousePosEvent(float(GetMouseX()), float(GetMouseY()));
-    }
+    bool processsMouse = focused;
+
+#if defined(RLIMGUI_ALWAYS_TRACK_MOUSE)
+    processsMouse = true;
+#endif
 
-    auto setMouseEvent = [&io](int rayMouse, int imGuiMouse)
+    if (processsMouse)
+    {
+        if (!io.WantSetMousePos)
         {
-            if (IsMouseButtonPressed(rayMouse))
-                io.AddMouseButtonEvent(imGuiMouse, true);
-            else if (IsMouseButtonReleased(rayMouse))
-                io.AddMouseButtonEvent(imGuiMouse, false);
-        };
-
-    setMouseEvent(MOUSE_BUTTON_LEFT, ImGuiMouseButton_Left);
-    setMouseEvent(MOUSE_BUTTON_RIGHT, ImGuiMouseButton_Right);
-    setMouseEvent(MOUSE_BUTTON_MIDDLE, ImGuiMouseButton_Middle);
-    setMouseEvent(MOUSE_BUTTON_FORWARD, ImGuiMouseButton_Middle + 1);
-    setMouseEvent(MOUSE_BUTTON_BACK, ImGuiMouseButton_Middle + 2);
+            io.AddMousePosEvent(float(GetMouseX()), float(GetMouseY()));
+        }
 
+        auto setMouseEvent = [&io](int rayMouse, int imGuiMouse)
+            {
+                if (IsMouseButtonPressed(rayMouse))
+                    io.AddMouseButtonEvent(imGuiMouse, true);
+                else if (IsMouseButtonReleased(rayMouse))
+                    io.AddMouseButtonEvent(imGuiMouse, false);
+            };
+
+        setMouseEvent(MOUSE_BUTTON_LEFT, ImGuiMouseButton_Left);
+        setMouseEvent(MOUSE_BUTTON_RIGHT, ImGuiMouseButton_Right);
+        setMouseEvent(MOUSE_BUTTON_MIDDLE, ImGuiMouseButton_Middle);
+        setMouseEvent(MOUSE_BUTTON_FORWARD, ImGuiMouseButton_Middle + 1);
+        setMouseEvent(MOUSE_BUTTON_BACK, ImGuiMouseButton_Middle + 2);
+
+        {
+            Vector2 mouseWheel = GetMouseWheelMoveV();
+            io.AddMouseWheelEvent(mouseWheel.x, mouseWheel.y);
+        }
+    }
+    else
     {
-        Vector2 mouseWheel = GetMouseWheelMoveV();
-        io.AddMouseWheelEvent(mouseWheel.x, mouseWheel.y);
+        io.AddMousePosEvent(std::numeric_limits<float>::min(), std::numeric_limits<float>::min());
     }
 
     if (io.ConfigFlags & ImGuiConfigFlags_NavEnableGamepad && IsGamepadAvailable(0))