Skip to content

Commit b9a2129

Browse files
committed
Merge pull request #1 from Fresheyeball/master
line cap and dimensions bindings
2 parents 9f36870 + dbf422c commit b9a2129

File tree

2 files changed

+85
-0
lines changed

2 files changed

+85
-0
lines changed

README.md

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,13 @@
1212

1313
data Context2D :: *
1414

15+
type Dimensions = { height :: Number, width :: Number }
16+
17+
data LineCap where
18+
Round :: LineCap
19+
Square :: LineCap
20+
Butt :: LineCap
21+
1522
type Rectangle = { h :: Number, w :: Number, y :: Number, x :: Number }
1623

1724
type ScaleTransform = { scaleY :: Number, scaleX :: Number }
@@ -39,8 +46,14 @@
3946

4047
fillRect :: forall eff. Context2D -> Rectangle -> Eff (canvas :: Canvas | eff) Context2D
4148

49+
getCanvasDimensions :: forall eff. CanvasElement -> Eff (canvas :: Canvas | eff) Dimensions
50+
4251
getCanvasElementById :: forall eff. String -> Eff (canvas :: Canvas | eff) CanvasElement
4352

53+
getCanvasHeight :: forall eff. CanvasElement -> Eff (canvas :: Canvas | eff) Number
54+
55+
getCanvasWidth :: forall eff. CanvasElement -> Eff (canvas :: Canvas | eff) Number
56+
4457
getContext2D :: forall eff. CanvasElement -> Eff (canvas :: Canvas | eff) Context2D
4558

4659
lineTo :: forall eff. Context2D -> Number -> Number -> Eff (canvas :: Canvas | eff) Context2D
@@ -57,8 +70,18 @@
5770

5871
scale :: forall eff. ScaleTransform -> Context2D -> Eff (canvas :: Canvas | eff) Context2D
5972

73+
setCanvasDimensions :: forall eff. Dimensions -> CanvasElement -> Eff (canvas :: Canvas | eff) CanvasElement
74+
75+
setCanvasHeight :: forall eff. Number -> CanvasElement -> Eff (canvas :: Canvas | eff) CanvasElement
76+
77+
setCanvasWidth :: forall eff. Number -> CanvasElement -> Eff (canvas :: Canvas | eff) CanvasElement
78+
6079
setFillStyle :: forall eff. String -> Context2D -> Eff (canvas :: Canvas | eff) Context2D
6180

81+
setLineCap :: forall eff. LineCap -> Context2D -> Eff (canvas :: Canvas | eff) Context2D
82+
83+
setLineCapImpl :: forall eff. String -> Context2D -> Eff (canvas :: Canvas | eff) Context2D
84+
6285
setLineWidth :: forall eff. Number -> Context2D -> Eff (canvas :: Canvas | eff) Context2D
6386

6487
setShadowBlur :: forall eff. Number -> Context2D -> Eff (canvas :: Canvas | eff) Context2D

src/Graphics/Canvas.purs

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,51 @@ foreign import getContext2D
2222
\ };\
2323
\}" :: forall eff. CanvasElement -> Eff (canvas :: Canvas | eff) Context2D
2424

25+
foreign import getCanvasWidth
26+
"function getCanvasWidth(canvas){\
27+
\ return function(){\
28+
\ return canvas.width;\
29+
\ };\
30+
\};" :: forall eff. CanvasElement -> Eff (canvas :: Canvas | eff) Number
31+
32+
foreign import getCanvasHeight
33+
"function getCanvasHeight(canvas){\
34+
\ return function(){\
35+
\ return canvas.height;\
36+
\ };\
37+
\};" :: forall eff. CanvasElement -> Eff (canvas :: Canvas | eff) Number
38+
39+
foreign import setCanvasWidth
40+
"function setCanvasWidth(width){\
41+
\ return function(canvas){\
42+
\ return function(){\
43+
\ canvas.width = width;\
44+
\ return canvas;\
45+
\ };\
46+
\ };\
47+
\};" :: forall eff. Number -> CanvasElement -> Eff (canvas :: Canvas | eff) CanvasElement
48+
49+
foreign import setCanvasHeight
50+
"function setCanvasHeight(height){\
51+
\ return function(canvas){\
52+
\ return function(){\
53+
\ canvas.height = height;\
54+
\ return canvas; \
55+
\ };\
56+
\ };\
57+
\};" :: forall eff. Number -> CanvasElement -> Eff (canvas :: Canvas | eff) CanvasElement
58+
59+
type Dimensions = {width :: Number, height :: Number}
60+
61+
getCanvasDimensions :: forall eff. CanvasElement -> Eff (canvas :: Canvas | eff) Dimensions
62+
getCanvasDimensions ce = do
63+
w <- getCanvasWidth ce
64+
h <- getCanvasHeight ce
65+
return {width : w, height : h}
66+
67+
setCanvasDimensions :: forall eff. Dimensions -> CanvasElement -> Eff (canvas :: Canvas | eff) CanvasElement
68+
setCanvasDimensions d ce = setCanvasHeight d.height ce >>= setCanvasWidth d.width
69+
2570
-- |
2671
-- Context Properties
2772
--
@@ -96,6 +141,23 @@ foreign import setShadowOffsetY
96141
\ };\
97142
\}" :: forall eff. Number -> Context2D -> Eff (canvas :: Canvas | eff) Context2D
98143

144+
data LineCap = Round | Square | Butt
145+
146+
foreign import setLineCapImpl
147+
"function setLineCapImpl(cap){\
148+
\ return function(ctx) {\
149+
\ return function() {\
150+
\ ctx.lineCap = cap;\
151+
\ return ctx;\
152+
\ };\
153+
\ };\
154+
\}" :: forall eff. String -> Context2D -> Eff (canvas :: Canvas | eff) Context2D
155+
156+
setLineCap :: forall eff. LineCap -> Context2D -> Eff (canvas :: Canvas | eff) Context2D
157+
setLineCap Round = setLineCapImpl "round"
158+
setLineCap Square = setLineCapImpl "square"
159+
setLineCap Butt = setLineCapImpl "butt"
160+
99161
-- |
100162
-- Paths
101163
--

0 commit comments

Comments
 (0)