Skip to content

Commit 2ce6f95

Browse files
committed
Add full drawImage API
1 parent 140ae85 commit 2ce6f95

File tree

2 files changed

+75
-0
lines changed

2 files changed

+75
-0
lines changed

src/Graphics/Canvas.js

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@
33

44
// module Graphics.Canvas
55

6+
exports.canvasElementToImageSource = function(e) {
7+
return e;
8+
};
9+
610
exports.getCanvasElementByIdImpl = function(id, Just, Nothing) {
711
return function() {
812
var el = document.getElementById(id);
@@ -445,3 +449,58 @@ exports.getImageDataPixelArray = function(image_data) {
445449
return image_data.data;
446450
};
447451
};
452+
453+
exports.drawImage = function(ctx) {
454+
return function(image_source) {
455+
return function(dx) {
456+
return function(dy) {
457+
return function() {
458+
ctx.drawImage(image_source, dx, dy);
459+
return ctx;
460+
};
461+
};
462+
};
463+
};
464+
};
465+
466+
exports.drawImageScale = function(ctx) {
467+
return function(image_source) {
468+
return function(dx) {
469+
return function(dy) {
470+
return function(dWidth) {
471+
return function(dHeight) {
472+
return function() {
473+
ctx.drawImage(image_source, dx, dy, dWidth, dHeight);
474+
return ctx;
475+
};
476+
};
477+
};
478+
};
479+
};
480+
};
481+
};
482+
483+
exports.drawImageFull = function(ctx) {
484+
return function(image_source) {
485+
return function(sx) {
486+
return function(sy) {
487+
return function(sWidth) {
488+
return function(sHeight) {
489+
return function(dx) {
490+
return function(dy) {
491+
return function(dWidth) {
492+
return function(dHeight) {
493+
return function() {
494+
ctx.drawImage(image_source, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight);
495+
return ctx;
496+
};
497+
};
498+
};
499+
};
500+
};
501+
};
502+
};
503+
};
504+
};
505+
};
506+
};

src/Graphics/Canvas.purs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ module Graphics.Canvas
77
, Context2D()
88
, ImageData()
99
, CanvasPixelArray()
10+
, CanvasImageSource()
1011
, Arc()
1112
, Composite(..)
1213
, Dimensions()
@@ -82,6 +83,11 @@ module Graphics.Canvas
8283
, putImageDataFull
8384
, createImageData
8485
, createImageDataCopy
86+
87+
, canvasElementToImageSource
88+
, drawImage
89+
, drawImageScale
90+
, drawImageFull
8591
) where
8692

8793
import Prelude
@@ -105,6 +111,11 @@ foreign import data ImageData :: *
105111
-- | An array of pixel data.
106112
foreign import data CanvasPixelArray :: *
107113

114+
-- | Opaque object for drawing elements and things to the canvas.
115+
foreign import data CanvasImageSource :: *
116+
117+
foreign import canvasElementToImageSource :: CanvasElement -> CanvasImageSource
118+
108119
foreign import getCanvasElementByIdImpl ::
109120
forall r eff. Fn3 String
110121
(CanvasElement -> r)
@@ -446,3 +457,8 @@ foreign import getImageDataHeight :: forall eff. ImageData -> Eff (canvas :: Can
446457
-- | Get the pixel data array from an image data object.
447458
foreign import getImageDataPixelArray :: forall eff. ImageData -> Eff (canvas :: Canvas | eff) CanvasPixelArray
448459

460+
foreign import drawImage :: forall eff. Context2D -> CanvasImageSource -> Number -> Number -> Eff (canvas :: Canvas | eff) Context2D
461+
462+
foreign import drawImageScale :: forall eff. Context2D -> CanvasImageSource -> Number -> Number -> Number -> Number -> Eff (canvas :: Canvas | eff) Context2D
463+
464+
foreign import drawImageFull :: forall eff. Context2D -> CanvasImageSource -> Number -> Number -> Number -> Number -> Number -> Number -> Number -> Number -> Eff (canvas :: Canvas | eff) Context2D

0 commit comments

Comments
 (0)