25 lines
736 B
Haskell
25 lines
736 B
Haskell
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 |