Skip to content

Commit d3b4b0e

Browse files
committed
Merge pull request #24 from jasonzoladz/feature-canvasgradient
Added CanvasGradient API
2 parents 45b77b9 + 1aeb645 commit d3b4b0e

File tree

4 files changed

+193
-0
lines changed

4 files changed

+193
-0
lines changed

.gitignore

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,13 @@
11
output/
22
node_modules/
33
bower_components/
4+
5+
# OS generated files #
6+
######################
7+
.DS_Store
8+
.DS_Store?
9+
._*
10+
.Spotlight-V100
11+
.Trashes
12+
ehthumbs.db
13+
Thumbs.db

docs/Graphics/Canvas.md

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,28 @@ data CanvasPixelArray :: *
4343

4444
An array of pixel data.
4545

46+
#### `CanvasImageSource`
47+
48+
``` purescript
49+
data CanvasImageSource :: *
50+
```
51+
52+
Opaque object for drawing elements and things to the canvas.
53+
54+
#### `CanvasGradient`
55+
56+
``` purescript
57+
data CanvasGradient :: *
58+
```
59+
60+
Opaque object describing a gradient.
61+
62+
#### `canvasElementToImageSource`
63+
64+
``` purescript
65+
canvasElementToImageSource :: CanvasElement -> CanvasImageSource
66+
```
67+
4668
#### `getCanvasElementById`
4769

