react-canvaskit
Version:
A React implementation of the Skia-CanvasKit drawing library.
37 lines • 5.89 kB
JavaScript
import { isCkCanvas } from './CkCanvas';
import { toSkPaint } from './SkiaElementMapping';
class CkLine {
constructor(canvasKit, props) {
this.canvasKit = canvasKit;
this.props = props;
this.skObjectType = 'Line';
this.type = 'ck-line';
this.deleted = false;
this.defaultPaint = new this.canvasKit.Paint();
this.defaultPaint.setStyle(this.canvasKit.PaintStyle.Fill);
this.defaultPaint.setAntiAlias(true);
}
render(parent) {
var _a, _b, _c;
if (this.deleted) {
throw new Error('BUG. line element deleted.');
}
if (parent && isCkCanvas(parent)) {
// TODO we can be smart and only recreate the paint object if the paint props have changed?
(_a = this.renderPaint) === null || _a === void 0 ? void 0 : _a.delete();
this.renderPaint = toSkPaint(this.canvasKit, this.props.paint);
(_b = parent.skObject) === null || _b === void 0 ? void 0 : _b.drawLine(this.props.x1, this.props.y1, this.props.x2, this.props.y2, (_c = this.renderPaint) !== null && _c !== void 0 ? _c : this.defaultPaint);
}
}
delete() {
var _a;
if (this.deleted) {
return;
}
this.deleted = true;
this.defaultPaint.delete();
(_a = this.renderPaint) === null || _a === void 0 ? void 0 : _a.delete();
}
}
export const createCkLine = (type, props, canvasKit) => new CkLine(canvasKit, props);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2tMaW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL0NrTGluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQ3ZDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQWtCaEQsTUFBTSxNQUFNO0lBUVYsWUFBcUIsU0FBb0IsRUFBVyxLQUF5QztRQUF4RSxjQUFTLEdBQVQsU0FBUyxDQUFXO1FBQVcsVUFBSyxHQUFMLEtBQUssQ0FBb0M7UUFQcEYsaUJBQVksR0FBc0MsTUFBTSxDQUFBO1FBQ3hELFNBQUksR0FBYyxTQUFTLENBQUE7UUFJcEMsWUFBTyxHQUFHLEtBQUssQ0FBQTtRQUdiLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFBO1FBQzlDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQzFELElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ3RDLENBQUM7SUFFRCxNQUFNLENBQUMsTUFBK0I7O1FBQ3BDLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNoQixNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUE7U0FDOUM7UUFDRCxJQUFJLE1BQU0sSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDaEMsMkZBQTJGO1lBQzNGLE1BQUEsSUFBSSxDQUFDLFdBQVcsMENBQUUsTUFBTSxFQUFFLENBQUE7WUFDMUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFBO1lBQzlELE1BQUEsTUFBTSxDQUFDLFFBQVEsMENBQUUsUUFBUSxDQUN2QixJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFDYixJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFDYixJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFDYixJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFDYixNQUFBLElBQUksQ0FBQyxXQUFXLG1DQUFJLElBQUksQ0FBQyxZQUFZLENBQ3RDLENBQUE7U0FDRjtJQUNILENBQUM7SUFFRCxNQUFNOztRQUNKLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNoQixPQUFNO1NBQ1A7UUFDRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQTtRQUNuQixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFBO1FBQzFCLE1BQUEsSUFBSSxDQUFDLFdBQVcsMENBQUUsTUFBTSxFQUFFLENBQUE7SUFDNUIsQ0FBQztDQUNGO0FBRUQsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFnQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENhbnZhc0tpdCwgUGFpbnQgYXMgU2tQYWludCB9IGZyb20gJ2NhbnZhc2tpdC13YXNtJ1xuaW1wb3J0IHsgaXNDa0NhbnZhcyB9IGZyb20gJy4vQ2tDYW52YXMnXG5pbXBvcnQgeyB0b1NrUGFpbnQgfSBmcm9tICcuL1NraWFFbGVtZW50TWFwcGluZydcbmltcG9ydCB7XG4gIENrRWxlbWVudCxcbiAgQ2tFbGVtZW50Q29udGFpbmVyLFxuICBDa0VsZW1lbnRDcmVhdG9yLFxuICBDa0VsZW1lbnRQcm9wcyxcbiAgQ2tPYmplY3RUeXBpbmcsXG4gIFBhaW50LFxufSBmcm9tICcuL1NraWFFbGVtZW50VHlwZXMnXG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2tMaW5lUHJvcHMgZXh0ZW5kcyBDa0VsZW1lbnRQcm9wczxuZXZlcj4ge1xuICB4MTogbnVtYmVyXG4gIHkxOiBudW1iZXJcbiAgeDI6IG51bWJlclxuICB5MjogbnVtYmVyXG4gIHBhaW50PzogUGFpbnRcbn1cblxuY2xhc3MgQ2tMaW5lIGltcGxlbWVudHMgQ2tFbGVtZW50PCdjay1saW5lJz4ge1xuICByZWFkb25seSBza09iamVjdFR5cGU6IENrT2JqZWN0VHlwaW5nWydjay1saW5lJ11bJ25hbWUnXSA9ICdMaW5lJ1xuICByZWFkb25seSB0eXBlOiAnY2stbGluZScgPSAnY2stbGluZSdcblxuICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRQYWludDogU2tQYWludFxuICBwcml2YXRlIHJlbmRlclBhaW50PzogU2tQYWludFxuICBkZWxldGVkID0gZmFsc2VcblxuICBjb25zdHJ1Y3RvcihyZWFkb25seSBjYW52YXNLaXQ6IENhbnZhc0tpdCwgcmVhZG9ubHkgcHJvcHM6IENrT2JqZWN0VHlwaW5nWydjay1saW5lJ11bJ3Byb3BzJ10pIHtcbiAgICB0aGlzLmRlZmF1bHRQYWludCA9IG5ldyB0aGlzLmNhbnZhc0tpdC5QYWludCgpXG4gICAgdGhpcy5kZWZhdWx0UGFpbnQuc2V0U3R5bGUodGhpcy5jYW52YXNLaXQuUGFpbnRTdHlsZS5GaWxsKVxuICAgIHRoaXMuZGVmYXVsdFBhaW50LnNldEFudGlBbGlhcyh0cnVlKVxuICB9XG5cbiAgcmVuZGVyKHBhcmVudDogQ2tFbGVtZW50Q29udGFpbmVyPGFueT4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kZWxldGVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0JVRy4gbGluZSBlbGVtZW50IGRlbGV0ZWQuJylcbiAgICB9XG4gICAgaWYgKHBhcmVudCAmJiBpc0NrQ2FudmFzKHBhcmVudCkpIHtcbiAgICAgIC8vIFRPRE8gd2UgY2FuIGJlIHNtYXJ0IGFuZCBvbmx5IHJlY3JlYXRlIHRoZSBwYWludCBvYmplY3QgaWYgdGhlIHBhaW50IHByb3BzIGhhdmUgY2hhbmdlZD9cbiAgICAgIHRoaXMucmVuZGVyUGFpbnQ/LmRlbGV0ZSgpXG4gICAgICB0aGlzLnJlbmRlclBhaW50ID0gdG9Ta1BhaW50KHRoaXMuY2FudmFzS2l0LCB0aGlzLnByb3BzLnBhaW50KVxuICAgICAgcGFyZW50LnNrT2JqZWN0Py5kcmF3TGluZShcbiAgICAgICAgdGhpcy5wcm9wcy54MSxcbiAgICAgICAgdGhpcy5wcm9wcy55MSxcbiAgICAgICAgdGhpcy5wcm9wcy54MixcbiAgICAgICAgdGhpcy5wcm9wcy55MixcbiAgICAgICAgdGhpcy5yZW5kZXJQYWludCA/PyB0aGlzLmRlZmF1bHRQYWludCxcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICBkZWxldGUoKSB7XG4gICAgaWYgKHRoaXMuZGVsZXRlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHRoaXMuZGVsZXRlZCA9IHRydWVcbiAgICB0aGlzLmRlZmF1bHRQYWludC5kZWxldGUoKVxuICAgIHRoaXMucmVuZGVyUGFpbnQ/LmRlbGV0ZSgpXG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUNrTGluZTogQ2tFbGVtZW50Q3JlYXRvcjwnY2stbGluZSc+ID0gKHR5cGUsIHByb3BzLCBjYW52YXNLaXQpID0+IG5ldyBDa0xpbmUoY2FudmFzS2l0LCBwcm9wcylcbiJdfQ==