module Affection.MouseInteractable where
import Affection.Types
import qualified SDL
class MouseClickable a us where
onClick
:: a
-> SDL.MouseButton
-> (Int, Int)
-> SDL.InputMotion
-> Int
-> Affection us ()
handleMouseClicks
:: (Foldable t, MouseClickable clickable us)
=> SDL.EventPayload
-> t clickable
-> Affection us SDL.EventPayload
handleMouseClicks e clickables =
case e of
SDL.MouseButtonEvent dat -> do
mapM_ (\clickable -> do
let SDL.P (SDL.V2 x y) = SDL.mouseButtonEventPos dat
onClick
clickable
(SDL.mouseButtonEventButton dat)
(fromIntegral x, fromIntegral y)
(SDL.mouseButtonEventMotion dat)
(fromIntegral $ SDL.mouseButtonEventClicks dat)
) clickables
return e
_ -> return e