react-canvaskit
Version:
A React implementation of the Skia-CanvasKit drawing library.
55 lines • 7.94 kB
JavaScript
import { isCkSurface } from './CkSurface';
import { toSkColor } from './SkiaElementMapping';
export class CkCanvas {
constructor(canvasKit, props) {
this.skObjectType = 'SkCanvas';
this.type = 'ck-canvas';
this.children = [];
this.deleted = false;
this.canvasKit = canvasKit;
this.props = props;
}
render(parent) {
var _a;
if (this.deleted) {
throw new Error('BUG. canvas element deleted.');
}
if (parent.skObject && isCkSurface(parent)) {
if (this.skObject === undefined) {
this.skObject = parent.skObject.getCanvas();
}
}
else {
throw new Error('Expected an initialized ck-surface as parent of ck-canvas');
}
this.skObject.save();
this.drawSelf(this.skObject);
this.children.forEach((child) => child.render(this));
this.skObject.restore();
(_a = parent.skObject) === null || _a === void 0 ? void 0 : _a.flush();
}
drawSelf(skCanvas) {
const skColor = toSkColor(this.canvasKit, this.props.clear);
if (skColor) {
skCanvas.clear(skColor);
}
if (this.props.rotate) {
const { degree, px, py } = this.props.rotate;
skCanvas.rotate(degree, px !== null && px !== void 0 ? px : 0, py !== null && py !== void 0 ? py : 0);
}
}
delete() {
if (this.deleted) {
return;
}
this.deleted = true;
// The canvas object is 1-to-1 linked to the parent surface object, so deleting it means we could never recreate it.
// this.skObject?.delete()
this.skObject = undefined;
}
}
export function isCkCanvas(ckElement) {
return ckElement.type === 'ck-canvas';
}
export const createCkCanvas = (type, props, canvasKit) => new CkCanvas(canvasKit, props);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2tDYW52YXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvQ2tDYW52YXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUN6QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFrQmhELE1BQU0sT0FBTyxRQUFRO0lBVW5CLFlBQVksU0FBb0IsRUFBRSxLQUEyQztRQU5wRSxpQkFBWSxHQUF3QyxVQUFVLENBQUE7UUFDOUQsU0FBSSxHQUFnQixXQUFXLENBQUE7UUFDeEMsYUFBUSxHQUFvQixFQUFFLENBQUE7UUFFdEIsWUFBTyxHQUFHLEtBQUssQ0FBQTtRQUdyQixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQTtRQUMxQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQTtJQUNwQixDQUFDO0lBRUQsTUFBTSxDQUFDLE1BQStCOztRQUNwQyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQyxDQUFBO1NBQ2hEO1FBRUQsSUFBSSxNQUFNLENBQUMsUUFBUSxJQUFJLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUMxQyxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFO2dCQUMvQixJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUE7YUFDNUM7U0FDRjthQUFNO1lBQ0wsTUFBTSxJQUFJLEtBQUssQ0FBQywyREFBMkQsQ0FBQyxDQUFBO1NBQzdFO1FBRUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtRQUNwQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUM1QixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBQ3BELElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUE7UUFDdkIsTUFBQSxNQUFNLENBQUMsUUFBUSwwQ0FBRSxLQUFLLEVBQUUsQ0FBQTtJQUMxQixDQUFDO0lBRU8sUUFBUSxDQUFDLFFBQWtCO1FBQ2pDLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDM0QsSUFBSSxPQUFPLEVBQUU7WUFDWCxRQUFRLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFBO1NBQ3hCO1FBRUQsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRTtZQUNyQixNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQTtZQUM1QyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLGFBQUYsRUFBRSxjQUFGLEVBQUUsR0FBSSxDQUFDLEVBQUUsRUFBRSxhQUFGLEVBQUUsY0FBRixFQUFFLEdBQUksQ0FBQyxDQUFDLENBQUE7U0FDMUM7SUFDSCxDQUFDO0lBRUQsTUFBTTtRQUNKLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNoQixPQUFNO1NBQ1A7UUFDRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQTtRQUNuQixvSEFBb0g7UUFDcEgsMEJBQTBCO1FBQzFCLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFBO0lBQzNCLENBQUM7Q0FDRjtBQUVELE1BQU0sVUFBVSxVQUFVLENBQUMsU0FBeUI7SUFDbEQsT0FBTyxTQUFTLENBQUMsSUFBSSxLQUFLLFdBQVcsQ0FBQTtBQUN2QyxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFrQyxDQUMzRCxJQUFJLEVBQ0osS0FBSyxFQUNMLFNBQW9CLEVBQ2EsRUFBRSxDQUFDLElBQUksUUFBUSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ2FudmFzS2l0LCBDYW52YXMgYXMgU2tDYW52YXMgfSBmcm9tICdjYW52YXNraXQtd2FzbSdcbmltcG9ydCB0eXBlIHsgUmVhY3ROb2RlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBpc0NrU3VyZmFjZSB9IGZyb20gJy4vQ2tTdXJmYWNlJ1xuaW1wb3J0IHsgdG9Ta0NvbG9yIH0gZnJvbSAnLi9Ta2lhRWxlbWVudE1hcHBpbmcnXG5pbXBvcnQge1xuICBDa0VsZW1lbnQsXG4gIENrRWxlbWVudENvbnRhaW5lcixcbiAgQ2tFbGVtZW50Q3JlYXRvcixcbiAgQ2tFbGVtZW50UHJvcHMsXG4gIENrT2JqZWN0VHlwaW5nLFxuICBDb2xvcixcbn0gZnJvbSAnLi9Ta2lhRWxlbWVudFR5cGVzJ1xuXG5leHBvcnQgaW50ZXJmYWNlIENrQ2FudmFzUHJvcHMgZXh0ZW5kcyBDa0VsZW1lbnRQcm9wczxTa0NhbnZhcz4ge1xuICBjbGVhcj86IENvbG9yIHwgc3RyaW5nXG4gIHJvdGF0ZT86IHsgZGVncmVlOiBudW1iZXI7IHB4PzogbnVtYmVyOyBweT86IG51bWJlciB9XG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlXG59XG5cbnR5cGUgQ2tDYW52YXNDaGlsZCA9IENrRWxlbWVudDwnY2stc3VyZmFjZSc+IHwgQ2tFbGVtZW50PCdjay10ZXh0Jz5cblxuZXhwb3J0IGNsYXNzIENrQ2FudmFzIGltcGxlbWVudHMgQ2tFbGVtZW50Q29udGFpbmVyPCdjay1jYW52YXMnPiB7XG4gIHJlYWRvbmx5IGNhbnZhc0tpdDogQ2FudmFzS2l0XG4gIHJlYWRvbmx5IHByb3BzOiBDa09iamVjdFR5cGluZ1snY2stY2FudmFzJ11bJ3Byb3BzJ11cbiAgc2tPYmplY3Q/OiBDa09iamVjdFR5cGluZ1snY2stY2FudmFzJ11bJ3R5cGUnXVxuICByZWFkb25seSBza09iamVjdFR5cGU6IENrT2JqZWN0VHlwaW5nWydjay1jYW52YXMnXVsnbmFtZSddID0gJ1NrQ2FudmFzJ1xuICByZWFkb25seSB0eXBlOiAnY2stY2FudmFzJyA9ICdjay1jYW52YXMnXG4gIGNoaWxkcmVuOiBDa0NhbnZhc0NoaWxkW10gPSBbXVxuXG4gIHByaXZhdGUgZGVsZXRlZCA9IGZhbHNlXG5cbiAgY29uc3RydWN0b3IoY2FudmFzS2l0OiBDYW52YXNLaXQsIHByb3BzOiBDa09iamVjdFR5cGluZ1snY2stY2FudmFzJ11bJ3Byb3BzJ10pIHtcbiAgICB0aGlzLmNhbnZhc0tpdCA9IGNhbnZhc0tpdFxuICAgIHRoaXMucHJvcHMgPSBwcm9wc1xuICB9XG5cbiAgcmVuZGVyKHBhcmVudDogQ2tFbGVtZW50Q29udGFpbmVyPGFueT4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kZWxldGVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0JVRy4gY2FudmFzIGVsZW1lbnQgZGVsZXRlZC4nKVxuICAgIH1cblxuICAgIGlmIChwYXJlbnQuc2tPYmplY3QgJiYgaXNDa1N1cmZhY2UocGFyZW50KSkge1xuICAgICAgaWYgKHRoaXMuc2tPYmplY3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLnNrT2JqZWN0ID0gcGFyZW50LnNrT2JqZWN0LmdldENhbnZhcygpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgYW4gaW5pdGlhbGl6ZWQgY2stc3VyZmFjZSBhcyBwYXJlbnQgb2YgY2stY2FudmFzJylcbiAgICB9XG5cbiAgICB0aGlzLnNrT2JqZWN0LnNhdmUoKVxuICAgIHRoaXMuZHJhd1NlbGYodGhpcy5za09iamVjdClcbiAgICB0aGlzLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkKSA9PiBjaGlsZC5yZW5kZXIodGhpcykpXG4gICAgdGhpcy5za09iamVjdC5yZXN0b3JlKClcbiAgICBwYXJlbnQuc2tPYmplY3Q/LmZsdXNoKClcbiAgfVxuXG4gIHByaXZhdGUgZHJhd1NlbGYoc2tDYW52YXM6IFNrQ2FudmFzKSB7XG4gICAgY29uc3Qgc2tDb2xvciA9IHRvU2tDb2xvcih0aGlzLmNhbnZhc0tpdCwgdGhpcy5wcm9wcy5jbGVhcilcbiAgICBpZiAoc2tDb2xvcikge1xuICAgICAgc2tDYW52YXMuY2xlYXIoc2tDb2xvcilcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wcm9wcy5yb3RhdGUpIHtcbiAgICAgIGNvbnN0IHsgZGVncmVlLCBweCwgcHkgfSA9IHRoaXMucHJvcHMucm90YXRlXG4gICAgICBza0NhbnZhcy5yb3RhdGUoZGVncmVlLCBweCA/PyAwLCBweSA/PyAwKVxuICAgIH1cbiAgfVxuXG4gIGRlbGV0ZSgpIHtcbiAgICBpZiAodGhpcy5kZWxldGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdGhpcy5kZWxldGVkID0gdHJ1ZVxuICAgIC8vIFRoZSBjYW52YXMgb2JqZWN0IGlzIDEtdG8tMSBsaW5rZWQgdG8gdGhlIHBhcmVudCBzdXJmYWNlIG9iamVjdCwgc28gZGVsZXRpbmcgaXQgbWVhbnMgd2UgY291bGQgbmV2ZXIgcmVjcmVhdGUgaXQuXG4gICAgLy8gdGhpcy5za09iamVjdD8uZGVsZXRlKClcbiAgICB0aGlzLnNrT2JqZWN0ID0gdW5kZWZpbmVkXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ2tDYW52YXMoY2tFbGVtZW50OiBDa0VsZW1lbnQ8YW55Pik6IGNrRWxlbWVudCBpcyBDa0NhbnZhcyB7XG4gIHJldHVybiBja0VsZW1lbnQudHlwZSA9PT0gJ2NrLWNhbnZhcydcbn1cblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUNrQ2FudmFzOiBDa0VsZW1lbnRDcmVhdG9yPCdjay1jYW52YXMnPiA9IChcbiAgdHlwZSxcbiAgcHJvcHMsXG4gIGNhbnZhc0tpdDogQ2FudmFzS2l0LFxuKTogQ2tFbGVtZW50Q29udGFpbmVyPCdjay1jYW52YXMnPiA9PiBuZXcgQ2tDYW52YXMoY2FudmFzS2l0LCBwcm9wcylcbiJdfQ==