2
0
Эх сурвалжийг харах

Inputs, Tooltip: Rework stationary timer logic as it broke on high-framerates with lower rate of mouse inputs. (#1485)

ocornut 2 жил өмнө
parent
commit
1029f57b8a
3 өөрчлөгдсөн 6 нэмэгдсэн , 10 устгасан
  1. 5 7
      imgui.cpp
  2. 1 1
      imgui.h
  3. 0 2
      imgui_internal.h

+ 5 - 7
imgui.cpp

@@ -8619,14 +8619,12 @@ static void ImGui::UpdateMouseInputs()
     else
         io.MouseDelta = ImVec2(0.0f, 0.0f);
 
-    // Update stationary timer. Only reset on 2 successive moving frames.
-    // FIXME: May need to expose threshold or treat touch inputs differently.
+    // Update stationary timer.
+    // FIXME: May need to rework again to have some tolerance for occasional small movement, while being functional on high-framerates.
     const float mouse_stationary_threshold = (io.MouseSource == ImGuiMouseSource_Mouse) ? 2.0f : 3.0f; // Slightly higher threshold for ImGuiMouseSource_TouchScreen/ImGuiMouseSource_Pen, may need rework.
-    g.MouseMovingFrames = (ImLengthSqr(io.MouseDelta) >= mouse_stationary_threshold * mouse_stationary_threshold) ? (g.MouseMovingFrames + 1) : 0;
-    if (g.MouseMovingFrames == 0)
-        g.MouseStationaryTimer += io.DeltaTime;
-    else if (g.MouseMovingFrames > 1)
-        g.MouseStationaryTimer = 0.0f;
+    const bool mouse_stationary = (ImLengthSqr(io.MouseDelta) <= mouse_stationary_threshold * mouse_stationary_threshold);
+    g.MouseStationaryTimer = mouse_stationary ? (g.MouseStationaryTimer + io.DeltaTime) : 0.0f;
+    //IMGUI_DEBUG_LOG("%.4f\n", g.MouseStationaryTimer);
 
     // If mouse moved we re-enable mouse hovering in case it was disabled by gamepad/keyboard. In theory should use a >0.0f threshold but would need to reset in everywhere we set this to true.
     if (io.MouseDelta.x != 0.0f || io.MouseDelta.y != 0.0f)

+ 1 - 1
imgui.h

@@ -23,7 +23,7 @@
 // Library Version
 // (Integer encoded as XYYZZ for use in #if preprocessor conditionals, e.g. '#if IMGUI_VERSION_NUM >= 12345')
 #define IMGUI_VERSION       "1.89.7 WIP"
-#define IMGUI_VERSION_NUM   18967
+#define IMGUI_VERSION_NUM   18968
 #define IMGUI_HAS_TABLE
 
 /*

+ 0 - 2
imgui_internal.h

@@ -1978,7 +1978,6 @@ struct ImGuiContext
 
     // Mouse state
     ImGuiMouseCursor        MouseCursor;
-    int                     MouseMovingFrames;
     float                   MouseStationaryTimer;               // Time the mouse has been stationary (with some loose heuristic)
     ImVec2                  MouseLastValidPos;
 
@@ -2182,7 +2181,6 @@ struct ImGuiContext
         HoverItemDelayTimer = HoverItemDelayClearTimer = 0.0f;
 
         MouseCursor = ImGuiMouseCursor_Arrow;
-        MouseMovingFrames = 0;
         MouseStationaryTimer = 0.0f;
 
         TempInputId = 0;