keid-core-0.1.0.0: src/Engine/Window/MouseButton.hs
module Engine.Window.MouseButton
( Callback
, callback
, GLFW.MouseButton(..)
, GLFW.MouseButtonState(..)
, GLFW.ModifierKeys(..)
, mkCallback
) where
import RIO
import Graphics.UI.GLFW qualified as GLFW
import RIO.App (appEnv)
import UnliftIO.Resource (ReleaseKey)
import UnliftIO.Resource qualified as Resource
import Engine.Types (GlobalHandles(..), StageRIO)
type Callback st = (GLFW.ModifierKeys, GLFW.MouseButtonState, GLFW.MouseButton) -> StageRIO st ()
callback :: Callback st -> StageRIO st ReleaseKey
callback handler = do
window <- asks $ ghWindow . appEnv
withUnliftIO \ul ->
GLFW.setMouseButtonCallback window . Just $ mkCallback ul handler
Resource.register $
GLFW.setMouseButtonCallback window Nothing
mkCallback :: UnliftIO (StageRIO st) -> Callback st -> GLFW.MouseButtonCallback
mkCallback (UnliftIO ul) action =
\_window button buttonState mods ->
ul $ action (mods, buttonState, button)