Skip to content

Text align #12

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Dec 3, 2014
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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