Skip to content

Commit 5c9bab0

Browse files
committed
Improve detection for very brief mouse button presses.
1 parent 666b239 commit 5c9bab0

1 file changed

Lines changed: 27 additions & 6 deletions

File tree

src/ImGui.NET.SampleProgram/ImGuiController.cs

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -332,13 +332,34 @@ private void UpdateImGuiInput(InputSnapshot snapshot)
332332

333333
Vector2 mousePosition = snapshot.MousePosition;
334334

335-
io.MousePos = mousePosition;
336-
io.MouseDown[0] = snapshot.IsMouseDown(MouseButton.Left);
337-
io.MouseDown[1] = snapshot.IsMouseDown(MouseButton.Right);
338-
io.MouseDown[2] = snapshot.IsMouseDown(MouseButton.Middle);
335+
// Determine if any of the mouse buttons were pressed during this snapshot period, even if they are no longer held.
336+
bool leftPressed = false;
337+
bool middlePressed = false;
338+
bool rightPressed = false;
339+
foreach (MouseEvent me in snapshot.MouseEvents)
340+
{
341+
if (me.Down)
342+
{
343+
switch (me.MouseButton)
344+
{
345+
case MouseButton.Left:
346+
leftPressed = true;
347+
break;
348+
case MouseButton.Middle:
349+
middlePressed = true;
350+
break;
351+
case MouseButton.Right:
352+
rightPressed = true;
353+
break;
354+
}
355+
}
356+
}
339357

340-
float delta = snapshot.WheelDelta;
341-
io.MouseWheel = delta;
358+
io.MouseDown[0] = leftPressed || snapshot.IsMouseDown(MouseButton.Left);
359+
io.MouseDown[1] = middlePressed || snapshot.IsMouseDown(MouseButton.Right);
360+
io.MouseDown[2] = rightPressed || snapshot.IsMouseDown(MouseButton.Middle);
361+
io.MousePos = mousePosition;
362+
io.MouseWheel = snapshot.WheelDelta;
342363

343364
IReadOnlyList<char> keyCharPresses = snapshot.KeyCharPresses;
344365
for (int i = 0; i < keyCharPresses.Count; i++)

0 commit comments

Comments
 (0)