module Canvas where import Graphics.Gloss.Data.Picture ( Picture (Text), pictures, scale ) import Graphics.Gloss.Interface.IO.Interact ( Event (EventKey), KeyState (Down), Key (Char) ) data Canvas = Canvas { items :: [Picture], mode :: Mode } data Mode = Brush | Eraser deriving (Eq, Show) showMode :: Canvas -> Picture showMode canv = scale 0.1 0.1 $ Text ( show (mode canv)) render :: Canvas -> Picture render canv = pictures ( showMode canv : items canv ) handle :: Event -> Canvas -> Canvas handle (EventKey (Char 'b') Down _ _ ) canv = canv { mode = Brush } handle (EventKey (Char 'e') Down _ _ ) canv = canv { mode = Eraser } handle _ canv = canv update :: Float -> Canvas -> Canvas update _ canv = canv