UNPKG

react-canvaskit

Version:

A React implementation of the Skia-CanvasKit drawing library.

55 lines 7.94 kB
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==