react-canvaskit
Version:
A React implementation of the Skia-CanvasKit drawing library.
40 lines • 7.53 kB
JavaScript
import { isCkCanvas } from './CkCanvas';
import { toSkFont, toSkPaint } from './SkiaElementMapping';
class CkText {
constructor(canvasKit, props) {
this.skObjectType = 'Text';
this.type = 'ck-text';
this.deleted = false;
this.canvasKit = canvasKit;
this.props = props;
this.defaultPaint = new this.canvasKit.Paint();
this.defaultPaint.setStyle(this.canvasKit.PaintStyle.Fill);
this.defaultPaint.setAntiAlias(true);
this.defaultFont = new this.canvasKit.Font(null, 14);
}
render(parent) {
var _a, _b, _c, _d, _e, _f, _g;
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);
// TODO we can be smart and only recreate the font object if the font props have changed.
(_b = this.renderFont) === null || _b === void 0 ? void 0 : _b.delete();
this.renderFont = toSkFont(this.canvasKit, this.props.font);
(_c = parent.skObject) === null || _c === void 0 ? void 0 : _c.drawText(this.props.children, (_d = this.props.x) !== null && _d !== void 0 ? _d : 0, (_e = this.props.y) !== null && _e !== void 0 ? _e : 0, (_f = this.renderPaint) !== null && _f !== void 0 ? _f : this.defaultPaint, (_g = this.renderFont) !== null && _g !== void 0 ? _g : this.defaultFont);
}
}
delete() {
var _a, _b;
if (this.deleted) {
return;
}
this.deleted = true;
this.defaultFont.delete();
this.defaultPaint.delete();
(_a = this.renderPaint) === null || _a === void 0 ? void 0 : _a.delete();
(_b = this.renderFont) === null || _b === void 0 ? void 0 : _b.delete();
}
}
export const createCkText = (type, props, canvasKit) => new CkText(canvasKit, props);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2tUZXh0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL0NrVGV4dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQ3ZDLE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFtQjFELE1BQU0sTUFBTTtJQWFWLFlBQVksU0FBb0IsRUFBRSxLQUF5QztRQVZsRSxpQkFBWSxHQUFzQyxNQUFNLENBQUE7UUFDeEQsU0FBSSxHQUFjLFNBQVMsQ0FBQTtRQU9wQyxZQUFPLEdBQUcsS0FBSyxDQUFBO1FBR2IsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUE7UUFDMUIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUE7UUFFbEIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUE7UUFDOUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDMUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUE7UUFFcEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUN0RCxDQUFDO0lBRUQsTUFBTSxDQUFDLE1BQWdDOztRQUNyQyxJQUFJLE1BQU0sSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDaEMsMkZBQTJGO1lBQzNGLE1BQUEsSUFBSSxDQUFDLFdBQVcsMENBQUUsTUFBTSxFQUFFLENBQUE7WUFDMUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFBO1lBQzlELHlGQUF5RjtZQUN6RixNQUFBLElBQUksQ0FBQyxVQUFVLDBDQUFFLE1BQU0sRUFBRSxDQUFBO1lBQ3pCLElBQUksQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUMzRCxNQUFBLE1BQU0sQ0FBQyxRQUFRLDBDQUFFLFFBQVEsQ0FDdkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQ25CLE1BQUEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLG1DQUFJLENBQUMsRUFDakIsTUFBQSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsbUNBQUksQ0FBQyxFQUNqQixNQUFBLElBQUksQ0FBQyxXQUFXLG1DQUFJLElBQUksQ0FBQyxZQUFZLEVBQ3JDLE1BQUEsSUFBSSxDQUFDLFVBQVUsbUNBQUksSUFBSSxDQUFDLFdBQVcsQ0FDcEMsQ0FBQTtTQUNGO0lBQ0gsQ0FBQztJQUVELE1BQU07O1FBQ0osSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2hCLE9BQU07U0FDUDtRQUNELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFBO1FBQ25CLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUE7UUFDekIsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQTtRQUMxQixNQUFBLElBQUksQ0FBQyxXQUFXLDBDQUFFLE1BQU0sRUFBRSxDQUFBO1FBQzFCLE1BQUEsSUFBSSxDQUFDLFVBQVUsMENBQUUsTUFBTSxFQUFFLENBQUE7SUFDM0IsQ0FBQztDQUNGO0FBRUQsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFnQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENhbnZhc0tpdCwgRm9udCBhcyBTa0ZvbnQsIFBhaW50IGFzIFNrUGFpbnQgfSBmcm9tICdjYW52YXNraXQtd2FzbSdcbmltcG9ydCB7IGlzQ2tDYW52YXMgfSBmcm9tICcuL0NrQ2FudmFzJ1xuaW1wb3J0IHsgdG9Ta0ZvbnQsIHRvU2tQYWludCB9IGZyb20gJy4vU2tpYUVsZW1lbnRNYXBwaW5nJ1xuaW1wb3J0IHtcbiAgQ2tFbGVtZW50LFxuICBDa0VsZW1lbnRDb250YWluZXIsXG4gIENrRWxlbWVudENyZWF0b3IsXG4gIENrRWxlbWVudFByb3BzLFxuICBDa09iamVjdFR5cGluZyxcbiAgRm9udCxcbiAgUGFpbnQsXG59IGZyb20gJy4vU2tpYUVsZW1lbnRUeXBlcydcblxuZXhwb3J0IGludGVyZmFjZSBDa1RleHRQcm9wcyBleHRlbmRzIENrRWxlbWVudFByb3BzPG5ldmVyPiB7XG4gIHg/OiBudW1iZXJcbiAgeT86IG51bWJlclxuICBwYWludD86IFBhaW50XG4gIGZvbnQ/OiBGb250XG4gIGNoaWxkcmVuOiBzdHJpbmdcbn1cblxuY2xhc3MgQ2tUZXh0IGltcGxlbWVudHMgQ2tFbGVtZW50PCdjay10ZXh0Jz4ge1xuICByZWFkb25seSBjYW52YXNLaXQ6IENhbnZhc0tpdFxuICByZWFkb25seSBwcm9wczogQ2tPYmplY3RUeXBpbmdbJ2NrLXRleHQnXVsncHJvcHMnXVxuICByZWFkb25seSBza09iamVjdFR5cGU6IENrT2JqZWN0VHlwaW5nWydjay10ZXh0J11bJ25hbWUnXSA9ICdUZXh0J1xuICByZWFkb25seSB0eXBlOiAnY2stdGV4dCcgPSAnY2stdGV4dCdcblxuICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRQYWludDogU2tQYWludFxuICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRGb250OiBTa0ZvbnRcblxuICBwcml2YXRlIHJlbmRlclBhaW50PzogU2tQYWludFxuICBwcml2YXRlIHJlbmRlckZvbnQ/OiBTa0ZvbnRcbiAgZGVsZXRlZCA9IGZhbHNlXG5cbiAgY29uc3RydWN0b3IoY2FudmFzS2l0OiBDYW52YXNLaXQsIHByb3BzOiBDa09iamVjdFR5cGluZ1snY2stdGV4dCddWydwcm9wcyddKSB7XG4gICAgdGhpcy5jYW52YXNLaXQgPSBjYW52YXNLaXRcbiAgICB0aGlzLnByb3BzID0gcHJvcHNcblxuICAgIHRoaXMuZGVmYXVsdFBhaW50ID0gbmV3IHRoaXMuY2FudmFzS2l0LlBhaW50KClcbiAgICB0aGlzLmRlZmF1bHRQYWludC5zZXRTdHlsZSh0aGlzLmNhbnZhc0tpdC5QYWludFN0eWxlLkZpbGwpXG4gICAgdGhpcy5kZWZhdWx0UGFpbnQuc2V0QW50aUFsaWFzKHRydWUpXG5cbiAgICB0aGlzLmRlZmF1bHRGb250ID0gbmV3IHRoaXMuY2FudmFzS2l0LkZvbnQobnVsbCwgMTQpXG4gIH1cblxuICByZW5kZXIocGFyZW50PzogQ2tFbGVtZW50Q29udGFpbmVyPGFueT4pOiB2b2lkIHtcbiAgICBpZiAocGFyZW50ICYmIGlzQ2tDYW52YXMocGFyZW50KSkge1xuICAgICAgLy8gVE9ETyB3ZSBjYW4gYmUgc21hcnQgYW5kIG9ubHkgcmVjcmVhdGUgdGhlIHBhaW50IG9iamVjdCBpZiB0aGUgcGFpbnQgcHJvcHMgaGF2ZSBjaGFuZ2VkLlxuICAgICAgdGhpcy5yZW5kZXJQYWludD8uZGVsZXRlKClcbiAgICAgIHRoaXMucmVuZGVyUGFpbnQgPSB0b1NrUGFpbnQodGhpcy5jYW52YXNLaXQsIHRoaXMucHJvcHMucGFpbnQpXG4gICAgICAvLyBUT0RPIHdlIGNhbiBiZSBzbWFydCBhbmQgb25seSByZWNyZWF0ZSB0aGUgZm9udCBvYmplY3QgaWYgdGhlIGZvbnQgcHJvcHMgaGF2ZSBjaGFuZ2VkLlxuICAgICAgdGhpcy5yZW5kZXJGb250Py5kZWxldGUoKVxuICAgICAgdGhpcy5yZW5kZXJGb250ID0gdG9Ta0ZvbnQodGhpcy5jYW52YXNLaXQsIHRoaXMucHJvcHMuZm9udClcbiAgICAgIHBhcmVudC5za09iamVjdD8uZHJhd1RleHQoXG4gICAgICAgIHRoaXMucHJvcHMuY2hpbGRyZW4sXG4gICAgICAgIHRoaXMucHJvcHMueCA/PyAwLFxuICAgICAgICB0aGlzLnByb3BzLnkgPz8gMCxcbiAgICAgICAgdGhpcy5yZW5kZXJQYWludCA/PyB0aGlzLmRlZmF1bHRQYWludCxcbiAgICAgICAgdGhpcy5yZW5kZXJGb250ID8/IHRoaXMuZGVmYXVsdEZvbnQsXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgZGVsZXRlKCkge1xuICAgIGlmICh0aGlzLmRlbGV0ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICB0aGlzLmRlbGV0ZWQgPSB0cnVlXG4gICAgdGhpcy5kZWZhdWx0Rm9udC5kZWxldGUoKVxuICAgIHRoaXMuZGVmYXVsdFBhaW50LmRlbGV0ZSgpXG4gICAgdGhpcy5yZW5kZXJQYWludD8uZGVsZXRlKClcbiAgICB0aGlzLnJlbmRlckZvbnQ/LmRlbGV0ZSgpXG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUNrVGV4dDogQ2tFbGVtZW50Q3JlYXRvcjwnY2stdGV4dCc+ID0gKHR5cGUsIHByb3BzLCBjYW52YXNLaXQpID0+IG5ldyBDa1RleHQoY2FudmFzS2l0LCBwcm9wcylcbiJdfQ==