using System;
using System.Collections.Generic;
using AcDream.UI.Abstractions.Input;
using Silk.NET.Input;
namespace AcDream.UI.Abstractions.Tests.Input;
///
/// Hand-rolled in-memory for unit tests.
/// Tests drive button + cursor + wheel events; tests can also flip
/// /
/// to simulate ImGui-focus behavior.
///
internal sealed class FakeMouseSource : IMouseSource
{
public event Action? MouseDown;
public event Action? MouseUp;
public event Action? MouseMove;
public event Action? Scroll;
private readonly HashSet _held = new();
public bool IsHeld(MouseButton button) => _held.Contains(button);
public bool WantCaptureMouse { get; set; }
public bool WantCaptureKeyboard { get; set; }
public void EmitMouseDown(MouseButton button, ModifierMask mods)
{
_held.Add(button);
MouseDown?.Invoke(button, mods);
}
public void EmitMouseUp(MouseButton button, ModifierMask mods)
{
_held.Remove(button);
MouseUp?.Invoke(button, mods);
}
public void EmitMouseMove(float dx, float dy) => MouseMove?.Invoke(dx, dy);
public void EmitScroll(float delta) => Scroll?.Invoke(delta);
}