Skip to content

Commit 637ed3a

Browse files
committed
Merge pull request #31 from igagen/patterns
Add createPattern, setPatternFillStyle to Graphics.Canvas
2 parents 1e3bbeb + e86e49b commit 637ed3a

File tree

3 files changed

+78
-0
lines changed

3 files changed

+78
-0
lines changed

docs/Graphics/Canvas.md

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,14 @@ data CanvasImageSource :: *
4343

4444
Opaque object for drawing elements and things to the canvas.
4545

46+
#### `CanvasPattern`
47+
48+
``` purescript
49+
data CanvasPattern :: *
50+
```
51+
52+
Opaque object describing a pattern.
53+
4654
#### `CanvasGradient`
4755

4856
``` purescript
@@ -649,6 +657,34 @@ drawImageScale :: forall eff. Context2D -> CanvasImageSource -> Number -> Number
649657
drawImageFull :: forall eff. Context2D -> CanvasImageSource -> Number -> Number -> Number -> Number -> Number -> Number -> Number -> Number -> Eff (canvas :: Canvas | eff) Context2D
650658
```
651659

660+
#### `PatternRepeat`
661+
662+
``` purescript
663+
data PatternRepeat
664+
= Repeat
665+
| RepeatX
666+
| RepeatY
667+
| NoRepeat
668+
```
669+
670+
Enumerates the different types of pattern repetitions.
671+
672+
#### `createPattern`
673+
674+
``` purescript
675+
createPattern :: forall eff. CanvasImageSource -> PatternRepeat -> Context2D -> Eff (canvas :: Canvas | eff) CanvasPattern
676+
```
677+
678+
Create a new canvas pattern (repeatable image).
679+
680+
#### `setPatternFillStyle`
681+
682+
``` purescript
683+
setPatternFillStyle :: forall eff. CanvasGradient -> Context2D -> Eff (canvas :: Canvas | eff) Context2D
684+
```
685+
686+
Set the Context2D fillstyle to the CanvasPattern.
687+
652688
#### `LinearGradient`
653689

654690
``` purescript

src/Graphics/Canvas.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -501,6 +501,25 @@ exports.drawImageFull = function(ctx) {
501501
};
502502
};
503503

504+
exports.createPatternImpl = function(img) {
505+
return function(repeat) {
506+
return function(ctx) {
507+
return function() {
508+
return ctx.createPattern(img, repeat);
509+
};
510+
};
511+
};
512+
};
513+
514+
exports.setPatternFillStyle = function(pattern) {
515+
return function(ctx) {
516+
return function() {
517+
ctx.fillStyle = pattern;
518+
return ctx;
519+
};
520+
};
521+
};
522+
504523
exports.createLinearGradient = function(linearGradient) {
505524
return function(ctx) {
506525
return function() {

src/Graphics/Canvas.purs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ module Graphics.Canvas
1717
, Transform()
1818
, TranslateTransform()
1919
, TextAlign(..)
20+
, CanvasPattern()
21+
, PatternRepeat(..)
2022
, CanvasGradient()
2123
, LinearGradient()
2224
, RadialGradient()
@@ -91,6 +93,9 @@ module Graphics.Canvas
9193
, drawImageScale
9294
, drawImageFull
9395

96+
, createPattern
97+
, setPatternFillStyle
98+
9499
, createLinearGradient
95100
, createRadialGradient
96101
, addColorStop
@@ -123,6 +128,9 @@ type ImageData = { width :: Int, height :: Int, data :: Uint8ClampedArray }
123128
-- | Opaque object for drawing elements and things to the canvas.
124129
foreign import data CanvasImageSource :: *
125130

131+
-- | Opaque object describing a pattern.
132+
foreign import data CanvasPattern :: *
133+
126134
-- | Opaque object describing a gradient.
127135
foreign import data CanvasGradient :: *
128136

@@ -471,6 +479,21 @@ foreign import drawImageScale :: forall eff. Context2D -> CanvasImageSource -> N
471479

472480
foreign import drawImageFull :: forall eff. Context2D -> CanvasImageSource -> Number -> Number -> Number -> Number -> Number -> Number -> Number -> Number -> Eff (canvas :: Canvas | eff) Context2D
473481

482+
-- | Enumerates the different types of pattern repetitions.
483+
data PatternRepeat = Repeat | RepeatX | RepeatY | NoRepeat
484+
485+
foreign import createPatternImpl :: forall eff. CanvasImageSource -> String -> Context2D -> Eff (canvas :: Canvas | eff) CanvasPattern
486+
487+
-- | Create a new canvas pattern (repeatable image).
488+
createPattern :: forall eff. CanvasImageSource -> PatternRepeat -> Context2D -> Eff (canvas :: Canvas | eff) CanvasPattern
489+
createPattern img Repeat = createPatternImpl img "repeat"
490+
createPattern img RepeatX = createPatternImpl img "repeat-x"
491+
createPattern img RepeatY = createPatternImpl img "repeat-y"
492+
createPattern img NoRepeat = createPatternImpl img "no-repeat"
493+
494+
-- | Set the Context2D fillstyle to the CanvasPattern.
495+
foreign import setPatternFillStyle :: forall eff. CanvasPattern -> Context2D -> Eff (canvas :: Canvas | eff) Context2D
496+
474497
-- | A type representing a linear gradient.
475498
-- | - Starting point coordinates: (`x0`, `y0`)
476499
-- | - Ending point coordinates: (`x1`, `y1`)

0 commit comments

Comments
 (0)