elm/core/Graphics/Form.elm
evancz 71f83d394e Get rid of the FillStyle module. Move gradients to Color and everything else to Form.
Create the Geometry module which describes paths and shapes. Not sure if this module is a good idea.
2013-03-05 19:46:35 -08:00

85 lines
No EOL
2.1 KiB
Elm

module Graphics.Collage where
import Either
import Graphics.LineStyle
import Geometry
data Transform
= Rotate Float
| Move Float Float
| Scale Float Float
| Transform Float Float Float Float Float Float
data Form = Form [Transform] BasicForm
data FillStyle
= NoFill
| Solid Color
| Texture String
| Gradient Gradient
data BasicForm
= FLine LineStyle Line
| FShape (Either LineStyle FillStyle) Shape
| FImage Int Int Int Int String
| FElement Element
| FGroup [Form]
fill style shape = FShape (Right style) shape
filled : Color -> Shape -> Form
filled color shape = fill (Solid color) shape
textured : String -> Shape -> Form
textured src shape = fill (Texture src) shape
gradient : Gradient -> Shape -> Form
gradient grad shape = fill (Gradient grad) shape
outline style shape = FShape (Left style) shape
trace = FLine
linearGradient stops start end = setFillStyle (LinearGradient stops start end)
radialGradient stops innerP innerR outerP outerR =
setStyle (RadialGradient stops innerP innerR outerP outerR)
plain = { width=1, cap=Butt, join=Miter, miterLimit=10,
fillStyle=...,
dashing=[], dashOffset=0 }
solid c = Form [] . FLine c
dotted c = Form [] . FLine c
dashed c = Form [] . FLine c
lineStyle = Form [] . FLine
filled clr shp = Form [] (FShape shp)
outlined clr shp = Form [] (FShape shp)
customOutline pattern clr (Shape ps pos) =
Form [] (FShape (CustomOutline pattern) clr (Shape ps pos))
textured src (Shape ps pos) = Form [] (FShape (Textured src) black (Shape ps pos))
fromLine = FLine
fromShape = FShape
fromElement = FElement
sprite w h pos src = Form 0 1 pos (FImage w h src)
toForm pos e = Form 0 1 pos (FElement e)
addTransform t (Form ts form) = Form (t:ts) form
rotateRad rad = addTransform $ Rotate rad
rotateDeg deg = addTransform $ Rotate (pi * deg / 180)
rotate rot = addTransform $ Rotate (2 * pi * rot)
scale s = addTransform (Scale s s)
scaleX s = addTransform (Scale s 1)
scaleY s = addTransform (Scale 1 s)
move x y = addTransform (Move x y)
moveX x = addTransform (Move x 0)
moveY y = addTransform (Move 0 y)
transform a b c d e f = addTransform (Transform a b c d e f)