Skip to content

Commit

Permalink
Inputs, Tooltip: Rework stationary timer logic as it broke on high-fr…
Browse files Browse the repository at this point in the history
…amerates with lower rate of mouse inputs. (#1485)
  • Loading branch information
ocornut committed Jul 3, 2023
1 parent 6417268 commit 1029f57
Show file tree
Hide file tree
Showing 3 changed files with 6 additions and 10 deletions.
12 changes: 5 additions & 7 deletions imgui.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
2 changes: 1 addition & 1 deletion imgui.h
Original file line number Diff line number Diff line change
Expand Up @@ -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

/*
Expand Down
2 changes: 0 additions & 2 deletions imgui_internal.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -2182,7 +2181,6 @@ struct ImGuiContext
HoverItemDelayTimer = HoverItemDelayClearTimer = 0.0f;

MouseCursor = ImGuiMouseCursor_Arrow;
MouseMovingFrames = 0;
MouseStationaryTimer = 0.0f;

TempInputId = 0;
Expand Down

0 comments on commit 1029f57

Please sign in to comment.