4870
``` purescript
@@ -633,4 +655,76 @@ getImageDataPixelArray :: forall eff. ImageData -> Eff (canvas :: Canvas | eff)
633655

634656
Get the pixel data array from an image data object.
635657

658+
#### `drawImage`
659+
660+
``` purescript
661+
drawImage :: forall eff. Context2D -> CanvasImageSource -> Number -> Number -> Eff (canvas :: Canvas | eff) Context2D
662+
```
663+
664+
#### `drawImageScale`
665+
666+
``` purescript
667+
drawImageScale :: forall eff. Context2D -> CanvasImageSource -> Number -> Number -> Number -> Number -> Eff (canvas :: Canvas | eff) Context2D
668+
```
669+
670+
#### `drawImageFull`
671+
672+
``` purescript
673+
drawImageFull :: forall eff. Context2D -> CanvasImageSource -> Number -> Number -> Number -> Number -> Number -> Number -> Number -> Number -> Eff (canvas :: Canvas | eff) Context2D
674+
```
675+
676+
#### `LinearGradient`
677+
678+
``` purescript
679+
type LinearGradient = { x0 :: Number, y0 :: Number, x1 :: Number, y1 :: Number }
680+
```
681+
682+
A type representing a linear gradient.
683+
- Starting point coordinates: (`x0`, `y0`)
684+
- Ending point coordinates: (`x1`, `y1`)
685+
686+
#### `createLinearGradient`
687+
688+
``` purescript
689+
createLinearGradient :: forall eff. LinearGradient -> Context2D -> Eff (canvas :: Canvas | eff) CanvasGradient
690+
```
691+
692+
Create a linear CanvasGradient.
693+
694+
#### `RadialGradient`
695+
696+
``` purescript
697+
type RadialGradient = { x0 :: Number, y0 :: Number, r0 :: Number, x1 :: Number, y1 :: Number, r1 :: Number }
698+
```
699+
700+
A type representing a radial gradient.
701+
- Starting circle center coordinates: (`x0`, `y0`)
702+
- Starting circle radius: `r0`
703+
- Ending circle center coordinates: (`x1`, `y1`)
704+
- Ending circle radius: `r1`
705+
706+
#### `createRadialGradient`
707+
708+
``` purescript
709+
createRadialGradient :: forall eff. RadialGradient -> Context2D -> Eff (canvas :: Canvas | eff) CanvasGradient
710+
```
711+
712+
Create a radial CanvasGradient.
713+
714+
#### `addColorStop`
715+
716+
``` purescript
717+
addColorStop :: forall eff. Number -> String -> CanvasGradient -> Eff (canvas :: Canvas | eff) CanvasGradient
718+
```
719+
720+
Add a single color stop to a CanvasGradient.
721+
722+
#### `setGradientFillStyle`
723+
724+
``` purescript
725+
setGradientFillStyle :: forall eff. CanvasGradient -> Context2D -> Eff (canvas :: Canvas | eff) Context2D
726+
```
727+
728+
Set the Context2D fillstyle to the CanvasGradient.
729+
636730

src/Graphics/Canvas.js

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -504,3 +504,43 @@ exports.drawImageFull = function(ctx) {
504504
};
505505
};
506506
};
507+
508+
exports.createLinearGradient = function(linearGradient) {
509+
return function(ctx) {
510+
return function() {
511+
return ctx.createLinearGradient(linearGradient.x0, linearGradient.y0, linearGradient.x1, linearGradient.y1);
512+
};
513+
};
514+
};
515+
516+
exports.createRadialGradient = function(radialGradient) {
517+
return function(ctx) {
518+
return function() {
519+
return ctx.createRadialGradient(radialGradient.x0, radialGradient.y0, radialGradient.r0, radialGradient.x1, radialGradient.y1, radialGradient.r1);
520+
};
521+
};
522+
};
523+
524+
exports.addColorStop = function(stop) {
525+
return function(color) {
526+
return function(gradient) {
527+
return function() {
528+
gradient.addColorStop(stop, color);
529+
return gradient;
530+
};
531+
};
532+
};
533+
};
534+
535+
exports.setGradientFillStyle = function(gradient) {
536+
return function(ctx) {
537+
return function() {
538+
ctx.fillStyle = gradient;
539+
return ctx;
540+
};
541+
};
542+
};
543+
544+
545+
546+

src/Graphics/Canvas.purs

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@ module Graphics.Canvas
1818
, Transform()
1919
, TranslateTransform()
2020
, TextAlign(..)
21+
, CanvasGradient()
22+
, LinearGradient()
23+
, RadialGradient()
2124

2225
, getCanvasElementById
2326
, getContext2D
@@ -88,6 +91,11 @@ module Graphics.Canvas
8891
, drawImage
8992
, drawImageScale
9093
, drawImageFull
94+
95+
, createLinearGradient
96+
, createRadialGradient
97+
, addColorStop
98+
, setGradientFillStyle
9199
) where
92100

93101
import Prelude
@@ -114,6 +122,9 @@ foreign import data CanvasPixelArray :: *
114122
-- | Opaque object for drawing elements and things to the canvas.
115123
foreign import data CanvasImageSource :: *
116124

125+
-- | Opaque object describing a gradient.
126+
foreign import data CanvasGradient :: *
127+
117128
foreign import canvasElementToImageSource :: CanvasElement -> CanvasImageSource
118129

119130
foreign import getCanvasElementByIdImpl ::
@@ -462,3 +473,41 @@ foreign import drawImage :: forall eff. Context2D -> CanvasImageSource -> Number
462473
foreign import drawImageScale :: forall eff. Context2D -> CanvasImageSource -> Number -> Number -> Number -> Number -> Eff (canvas :: Canvas | eff) Context2D
463474

464475
foreign import drawImageFull :: forall eff. Context2D -> CanvasImageSource -> Number -> Number -> Number -> Number -> Number -> Number -> Number -> Number -> Eff (canvas :: Canvas | eff) Context2D
476+
477+
-- | A type representing a linear gradient.
478+
-- | - Starting point coordinates: (`x0`, `y0`)
479+
-- | - Ending point coordinates: (`x1`, `y1`)
480+
481+
type LinearGradient =
482+
{ x0 :: Number
483+
, y0 :: Number
484+
, x1 :: Number
485+
, y1 :: Number
486+
}
487+
488+
-- | Create a linear CanvasGradient.
489+
foreign import createLinearGradient :: forall eff. LinearGradient -> Context2D -> Eff (canvas :: Canvas | eff) CanvasGradient
490+
491+
-- | A type representing a radial gradient.
492+
-- | - Starting circle center coordinates: (`x0`, `y0`)
493+
-- | - Starting circle radius: `r0`
494+
-- | - Ending circle center coordinates: (`x1`, `y1`)
495+
-- | - Ending circle radius: `r1`
496+
497+
type RadialGradient =
498+
{ x0 :: Number
499+
, y0 :: Number
500+
, r0 :: Number
501+
, x1 :: Number
502+
, y1 :: Number
503+
, r1 :: Number
504+
}
505+
506+
-- | Create a radial CanvasGradient.
507+
foreign import createRadialGradient :: forall eff. RadialGradient -> Context2D -> Eff (canvas :: Canvas | eff) CanvasGradient
508+
509+
-- | Add a single color stop to a CanvasGradient.
510+
foreign import addColorStop :: forall eff. Number -> String -> CanvasGradient -> Eff (canvas :: Canvas | eff) CanvasGradient
511+
512+
-- | Set the Context2D fillstyle to the CanvasGradient.
513+
foreign import setGradientFillStyle :: forall eff. CanvasGradient -> Context2D -> Eff (canvas :: Canvas | eff) Context2D

0 commit comments

Comments
 (0)