Skip to content

Commit de26afb

Browse files
committed
Merge pull request #12 from hdgarrood/textAlign
Text align
2 parents 43cc6b0 + c2c5456 commit de26afb

File tree

2 files changed

+133
-7
lines changed

2 files changed

+133
-7
lines changed

README.md

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,13 @@
4040

4141
type ScaleTransform = { scaleY :: Number, scaleX :: Number }
4242

43+
data TextAlign where
44+
AlignLeft :: TextAlign
45+
AlignRight :: TextAlign
46+
AlignCenter :: TextAlign
47+
AlignStart :: TextAlign
48+
AlignEnd :: TextAlign
49+
4350
type TextMetrics = { width :: Number }
4451

4552
type Transform = { m32 :: Number, m31 :: Number, m22 :: Number, m21 :: Number, m12 :: Number, m11 :: Number }
@@ -51,6 +58,8 @@
5158

5259
instance showComposite :: Show Composite
5360

61+
instance showTextAlign :: Show TextAlign
62+
5463

5564
### Values
5665

@@ -84,8 +93,6 @@
8493

8594
getCanvasElementById :: forall eff. String -> Eff (canvas :: Canvas | eff) (Maybe CanvasElement)
8695

87-
getCanvasElementByIdImpl :: forall a eff. Fn3 String (a -> Maybe a) (Maybe a) (Eff (canvas :: Canvas | eff) (Maybe CanvasElement))
88-
8996
getCanvasHeight :: forall eff. CanvasElement -> Eff (canvas :: Canvas | eff) Number
9097

9198
getCanvasWidth :: forall eff. CanvasElement -> Eff (canvas :: Canvas | eff) Number
@@ -134,12 +141,8 @@
134141

135142
setGlobalCompositeOperation :: forall eff. Context2D -> Composite -> Eff (canvas :: Canvas | eff) Context2D
136143

137-
setGlobalCompositeOperationImpl :: forall eff. Context2D -> String -> Eff (canvas :: Canvas | eff) Context2D
138-
139144
setLineCap :: forall eff. LineCap -> Context2D -> Eff (canvas :: Canvas | eff) Context2D
140145

141-
setLineCapImpl :: forall eff. String -> Context2D -> Eff (canvas :: Canvas | eff) Context2D
142-
143146
setLineWidth :: forall eff. Number -> Context2D -> Eff (canvas :: Canvas | eff) Context2D
144147

145148
setShadowBlur :: forall eff. Number -> Context2D -> Eff (canvas :: Canvas | eff) Context2D
@@ -152,6 +155,8 @@
152155

153156
setStrokeStyle :: forall eff. String -> Context2D -> Eff (canvas :: Canvas | eff) Context2D
154157

158+
setTextAlign :: forall eff. Context2D -> TextAlign -> Eff (canvas :: Canvas | eff) Context2D
159+
155160
stroke :: forall eff. Context2D -> Eff (canvas :: Canvas | eff) Context2D
156161

157162
strokePath :: forall eff a. Context2D -> Eff (canvas :: Canvas | eff) a -> Eff (canvas :: Canvas | eff) a
@@ -160,6 +165,8 @@
160165

161166
strokeText :: forall eff. Context2D -> String -> Number -> Number -> Eff (canvas :: Canvas | eff) Context2D
162167

168+
textAlign :: forall eff. Context2D -> Eff (canvas :: Canvas | eff) TextAlign
169+
163170
transform :: forall eff. Transform -> Context2D -> Eff (canvas :: Canvas | eff) Context2D
164171

165172
translate :: forall eff. TranslateTransform -> Context2D -> Eff (canvas :: Canvas | eff) Context2D

src/Graphics/Canvas.purs

Lines changed: 120 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,85 @@
1-
module Graphics.Canvas where
1+
module Graphics.Canvas
2+
( Canvas()
3+
, CanvasElement()
4+
, Context2D()
5+
, ImageData()
6+
, CanvasPixelArray()
7+
, Arc()
8+
, Composite(..)
9+
, Dimensions()
10+
, LineCap(..)
11+
, Rectangle()
12+
, ScaleTransform()
13+
, TextMetrics()
14+
, Transform()
15+
, TranslateTransform()
16+
, TextAlign(..)
17+
18+
, getCanvasElementById
19+
, getContext2D
20+
, getCanvasWidth
21+
, setCanvasWidth
22+
, getCanvasHeight
23+
, setCanvasHeight
24+
, getCanvasDimensions
25+
, setCanvasDimensions
26+
, canvasToDataURL
27+
28+
, setLineWidth
29+
, setFillStyle
30+
, setStrokeStyle
31+
, setShadowBlur
32+
, setShadowOffsetX
33+
, setShadowOffsetY
34+
, setShadowColor
35+
36+
, setLineCap
37+
, setGlobalCompositeOperation
38+
, setGlobalAlpha
39+
40+
, beginPath
41+
, stroke
42+
, fill
43+
, clip
44+
, lineTo
45+
, moveTo
46+
, closePath
47+
, strokePath
48+
, fillPath
49+
50+
, arc
51+
52+
, rect
53+
, fillRect
54+
, strokeRect
55+
, clearRect
56+
57+
, scale
58+
, rotate
59+
, translate
60+
, transform
61+
62+
, textAlign
63+
, setTextAlign
64+
, font
65+
, setFont
66+
, fillText
67+
, strokeText
68+
, measureText
69+
70+
, save
71+
, restore
72+
, withContext
73+
74+
, getImageData
75+
, getImageDataWidth
76+
, getImageDataHeight
77+
, getImageDataPixelArray
78+
, putImageData
79+
, putImageDataFull
80+
, createImageData
81+
, createImageDataCopy
82+
) where
283

384
import Data.Function
485
import Data.Maybe
@@ -457,6 +538,44 @@ foreign import transform
457538
-- Text
458539
--
459540

541+
data TextAlign
542+
= AlignLeft | AlignRight | AlignCenter | AlignStart | AlignEnd
543+
544+
instance showTextAlign :: Show TextAlign where
545+
show AlignLeft = "left"
546+
show AlignRight = "right"
547+
show AlignCenter = "center"
548+
show AlignStart = "start"
549+
show AlignEnd = "end"
550+
551+
unsafeParseTextAlign :: String -> TextAlign
552+
unsafeParseTextAlign "left" = AlignLeft
553+
unsafeParseTextAlign "right" = AlignRight
554+
unsafeParseTextAlign "center" = AlignCenter
555+
unsafeParseTextAlign "start" = AlignStart
556+
unsafeParseTextAlign "end" = AlignEnd
557+
558+
foreign import textAlign
559+
"""function textAlign(ctx) {
560+
return function() {
561+
return unsafeParseTextAlign(ctx.textAlign);
562+
}
563+
}""" :: forall eff. Context2D -> Eff (canvas :: Canvas | eff) TextAlign
564+
565+
foreign import setTextAlignImpl
566+
"""function setTextAlignImpl(ctx) {
567+
return function(textAlign) {
568+
return function() {
569+
ctx.textAlign = textAlign;
570+
return ctx;
571+
}
572+
}
573+
}""" :: forall eff. Context2D -> String -> (Eff (canvas :: Canvas | eff) Context2D)
574+
575+
setTextAlign :: forall eff. Context2D -> TextAlign -> Eff (canvas :: Canvas | eff) Context2D
576+
setTextAlign ctx textAlign =
577+
setTextAlignImpl ctx (show textAlign)
578+
460579
type TextMetrics = { width :: Number }
461580

462581
foreign import font

0 commit comments

Comments
 (0)