module Main where
import Graphics.Gloss.Relative
import Data.List as List
data State = State { pressed :: Bool, selected :: Bool }
initial :: State
initial = State False False
draw :: State -> Frame
draw st = Zoom 0.5 0.5 alignCenter $ bordered 10 borderc $ Label "button" $ Frames [solid c,labels]
where
borderc = if pressed st then red else c
c = if selected st then grey else black
labels = Grid [[banner "Press" red],[banner "Hover" grey]]
grey = greyN 0.5
event :: Event -> State -> State
event e s = case e of
EventKey { eventKey = MouseButton LeftButton, eventKeyState = st } -> case st of
Down -> if isInside then s' { pressed = True } else s'
Up -> s' { pressed = False }
otherwise -> s'
where
isInside = List.elem "button" (mouseInside $ eventMouse e)
s' = s { selected = isInside }
advance :: Float -> State -> State
advance t s = s
main :: IO ()
main = playRelative FullScreen white 30 initial draw event advance