react-canvaskit
Version:
A React implementation of the Skia-CanvasKit drawing library.
38 lines • 6.56 kB
JavaScript
import { isCkCanvas } from './CkCanvas';
import { toSkParagraphStyle } from './SkiaElementMapping';
class CkParagraph {
constructor(canvasKit, props) {
this.skObjectType = 'SkParagraph';
this.type = 'ck-paragraph';
this.deleted = false;
this.canvasKit = canvasKit;
this.props = props;
}
render(parent) {
var _a, _b, _c, _d;
if (this.deleted) {
throw new Error('BUG. paragraph element deleted.');
}
const skParagraphBuilder = this.canvasKit.ParagraphBuilder.Make(toSkParagraphStyle(this.canvasKit, this.props), this.props.fontManager);
if (this.props.children) {
skParagraphBuilder.addText(this.props.children);
}
(_a = this.skObject) === null || _a === void 0 ? void 0 : _a.delete();
this.skObject = skParagraphBuilder.build();
this.skObject.layout(this.props.layout);
if (isCkCanvas(parent)) {
(_b = parent.skObject) === null || _b === void 0 ? void 0 : _b.drawParagraph(this.skObject, (_c = this.props.x) !== null && _c !== void 0 ? _c : 0, (_d = this.props.y) !== null && _d !== void 0 ? _d : 0);
}
// TODO we can avoid deleting & recreating the paragraph skobject by checkin props that require a new paragraph instance.
}
delete() {
var _a;
if (this.deleted) {
return;
}
this.deleted = true;
(_a = this.skObject) === null || _a === void 0 ? void 0 : _a.delete();
}
}
export const createCkParagraph = (type, props, canvasKit) => new CkParagraph(canvasKit, props);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2tQYXJhZ3JhcGguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvQ2tQYXJhZ3JhcGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBTUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUN2QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQWtCekQsTUFBTSxXQUFXO0lBU2YsWUFBWSxTQUFvQixFQUFFLEtBQThDO1FBTHZFLGlCQUFZLEdBQTJDLGFBQWEsQ0FBQTtRQUNwRSxTQUFJLEdBQW1CLGNBQWMsQ0FBQTtRQUU5QyxZQUFPLEdBQUcsS0FBSyxDQUFBO1FBR2IsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUE7UUFDMUIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUE7SUFDcEIsQ0FBQztJQUVELE1BQU0sQ0FBQyxNQUErQjs7UUFDcEMsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2hCLE1BQU0sSUFBSSxLQUFLLENBQUMsaUNBQWlDLENBQUMsQ0FBQTtTQUNuRDtRQUVELE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQzNDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUNoRSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FDdkIsQ0FBQTtRQUNELElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUU7WUFDdkIsa0JBQWtCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUE7U0FDaEQ7UUFDRCxNQUFBLElBQUksQ0FBQyxRQUFRLDBDQUFFLE1BQU0sRUFBRSxDQUFBO1FBQ3ZCLElBQUksQ0FBQyxRQUFRLEdBQUcsa0JBQWtCLENBQUMsS0FBSyxFQUFFLENBQUE7UUFDMUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUN2QyxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUN0QixNQUFBLE1BQU0sQ0FBQyxRQUFRLDBDQUFFLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQUEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLG1DQUFJLENBQUMsRUFBRSxNQUFBLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxtQ0FBSSxDQUFDLENBQUMsQ0FBQTtTQUNwRjtRQUNELHlIQUF5SDtJQUMzSCxDQUFDO0lBRUQsTUFBTTs7UUFDSixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDaEIsT0FBTTtTQUNQO1FBQ0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUE7UUFDbkIsTUFBQSxJQUFJLENBQUMsUUFBUSwwQ0FBRSxNQUFNLEVBQUUsQ0FBQTtJQUN6QixDQUFDO0NBQ0Y7QUFFRCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBcUMsQ0FDakUsSUFBSSxFQUNKLEtBQUssRUFDTCxTQUFTLEVBQ2tCLEVBQUUsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG4gIENhbnZhc0tpdCxcbiAgRm9udE1nciBhcyBTa0ZvbnRNYW5hZ2VyLFxuICBQYXJhZ3JhcGggYXMgU2tQYXJhZ3JhcGgsXG4gIFBhcmFncmFwaFN0eWxlIGFzIFNrUGFyYWdyYXBoU3R5bGUsXG59IGZyb20gJ2NhbnZhc2tpdC13YXNtJ1xuaW1wb3J0IHsgaXNDa0NhbnZhcyB9IGZyb20gJy4vQ2tDYW52YXMnXG5pbXBvcnQgeyB0b1NrUGFyYWdyYXBoU3R5bGUgfSBmcm9tICcuL1NraWFFbGVtZW50TWFwcGluZydcbmltcG9ydCB7XG4gIENrRWxlbWVudCxcbiAgQ2tFbGVtZW50Q29udGFpbmVyLFxuICBDa0VsZW1lbnRDcmVhdG9yLFxuICBDa0VsZW1lbnRQcm9wcyxcbiAgQ2tPYmplY3RUeXBpbmcsXG4gIFBhcmFncmFwaFN0eWxlLFxufSBmcm9tICcuL1NraWFFbGVtZW50VHlwZXMnXG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2tQYXJhZ3JhcGhQcm9wcyBleHRlbmRzIFBhcmFncmFwaFN0eWxlLCBDa0VsZW1lbnRQcm9wczxTa1BhcmFncmFwaD4ge1xuICBsYXlvdXQ6IG51bWJlclxuICBmb250TWFuYWdlcjogU2tGb250TWFuYWdlclxuICB4PzogbnVtYmVyXG4gIHk/OiBudW1iZXJcbiAgY2hpbGRyZW4/OiBzdHJpbmdcbn1cblxuY2xhc3MgQ2tQYXJhZ3JhcGggaW1wbGVtZW50cyBDa0VsZW1lbnQ8J2NrLXBhcmFncmFwaCc+IHtcbiAgcmVhZG9ubHkgY2FudmFzS2l0OiBDYW52YXNLaXRcbiAgcmVhZG9ubHkgcHJvcHM6IENrT2JqZWN0VHlwaW5nWydjay1wYXJhZ3JhcGgnXVsncHJvcHMnXVxuICBza09iamVjdD86IENrT2JqZWN0VHlwaW5nWydjay1wYXJhZ3JhcGgnXVsndHlwZSddXG4gIHJlYWRvbmx5IHNrT2JqZWN0VHlwZTogQ2tPYmplY3RUeXBpbmdbJ2NrLXBhcmFncmFwaCddWyduYW1lJ10gPSAnU2tQYXJhZ3JhcGgnXG4gIHJlYWRvbmx5IHR5cGU6ICdjay1wYXJhZ3JhcGgnID0gJ2NrLXBhcmFncmFwaCdcblxuICBkZWxldGVkID0gZmFsc2VcblxuICBjb25zdHJ1Y3RvcihjYW52YXNLaXQ6IENhbnZhc0tpdCwgcHJvcHM6IENrT2JqZWN0VHlwaW5nWydjay1wYXJhZ3JhcGgnXVsncHJvcHMnXSkge1xuICAgIHRoaXMuY2FudmFzS2l0ID0gY2FudmFzS2l0XG4gICAgdGhpcy5wcm9wcyA9IHByb3BzXG4gIH1cblxuICByZW5kZXIocGFyZW50OiBDa0VsZW1lbnRDb250YWluZXI8YW55Pik6IHZvaWQge1xuICAgIGlmICh0aGlzLmRlbGV0ZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQlVHLiBwYXJhZ3JhcGggZWxlbWVudCBkZWxldGVkLicpXG4gICAgfVxuXG4gICAgY29uc3Qgc2tQYXJhZ3JhcGhCdWlsZGVyID0gdGhpcy5jYW52YXNLaXQuUGFyYWdyYXBoQnVpbGRlci5NYWtlKFxuICAgICAgPFNrUGFyYWdyYXBoU3R5bGU+dG9Ta1BhcmFncmFwaFN0eWxlKHRoaXMuY2FudmFzS2l0LCB0aGlzLnByb3BzKSxcbiAgICAgIHRoaXMucHJvcHMuZm9udE1hbmFnZXIsXG4gICAgKVxuICAgIGlmICh0aGlzLnByb3BzLmNoaWxkcmVuKSB7XG4gICAgICBza1BhcmFncmFwaEJ1aWxkZXIuYWRkVGV4dCh0aGlzLnByb3BzLmNoaWxkcmVuKVxuICAgIH1cbiAgICB0aGlzLnNrT2JqZWN0Py5kZWxldGUoKVxuICAgIHRoaXMuc2tPYmplY3QgPSBza1BhcmFncmFwaEJ1aWxkZXIuYnVpbGQoKVxuICAgIHRoaXMuc2tPYmplY3QubGF5b3V0KHRoaXMucHJvcHMubGF5b3V0KVxuICAgIGlmIChpc0NrQ2FudmFzKHBhcmVudCkpIHtcbiAgICAgIHBhcmVudC5za09iamVjdD8uZHJhd1BhcmFncmFwaCh0aGlzLnNrT2JqZWN0LCB0aGlzLnByb3BzLnggPz8gMCwgdGhpcy5wcm9wcy55ID8/IDApXG4gICAgfVxuICAgIC8vIFRPRE8gd2UgY2FuIGF2b2lkIGRlbGV0aW5nICYgcmVjcmVhdGluZyB0aGUgcGFyYWdyYXBoIHNrb2JqZWN0IGJ5IGNoZWNraW4gcHJvcHMgdGhhdCByZXF1aXJlIGEgbmV3IHBhcmFncmFwaCBpbnN0YW5jZS5cbiAgfVxuXG4gIGRlbGV0ZSgpIHtcbiAgICBpZiAodGhpcy5kZWxldGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdGhpcy5kZWxldGVkID0gdHJ1ZVxuICAgIHRoaXMuc2tPYmplY3Q/LmRlbGV0ZSgpXG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUNrUGFyYWdyYXBoOiBDa0VsZW1lbnRDcmVhdG9yPCdjay1wYXJhZ3JhcGgnPiA9IChcbiAgdHlwZSxcbiAgcHJvcHMsXG4gIGNhbnZhc0tpdCxcbik6IENrRWxlbWVudDwnY2stcGFyYWdyYXBoJz4gPT4gbmV3IENrUGFyYWdyYXBoKGNhbnZhc0tpdCwgcHJvcHMpXG4iXX0=