From bddfc71f1fd3a2a959372eb1c9d88d9884751d9f Mon Sep 17 00:00:00 2001 From: Harry Garrood Date: Wed, 3 Dec 2014 11:23:16 +0000 Subject: [PATCH 1/3] Add getter and setter for textAlign --- src/Graphics/Canvas.purs | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/src/Graphics/Canvas.purs b/src/Graphics/Canvas.purs index 0f7938a..99d3853 100644 --- a/src/Graphics/Canvas.purs +++ b/src/Graphics/Canvas.purs @@ -457,6 +457,44 @@ foreign import transform -- Text -- +data TextAlign + = AlignLeft | AlignRight | AlignCenter | AlignStart | AlignEnd + +instance showTextAlign :: Show TextAlign where + show AlignLeft = "left" + show AlignRight = "right" + show AlignCenter = "center" + show AlignStart = "start" + show AlignEnd = "end" + +unsafeParseTextAlign :: String -> TextAlign +unsafeParseTextAlign "left" = AlignLeft +unsafeParseTextAlign "right" = AlignRight +unsafeParseTextAlign "center" = AlignCenter +unsafeParseTextAlign "start" = AlignStart +unsafeParseTextAlign "end" = AlignEnd + +foreign import textAlign + """function textAlign(ctx) { + return function() { + return unsafeParseTextAlign(ctx.textAlign); + } + }""" :: forall eff. Context2D -> Eff (canvas :: Canvas | eff) TextAlign + +foreign import setTextAlignImpl + """function setTextAlignImpl(ctx) { + return function(textAlign) { + return function() { + ctx.textAlign = textAlign; + return ctx; + } + } + }""" :: forall eff. Context2D -> String -> (Eff (canvas :: Canvas | eff) Context2D) + +setTextAlign :: forall eff. Context2D -> TextAlign -> Eff (canvas :: Canvas | eff) Context2D +setTextAlign ctx textAlign = + setTextAlignImpl ctx (show textAlign) + type TextMetrics = { width :: Number } foreign import font From 966606f836f850354b17f02c87e2894492224c28 Mon Sep 17 00:00:00 2001 From: Harry Garrood Date: Wed, 3 Dec 2014 11:35:03 +0000 Subject: [PATCH 2/3] Only export that which is meant to be exported --- src/Graphics/Canvas.purs | 83 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 82 insertions(+), 1 deletion(-) diff --git a/src/Graphics/Canvas.purs b/src/Graphics/Canvas.purs index 99d3853..ed98a2b 100644 --- a/src/Graphics/Canvas.purs +++ b/src/Graphics/Canvas.purs @@ -1,4 +1,85 @@ -module Graphics.Canvas where +module Graphics.Canvas + ( Canvas() + , CanvasElement() + , Context2D() + , ImageData() + , CanvasPixelArray() + , Arc() + , Composite(..) + , Dimensions() + , LineCap(..) + , Rectangle() + , ScaleTransform() + , TextMetrics() + , Transform() + , TranslateTransform() + , TextAlign(..) + + , getCanvasElementById + , getContext2D + , getCanvasWidth + , setCanvasWidth + , getCanvasHeight + , setCanvasHeight + , getCanvasDimensions + , setCanvasDimensions + , canvasToDataURL + + , setLineWidth + , setFillStyle + , setStrokeStyle + , setShadowBlur + , setShadowOffsetX + , setShadowOffsetY + , setShadowColor + + , setLineCap + , setGlobalCompositeOperation + , setGlobalAlpha + + , beginPath + , stroke + , fill + , clip + , lineTo + , moveTo + , closePath + , strokePath + , fillPath + + , arc + + , rect + , fillRect + , strokeRect + , clearRect + + , scale + , rotate + , translate + , transform + + , textAlign + , setTextAlign + , font + , setFont + , fillText + , strokeText + , measureText + + , save + , restore + , withContext + + , getImageData + , getImageDataWidth + , getImageDataHeight + , getImageDataPixelArray + , putImageData + , putImageDataFull + , createImageData + , createImageDataCopy + ) where import Data.Function import Data.Maybe From c2c5456b8ab15d25d907a3e7e39843efccdbaac5 Mon Sep 17 00:00:00 2001 From: Harry Garrood Date: Wed, 3 Dec 2014 11:35:49 +0000 Subject: [PATCH 3/3] Update README with new API --- README.md | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 4ce8f7f..e59b273 100644 --- a/README.md +++ b/README.md @@ -40,6 +40,13 @@ type ScaleTransform = { scaleY :: Number, scaleX :: Number } + data TextAlign where + AlignLeft :: TextAlign + AlignRight :: TextAlign + AlignCenter :: TextAlign + AlignStart :: TextAlign + AlignEnd :: TextAlign + type TextMetrics = { width :: Number } type Transform = { m32 :: Number, m31 :: Number, m22 :: Number, m21 :: Number, m12 :: Number, m11 :: Number } @@ -51,6 +58,8 @@ instance showComposite :: Show Composite + instance showTextAlign :: Show TextAlign + ### Values @@ -84,8 +93,6 @@ getCanvasElementById :: forall eff. String -> Eff (canvas :: Canvas | eff) (Maybe CanvasElement) - getCanvasElementByIdImpl :: forall a eff. Fn3 String (a -> Maybe a) (Maybe a) (Eff (canvas :: Canvas | eff) (Maybe CanvasElement)) - getCanvasHeight :: forall eff. CanvasElement -> Eff (canvas :: Canvas | eff) Number getCanvasWidth :: forall eff. CanvasElement -> Eff (canvas :: Canvas | eff) Number @@ -134,12 +141,8 @@ setGlobalCompositeOperation :: forall eff. Context2D -> Composite -> Eff (canvas :: Canvas | eff) Context2D - setGlobalCompositeOperationImpl :: forall eff. Context2D -> String -> 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 @@ -152,6 +155,8 @@ setStrokeStyle :: forall eff. String -> Context2D -> Eff (canvas :: Canvas | eff) Context2D + setTextAlign :: forall eff. Context2D -> TextAlign -> Eff (canvas :: Canvas | eff) Context2D + stroke :: forall eff. Context2D -> Eff (canvas :: Canvas | eff) Context2D strokePath :: forall eff a. Context2D -> Eff (canvas :: Canvas | eff) a -> Eff (canvas :: Canvas | eff) a @@ -160,6 +165,8 @@ strokeText :: forall eff. Context2D -> String -> Number -> Number -> Eff (canvas :: Canvas | eff) Context2D + textAlign :: forall eff. Context2D -> Eff (canvas :: Canvas | eff) TextAlign + transform :: forall eff. Transform -> Context2D -> Eff (canvas :: Canvas | eff) Context2D translate :: forall eff. TranslateTransform -> Context2D -> Eff (canvas :: Canvas | eff) Context2D