module Engine.Events.MouseButton
( ClickHandler
, callback
, handler
) where
import RIO
import Geomancy (Vec2)
import UnliftIO.Resource (ReleaseKey)
import Engine.Events.Sink (Sink)
import Engine.Types (StageRIO)
import Engine.Window.MouseButton (ModifierKeys, MouseButton, MouseButtonState)
import Engine.Window.MouseButton qualified as MouseButton
import Engine.Worker qualified as Worker
type ClickHandler e st =
Sink e st ->
Vec2 ->
(ModifierKeys, MouseButtonState, MouseButton) ->
StageRIO st ()
callback
:: ( Worker.HasOutput cursor
, Worker.GetOutput cursor ~ Vec2
)
=> cursor
-> ClickHandler e st
-> Sink e st
-> StageRIO st ReleaseKey
callback :: forall cursor e st.
(HasOutput cursor, GetOutput cursor ~ Vec2) =>
cursor -> ClickHandler e st -> Sink e st -> StageRIO st ReleaseKey
callback cursor
cursorP ClickHandler e st
eventHandler = Callback st -> StageRIO st ReleaseKey
forall st. Callback st -> StageRIO st ReleaseKey
MouseButton.callback (Callback st -> StageRIO st ReleaseKey)
-> (Sink e st -> Callback st)
-> Sink e st
-> StageRIO st ReleaseKey
forall b c a. (b -> c) -> (a -> b) -> a -> c
. cursor -> ClickHandler e st -> Sink e st -> Callback st
forall cursor e st.
(HasOutput cursor, GetOutput cursor ~ Vec2) =>
cursor
-> ClickHandler e st
-> Sink e st
-> (ModifierKeys, MouseButtonState, MouseButton)
-> StageRIO st ()
handler cursor
cursorP ClickHandler e st
eventHandler
handler
:: ( Worker.HasOutput cursor
, Worker.GetOutput cursor ~ Vec2
)
=> cursor
-> ClickHandler e st
-> Sink e st
-> (ModifierKeys, MouseButtonState, MouseButton)
-> StageRIO st ()
handler :: forall cursor e st.
(HasOutput cursor, GetOutput cursor ~ Vec2) =>
cursor
-> ClickHandler e st
-> Sink e st
-> (ModifierKeys, MouseButtonState, MouseButton)
-> StageRIO st ()
handler cursor
cursorP ClickHandler e st
eventHandler Sink e st
sink (ModifierKeys, MouseButtonState, MouseButton)
buttonEvent = do
Vec2
cursorPos <- cursor -> RIO (App GlobalHandles st) (GetOutput cursor)
forall worker (m :: * -> *).
(HasOutput worker, MonadIO m) =>
worker -> m (GetOutput worker)
Worker.getOutputData cursor
cursorP
Utf8Builder -> StageRIO st ()
forall (m :: * -> *) env.
(MonadIO m, MonadReader env m, HasLogFunc env, HasCallStack) =>
Utf8Builder -> m ()
logDebug (Utf8Builder -> StageRIO st ()) -> Utf8Builder -> StageRIO st ()
forall a b. (a -> b) -> a -> b
$ Utf8Builder
"MouseButton event: " Utf8Builder -> Utf8Builder -> Utf8Builder
forall a. Semigroup a => a -> a -> a
<> (Vec2, (ModifierKeys, MouseButtonState, MouseButton))
-> Utf8Builder
forall a. Show a => a -> Utf8Builder
displayShow (Vec2
cursorPos, (ModifierKeys, MouseButtonState, MouseButton)
buttonEvent)
ClickHandler e st
eventHandler Sink e st
sink Vec2
cursorPos (ModifierKeys, MouseButtonState, MouseButton)
buttonEvent