keid-core-0.1.8.0: src/Engine/Events/MouseButton.hs
module Engine.Events.MouseButton
( ClickHandler
, callback
, handler
) where
import RIO
import Geomancy (Vec2)
import UnliftIO.Resource (ReleaseKey)
import Engine.Events.Sink (MonadSink, Sink)
import Engine.Window.MouseButton (ModifierKeys, MouseButton, MouseButtonState)
import Engine.Window.MouseButton qualified as MouseButton
import Engine.Worker qualified as Worker
type ClickHandler e st m =
Sink e st ->
Vec2 ->
(ModifierKeys, MouseButtonState, MouseButton) ->
m ()
callback
:: ( MonadSink rs m
, Worker.HasOutput cursor
, Worker.GetOutput cursor ~ Vec2
)
=> cursor
-> ClickHandler e st m
-------------------------
-> Sink e st
-> m ReleaseKey
callback cursorP eventHandler = MouseButton.callback . handler cursorP eventHandler
handler
:: ( MonadSink rs m
, Worker.HasOutput cursor
, Worker.GetOutput cursor ~ Vec2
)
=> cursor
-> ClickHandler e st m
-> Sink e st
-> (ModifierKeys, MouseButtonState, MouseButton)
-> m ()
handler cursorP eventHandler sink buttonEvent = do
cursorPos <- Worker.getOutputData cursorP
logDebug $ "MouseButton event: " <> displayShow (cursorPos, buttonEvent)
eventHandler sink cursorPos buttonEvent