This commit is contained in:
2024-07-25 23:17:24 +03:00
parent 8ba44e75a4
commit 7c901a56e5

View File

@@ -724,16 +724,12 @@ void InputService::Update()
// Send input events for the focused window
WindowsManager::WindowsLocker.Lock();
bool mouseRelativeMode = Input::Mouse->IsRelative();
for (const auto& e : InputEvents)
{
auto window = e.Target ? e.Target : defaultWindow;
if (!window || !WindowsManager::Windows.Contains(window))
continue;
bool handleRelativeModeInputOnly = mouseRelativeMode;
if (handleRelativeModeInputOnly && window->GetCursor() == CursorType::Hidden && window->IsMouseTracking())
handleRelativeModeInputOnly = false;
switch (e.Type)
{
// Keyboard events
@@ -748,24 +744,19 @@ void InputService::Update()
break;
// Mouse events
case InputDevice::EventType::MouseDown:
if (!handleRelativeModeInputOnly)
window->OnMouseDown(window->ScreenToClient(e.MouseData.Position), e.MouseData.Button);
window->OnMouseDown(window->ScreenToClient(e.MouseData.Position), e.MouseData.Button);
break;
case InputDevice::EventType::MouseUp:
if (!handleRelativeModeInputOnly)
window->OnMouseUp(window->ScreenToClient(e.MouseData.Position), e.MouseData.Button);
window->OnMouseUp(window->ScreenToClient(e.MouseData.Position), e.MouseData.Button);
break;
case InputDevice::EventType::MouseDoubleClick:
if (!handleRelativeModeInputOnly)
window->OnMouseDoubleClick(window->ScreenToClient(e.MouseData.Position), e.MouseData.Button);
window->OnMouseDoubleClick(window->ScreenToClient(e.MouseData.Position), e.MouseData.Button);
break;
case InputDevice::EventType::MouseWheel:
if (!handleRelativeModeInputOnly)
window->OnMouseWheel(window->ScreenToClient(e.MouseWheelData.Position), e.MouseWheelData.WheelDelta);
window->OnMouseWheel(window->ScreenToClient(e.MouseWheelData.Position), e.MouseWheelData.WheelDelta);
break;
case InputDevice::EventType::MouseMove:
if (!handleRelativeModeInputOnly)
window->OnMouseMove(window->ScreenToClient(e.MouseData.Position));
window->OnMouseMove(window->ScreenToClient(e.MouseData.Position));
break;
case InputDevice::EventType::MouseMoveRelative:
window->OnMouseMoveRelative(e.MouseMovementData.PositionRelative);
@@ -775,16 +766,13 @@ void InputService::Update()
break;
// Touch events
case InputDevice::EventType::TouchDown:
if (!handleRelativeModeInputOnly)
window->OnTouchDown(window->ScreenToClient(e.TouchData.Position), e.TouchData.PointerId);
window->OnTouchDown(window->ScreenToClient(e.TouchData.Position), e.TouchData.PointerId);
break;
case InputDevice::EventType::TouchMove:
if (!handleRelativeModeInputOnly)
window->OnTouchMove(window->ScreenToClient(e.TouchData.Position), e.TouchData.PointerId);
window->OnTouchMove(window->ScreenToClient(e.TouchData.Position), e.TouchData.PointerId);
break;
case InputDevice::EventType::TouchUp:
if (!handleRelativeModeInputOnly)
window->OnTouchUp(window->ScreenToClient(e.TouchData.Position), e.TouchData.PointerId);
window->OnTouchUp(window->ScreenToClient(e.TouchData.Position), e.TouchData.PointerId);
break;
}
}