Skip to content

Commit

Permalink
Merge pull request #12 from hdgarrood/textAlign
Browse files Browse the repository at this point in the history
Text align
  • Loading branch information
garyb committed Dec 3, 2014
2 parents 43cc6b0 + c2c5456 commit de26afb
Show file tree
Hide file tree
Showing 2 changed files with 133 additions and 7 deletions.
19 changes: 13 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 }
Expand All @@ -51,6 +58,8 @@

instance showComposite :: Show Composite

instance showTextAlign :: Show TextAlign


### Values

Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand All @@ -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
Expand All @@ -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
Expand Down
121 changes: 120 additions & 1 deletion src/Graphics/Canvas.purs
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -457,6 +538,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
Expand Down

0 comments on commit de26afb

Please sign in to comment.