Skip to content

Commit a032001

Browse files
committed
Merge pull request #3 from waterson/master
add methods for dealing with text
2 parents b9a2129 + 69e42d0 commit a032001

File tree

2 files changed

+72
-0
lines changed

2 files changed

+72
-0
lines changed

README.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323

2424
type ScaleTransform = { scaleY :: Number, scaleX :: Number }
2525

26+
type TextMetrics = { width :: Number }
27+
2628
type Transform = { m32 :: Number, m31 :: Number, m22 :: Number, m21 :: Number, m12 :: Number, m11 :: Number }
2729

2830
type TranslateTransform = { translateY :: Number, translateX :: Number }
@@ -46,6 +48,10 @@
4648

4749
fillRect :: forall eff. Context2D -> Rectangle -> Eff (canvas :: Canvas | eff) Context2D
4850

51+
fillText :: forall eff. Context2D -> String -> Number -> Number -> Eff (canvas :: Canvas | eff) Context2D
52+
53+
font :: forall eff. Context2D -> Eff (canvas :: Canvas | eff) String
54+
4955
getCanvasDimensions :: forall eff. CanvasElement -> Eff (canvas :: Canvas | eff) Dimensions
5056

5157
getCanvasElementById :: forall eff. String -> Eff (canvas :: Canvas | eff) CanvasElement
@@ -58,6 +64,8 @@
5864

5965
lineTo :: forall eff. Context2D -> Number -> Number -> Eff (canvas :: Canvas | eff) Context2D
6066

67+
measureText :: forall eff. Context2D -> String -> Eff (canvas :: Canvas | eff) TextMetrics
68+
6169
moveTo :: forall eff. Context2D -> Number -> Number -> Eff (canvas :: Canvas | eff) Context2D
6270

6371
rect :: forall eff. Context2D -> Rectangle -> Eff (canvas :: Canvas | eff) Context2D
@@ -78,6 +86,8 @@
7886

7987
setFillStyle :: forall eff. String -> Context2D -> Eff (canvas :: Canvas | eff) Context2D
8088

89+
setFont :: forall eff. String -> Context2D -> Eff (canvas :: Canvas | eff) Context2D
90+
8191
setLineCap :: forall eff. LineCap -> Context2D -> Eff (canvas :: Canvas | eff) Context2D
8292

8393
setLineCapImpl :: forall eff. String -> Context2D -> Eff (canvas :: Canvas | eff) Context2D
@@ -100,6 +110,8 @@
100110

101111
strokeRect :: forall eff. Context2D -> Rectangle -> Eff (canvas :: Canvas | eff) Context2D
102112

113+
strokeText :: forall eff. Context2D -> String -> Number -> Number -> Eff (canvas :: Canvas | eff) Context2D
114+
103115
transform :: forall eff. Transform -> Context2D -> Eff (canvas :: Canvas | eff) Context2D
104116

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

src/Graphics/Canvas.purs

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -376,6 +376,66 @@ foreign import transform
376376
\ };\
377377
\}" :: forall eff. Transform -> Context2D -> Eff (canvas :: Canvas | eff) Context2D
378378

379+
-- |
380+
-- Text
381+
--
382+
383+
type TextMetrics = { width :: Number }
384+
385+
foreign import font
386+
"function font(ctx) {\
387+
\ return function() {\
388+
\ return ctx.font;\
389+
\ };\
390+
\}" :: forall eff. Context2D -> Eff (canvas :: Canvas | eff) String
391+
392+
foreign import setFont
393+
"function setFont(fontspec) {\
394+
\ return function(ctx) {\
395+
\ return function() {\
396+
\ ctx.font = fontspec;\
397+
\ return ctx;\
398+
\ };\
399+
\ };\
400+
\}" :: forall eff. String -> Context2D -> Eff (canvas :: Canvas | eff) Context2D
401+
402+
foreign import fillText
403+
"function fillText(ctx) {\
404+
\ return function(text) {\
405+
\ return function(x) {\
406+
\ return function(y) {\
407+
\ return function() {\
408+
\ ctx.fillText(text, x, y);\
409+
\ return ctx;\
410+
\ };\
411+
\ };\
412+
\ };\
413+
\ };\
414+
\}" :: forall eff. Context2D -> String -> Number -> Number -> Eff (canvas :: Canvas | eff) Context2D
415+
416+
foreign import strokeText
417+
"function strokeText(ctx) {\
418+
\ return function(text) {\
419+
\ return function(x) {\
420+
\ return function(y) {\
421+
\ return function() {\
422+
\ ctx.fillText(text, x, y);\
423+
\ return ctx;\
424+
\ };\
425+
\ };\
426+
\ };\
427+
\ };\
428+
\}" :: forall eff. Context2D -> String -> Number -> Number -> Eff (canvas :: Canvas | eff) Context2D
429+
430+
foreign import measureText
431+
"function measureText(ctx) {\
432+
\ return function(text) {\
433+
\ return function() {\
434+
\ return ctx.measureText(text);\
435+
\ };\
436+
\ };\
437+
\}" :: forall eff. Context2D -> String -> Eff (canvas :: Canvas | eff) TextMetrics
438+
379439
-- |
380440
-- Context
381441
--

0 commit comments

Comments
 (0)