54c1b3dd43
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>
82 lines
2.1 KiB
JavaScript
82 lines
2.1 KiB
JavaScript
CanvasKit.MakeCanvas = function(width, height) {
|
|
var surf = CanvasKit.MakeSurface(width, height);
|
|
if (surf) {
|
|
return new HTMLCanvas(surf);
|
|
}
|
|
return null;
|
|
}
|
|
|
|
function HTMLCanvas(skSurface) {
|
|
this._surface = skSurface;
|
|
this._context = new CanvasRenderingContext2D(skSurface.getCanvas());
|
|
this._toCleanup = [];
|
|
this._fontmgr = CanvasKit.FontMgr.RefDefault();
|
|
|
|
// Data is either an ArrayBuffer, a TypedArray, or a Node Buffer
|
|
this.decodeImage = function(data) {
|
|
var img = CanvasKit.MakeImageFromEncoded(data);
|
|
if (!img) {
|
|
throw 'Invalid input';
|
|
}
|
|
this._toCleanup.push(img);
|
|
return img;
|
|
}
|
|
|
|
this.loadFont = function(buffer, descriptors) {
|
|
var newFont = this._fontmgr.MakeTypefaceFromData(buffer);
|
|
if (!newFont) {
|
|
Debug('font could not be processed', descriptors);
|
|
return null;
|
|
}
|
|
this._toCleanup.push(newFont);
|
|
addToFontCache(newFont, descriptors);
|
|
}
|
|
|
|
this.makePath2D = function(path) {
|
|
var p2d = new Path2D(path);
|
|
this._toCleanup.push(p2d._getPath());
|
|
return p2d;
|
|
}
|
|
|
|
// A normal <canvas> requires that clients call getContext
|
|
this.getContext = function(type) {
|
|
if (type === '2d') {
|
|
return this._context;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
this.toDataURL = function(codec, quality) {
|
|
// TODO(kjlubick): maybe support other codecs (webp?)
|
|
// For now, just to png and jpeg
|
|
this._surface.flush();
|
|
|
|
var img = this._surface.makeImageSnapshot();
|
|
if (!img) {
|
|
Debug('no snapshot');
|
|
return;
|
|
}
|
|
var codec = codec || 'image/png';
|
|
var format = CanvasKit.ImageFormat.PNG;
|
|
if (codec === 'image/jpeg') {
|
|
format = CanvasKit.ImageFormat.JPEG;
|
|
}
|
|
var quality = quality || 0.92;
|
|
var skimg = img.encodeToData(format, quality);
|
|
if (!skimg) {
|
|
Debug('encoding failure');
|
|
return
|
|
}
|
|
var imgBytes = CanvasKit.getDataBytes(skimg);
|
|
return 'data:' + codec + ';base64,' + toBase64String(imgBytes);
|
|
}
|
|
|
|
this.dispose = function() {
|
|
this._context._dispose();
|
|
this._toCleanup.forEach(function(i) {
|
|
i.delete();
|
|
});
|
|
this._surface.dispose();
|
|
}
|
|
}
|