skia2/modules/canvaskit/htmlcanvas/pattern.js
Kevin Lubick 54c1b3dd43 [canvaskit] Remove Sk from nearly all function/type names.
This is a massive breaking change for all existing users of CanvasKit.

It will be (one of the only) changes in 0.19.0 to make the transition
easier.

Suggested reviewing order:
 - index.d.ts (to see type changes). Notice SkPicture still has Sk
   prefix, but no other types do (this felt "right" since Sk is
   part of the name of the type, but I can be swayed on this).
 - canvaskit-wasm-tests.ts
 - tests/*.spec.js
 - interface.js and helper.js
 - html examples
 - markdown files

Change-Id: I3b3d3815df2078f986893df3c70101d6248c117d
Docs-Preview: https://skia.org/?cl=322617
Bug: skia:10717
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/322617
Commit-Queue: Kevin Lubick <kjlubick@google.com>
Reviewed-by: Nathaniel Nifong <nifong@google.com>
2020-10-07 21:01:32 +00:00

69 lines
1.8 KiB
JavaScript

function CanvasPattern(image, repetition) {
this._shader = null;
// image should be an Image returned from HTMLCanvas.decodeImage()
this._image = image;
this._transform = CanvasKit.Matrix.identity();
if (repetition === '') {
repetition = 'repeat';
}
switch(repetition) {
case 'repeat-x':
this._tileX = CanvasKit.TileMode.Repeat;
// Skia's 'clamp' mode repeats the last row/column
// which looks very very strange.
// Decal mode does just transparent copying, which
// is exactly what the spec wants.
this._tileY = CanvasKit.TileMode.Decal;
break;
case 'repeat-y':
this._tileX = CanvasKit.TileMode.Decal;
this._tileY = CanvasKit.TileMode.Repeat;
break;
case 'repeat':
this._tileX = CanvasKit.TileMode.Repeat;
this._tileY = CanvasKit.TileMode.Repeat;
break;
case 'no-repeat':
this._tileX = CanvasKit.TileMode.Decal;
this._tileY = CanvasKit.TileMode.Decal;
break;
default:
throw 'invalid repetition mode ' + repetition;
}
// Takes a DOMMatrix like object. e.g. the identity would be:
// {a:1, b: 0, c: 0, d: 1, e: 0, f: 0}
// @param {DOMMatrix} m
this.setTransform = function(m) {
var t = [m.a, m.c, m.e,
m.b, m.d, m.f,
0, 0, 1];
if (allAreFinite(t)) {
this._transform = t;
}
}
this._copy = function() {
var cp = new CanvasPattern()
cp._tileX = this._tileX;
cp._tileY = this._tileY;
return cp;
}
this._dispose = function() {
if (this._shader) {
this._shader.delete();
this._shader = null;
}
}
this._getShader = function(currentTransform) {
// Ignore currentTransform since it will be applied later
this._dispose();
this._shader = this._image.makeShader(this._tileX, this._tileY, this._transform);
return this._shader;
}
}