(+) get mouse coordinates

This commit is contained in:
Francesco 2022-07-31 17:44:14 +02:00
parent bc9c76e466
commit f63e4697f1
2 changed files with 22 additions and 11 deletions

View File

@ -1,16 +1,18 @@
module Canvas where
import Graphics.Gloss.Data.Picture ( Picture (Text), pictures, scale, translate )
import Graphics.Gloss.Interface.IO.Interact ( Event (EventKey), KeyState (Down, Up), Key (Char, MouseButton), MouseButton (LeftButton) )
import Graphics.Gloss.Interface.IO.Interact ( Event (EventKey, EventMotion), KeyState (Down, Up), Key (Char, MouseButton), MouseButton (LeftButton) )
type Dimension = (Int, Int)
type Position = (Float, Float)
type TipSize = Float
data Canvas = Canvas {
items :: [Picture]
, mode :: Mode
, drawing :: Bool
, pos :: Position
, tip :: Tip
}
data Mode = Brush | Eraser deriving (Eq, Show)
@ -26,20 +28,26 @@ leftCornerize :: Picture -> Picture
leftCornerize = translate (fromIntegral $ (-(fst windowSize)) `div` 2 + (fst windowSize `div` 10))
(fromIntegral $ (snd windowSize) `div` 2 - (snd windowSize `div` 10))
showMode :: Canvas -> Picture
showMode canv = leftCornerize
rightCornerize :: Picture -> Picture
rightCornerize = translate (fromIntegral $ (fst windowSize) `div` 2 - (fst windowSize `div` 5))
(fromIntegral $ (snd windowSize) `div` 2 - (snd windowSize `div` 10))
showInfo :: Canvas -> Picture
showInfo canv = leftCornerize
$ scale 0.15 0.15
$ Text ( show (mode canv))
$ Text ( show (mode canv) ++ " - " ++ show (pos canv))
render :: Canvas -> Picture
render canv = pictures ( showMode canv : items canv )
render canv = pictures ( showInfo 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 (EventKey (MouseButton LeftButton) Down _ _ ) canv = canv { drawing = True }
handle (EventKey (MouseButton LeftButton) Up _ _ ) canv = canv { drawing = False }
handle (EventKey (MouseButton LeftButton) Down _ mouse ) canv = canv { drawing = True }
handle (EventKey (MouseButton LeftButton) Up _ mouse ) canv = canv { drawing = False }
handle (EventMotion (x, y)) canv = canv { pos = (x, y)}
handle _ canv = canv
update :: Float -> Canvas -> Canvas
update _ canv = canv

View File

@ -3,6 +3,7 @@ module Costants where
import Canvas
import Graphics.Gloss
display :: Display
display = InWindow "Amaranth" windowSize (0,0)
@ -14,4 +15,6 @@ initial = Canvas {
items = []
, mode = Brush
, drawing = False
, pos = (0, 0)
, tip = Rectangular 3
}