module Graphics.Web.Processing.Core.Interface (
screenWidth, screenHeight
, noise
, Drawing
, Color (..)
, stroke, fill, background
, strokeWeight
, Proc_Point
, ellipse
, circle
, arc
, line
, point
, quad
, rect
, triangle
, bezier
, polygon
, drawtext
, size
, setFrameRate
, translate
, rotate
, scale
, resetMatrix
, getMousePoint
, iff
, frameCount
, getFrameRate
, writeComment
, ProcMonad
) where
import Graphics.Web.Processing.Core.Primal
import Graphics.Web.Processing.Core.Monad
import Graphics.Web.Processing.Core.Var (readVar)
screenWidth :: Proc_Int
screenWidth = proc_read $ varFromText "screenWidth"
screenHeight :: Proc_Int
screenHeight = proc_read $ varFromText "screenHeight"
frameCount :: (ProcMonad m, Monad (m c)) => m c Proc_Int
frameCount = readVar $ varFromText "frameCount"
getFrameRate :: (ProcMonad m, Monad (m c)) => m c Proc_Int
getFrameRate = readVar $ varFromText "frameRate"
noise :: (ProcMonad m, Monad (m c)) => Proc_Point -> m c Proc_Float
noise (x,y) = return $ noisef x y
class Drawing a where
instance Drawing Setup where
instance Drawing Draw where
instance Drawing MouseClicked where
instance Drawing MouseReleased where
data Color = Color {
redc :: Proc_Int
, bluec :: Proc_Int
, greenc :: Proc_Int
, alphac :: Proc_Int
}
colorArgs :: Color -> [ProcArg]
colorArgs (Color r g b a) = fmap proc_arg [r,g,b,a]
stroke :: (ProcMonad m, Drawing c) => Color -> m c ()
stroke = commandM "stroke" . colorArgs
fill :: (ProcMonad m, Drawing c) => Color -> m c ()
fill = commandM "fill" . colorArgs
background :: (ProcMonad m, Drawing c) => Color -> m c ()
background = commandM "background" . colorArgs
strokeWeight :: (ProcMonad m, Drawing c) => Proc_Int -> m c ()
strokeWeight n = commandM "strokeWeight" [proc_arg n]
type Proc_Point = (Proc_Float,Proc_Float)
ellipse :: (ProcMonad m, Drawing c)
=> Proc_Point
-> Proc_Float
-> Proc_Float
-> m c ()
ellipse (x,y) w h = commandM "ellipse" $ fmap proc_arg [x,y,w,h]
circle :: (ProcMonad m, Drawing c)
=> Proc_Point
-> Proc_Float
-> m c ()
circle p r = ellipse p (2*r) (2*r)
arc :: (ProcMonad m, Drawing c)
=> Proc_Point
-> Proc_Float
-> Proc_Float
-> Proc_Float
-> Proc_Float
-> m c ()
arc (x,y) w h a0 a1 = commandM "arc" $ fmap proc_arg [x,y,w,h,a0,a1]
line :: (ProcMonad m, Drawing c)
=> Proc_Point
-> Proc_Point
-> m c ()
line (x0,y0) (x1,y1) = commandM "line" $ fmap proc_arg [x0,y0,x1,y1]
point :: (ProcMonad m, Drawing c)
=> Proc_Point
-> m c ()
point (x,y) = commandM "point" $ fmap proc_arg [x,y]
quad :: (ProcMonad m, Drawing c)
=> Proc_Point -> Proc_Point -> Proc_Point -> Proc_Point
-> m c ()
quad (x0,y0) (x1,y1) (x2,y2) (x3,y3) =
commandM "quad" $ fmap proc_arg [x0,y0,x1,y1,x2,y2,x3,y3]
rect :: (ProcMonad m, Drawing c)
=> Proc_Point
-> Proc_Float
-> Proc_Float
-> m c ()
rect (x,y) w h = commandM "rect" $ fmap proc_arg [x,y,w,h]
triangle :: (ProcMonad m, Drawing c)
=> Proc_Point -> Proc_Point -> Proc_Point
-> m c ()
triangle (x0,y0) (x1,y1) (x2,y2) =
commandM "triangle" $ fmap proc_arg [x0,y0,x1,y1,x2,y2]
bezier :: (ProcMonad m, Drawing c)
=> Proc_Point
-> Proc_Point
-> Proc_Point
-> Proc_Point
-> m c ()
bezier (x0,y0) (x1,y1) (x2,y2) (x3,y3) =
commandM "bezier" $ fmap proc_arg [x0,y0,x1,y1,x2,y2,x3,y3]
beginShape :: (ProcMonad m, Drawing c) => m c ()
beginShape = commandM "beginShape" []
endShape :: (ProcMonad m, Drawing c) => m c ()
endShape = commandM "endShape" []
vertex :: (ProcMonad m, Drawing c) => Proc_Point -> m c ()
vertex (x,y) = commandM "vertex" [proc_arg x,proc_arg y]
polygon :: (ProcMonad m, Monad (m c), Drawing c) => [Proc_Point] -> m c ()
polygon ps = beginShape >> mapM_ vertex ps >> endShape
drawtext :: (ProcMonad m, Drawing c)
=> Proc_Text
-> Proc_Point
-> Proc_Float
-> Proc_Float
-> m c ()
drawtext t (x,y) w h =
commandM "text" $ [ proc_arg t
, proc_arg x, proc_arg y
, proc_arg w, proc_arg h
]
rotate :: (ProcMonad m, Drawing c) => Proc_Float -> m c ()
rotate a = commandM "rotate" [ proc_arg a ]
scale :: (ProcMonad m, Drawing c)
=> Proc_Float
-> Proc_Float
-> m c ()
scale x y = commandM "scale" [ proc_arg x, proc_arg y ]
translate :: (ProcMonad m, Drawing c)
=> Proc_Float
-> Proc_Float
-> m c ()
translate x y = commandM "translate" [ proc_arg x, proc_arg y ]
resetMatrix :: (ProcMonad m, Drawing c)
=> m c ()
resetMatrix = commandM "resetMatrix" []
getMousePoint :: (ProcMonad m, Monad (m c)) => m c Proc_Point
getMousePoint = do
x <- readVar $ varFromText "mouseX"
y <- readVar $ varFromText "mouseY"
return (x,y)
size :: ProcMonad m => Proc_Int -> Proc_Int -> m c ()
size w h = commandM "size" [proc_arg w, proc_arg h]
setFrameRate :: ProcMonad m => Proc_Int -> m Setup ()
setFrameRate r = commandM "frameRate" [proc_arg r]