diff --git a/README.md b/README.md index c489a84..cf0d7e1 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,13 @@ data Context2D :: * + type Dimensions = { height :: Number, width :: Number } + + data LineCap where + Round :: LineCap + Square :: LineCap + Butt :: LineCap + type Rectangle = { h :: Number, w :: Number, y :: Number, x :: Number } type ScaleTransform = { scaleY :: Number, scaleX :: Number } @@ -39,8 +46,14 @@ fillRect :: forall eff. Context2D -> Rectangle -> Eff (canvas :: Canvas | eff) Context2D + getCanvasDimensions :: forall eff. CanvasElement -> Eff (canvas :: Canvas | eff) Dimensions + getCanvasElementById :: forall eff. String -> Eff (canvas :: Canvas | eff) CanvasElement + getCanvasHeight :: forall eff. CanvasElement -> Eff (canvas :: Canvas | eff) Number + + getCanvasWidth :: forall eff. CanvasElement -> Eff (canvas :: Canvas | eff) Number + getContext2D :: forall eff. CanvasElement -> Eff (canvas :: Canvas | eff) Context2D lineTo :: forall eff. Context2D -> Number -> Number -> Eff (canvas :: Canvas | eff) Context2D @@ -57,8 +70,18 @@ scale :: forall eff. ScaleTransform -> Context2D -> Eff (canvas :: Canvas | eff) Context2D + setCanvasDimensions :: forall eff. Dimensions -> CanvasElement -> Eff (canvas :: Canvas | eff) CanvasElement + + setCanvasHeight :: forall eff. Number -> CanvasElement -> Eff (canvas :: Canvas | eff) CanvasElement + + setCanvasWidth :: forall eff. Number -> CanvasElement -> Eff (canvas :: Canvas | eff) CanvasElement + setFillStyle :: forall eff. String -> Context2D -> Eff (canvas :: Canvas | eff) Context2D + setLineCap :: forall eff. LineCap -> Context2D -> Eff (canvas :: Canvas | eff) Context2D + + setLineCapImpl :: forall eff. String -> Context2D -> Eff (canvas :: Canvas | eff) Context2D + setLineWidth :: forall eff. Number -> Context2D -> Eff (canvas :: Canvas | eff) Context2D setShadowBlur :: forall eff. Number -> Context2D -> Eff (canvas :: Canvas | eff) Context2D diff --git a/src/Graphics/Canvas.purs b/src/Graphics/Canvas.purs index 9a493e3..505a090 100644 --- a/src/Graphics/Canvas.purs +++ b/src/Graphics/Canvas.purs @@ -22,6 +22,51 @@ foreign import getContext2D \ };\ \}" :: forall eff. CanvasElement -> Eff (canvas :: Canvas | eff) Context2D +foreign import getCanvasWidth + "function getCanvasWidth(canvas){\ + \ return function(){\ + \ return canvas.width;\ + \ };\ + \};" :: forall eff. CanvasElement -> Eff (canvas :: Canvas | eff) Number + +foreign import getCanvasHeight + "function getCanvasHeight(canvas){\ + \ return function(){\ + \ return canvas.height;\ + \ };\ + \};" :: forall eff. CanvasElement -> Eff (canvas :: Canvas | eff) Number + +foreign import setCanvasWidth + "function setCanvasWidth(width){\ + \ return function(canvas){\ + \ return function(){\ + \ canvas.width = width;\ + \ return canvas;\ + \ };\ + \ };\ + \};" :: forall eff. Number -> CanvasElement -> Eff (canvas :: Canvas | eff) CanvasElement + +foreign import setCanvasHeight + "function setCanvasHeight(height){\ + \ return function(canvas){\ + \ return function(){\ + \ canvas.height = height;\ + \ return canvas; \ + \ };\ + \ };\ + \};" :: forall eff. Number -> CanvasElement -> Eff (canvas :: Canvas | eff) CanvasElement + +type Dimensions = {width :: Number, height :: Number} + +getCanvasDimensions :: forall eff. CanvasElement -> Eff (canvas :: Canvas | eff) Dimensions +getCanvasDimensions ce = do + w <- getCanvasWidth ce + h <- getCanvasHeight ce + return {width : w, height : h} + +setCanvasDimensions :: forall eff. Dimensions -> CanvasElement -> Eff (canvas :: Canvas | eff) CanvasElement +setCanvasDimensions d ce = setCanvasHeight d.height ce >>= setCanvasWidth d.width + -- | -- Context Properties -- @@ -96,6 +141,23 @@ foreign import setShadowOffsetY \ };\ \}" :: forall eff. Number -> Context2D -> Eff (canvas :: Canvas | eff) Context2D +data LineCap = Round | Square | Butt + +foreign import setLineCapImpl + "function setLineCapImpl(cap){\ + \ return function(ctx) {\ + \ return function() {\ + \ ctx.lineCap = cap;\ + \ return ctx;\ + \ };\ + \ };\ + \}" :: forall eff. String -> Context2D -> Eff (canvas :: Canvas | eff) Context2D + +setLineCap :: forall eff. LineCap -> Context2D -> Eff (canvas :: Canvas | eff) Context2D +setLineCap Round = setLineCapImpl "round" +setLineCap Square = setLineCapImpl "square" +setLineCap Butt = setLineCapImpl "butt" + -- | -- Paths --