react-canvaskit
Version:
A React implementation of the Skia-CanvasKit drawing library.
79 lines • 14.4 kB
JavaScript
import { FontSlantEnum, FontWeightEnum, FontWidthEnum } from './SkiaElementTypes';
export const toSkTypeFace = (canvasKit, typeFace) => { var _a; return typeFace ? (_a = canvasKit.Typeface.MakeFreeTypeFaceFromData(typeFace.data)) !== null && _a !== void 0 ? _a : undefined : undefined; };
export const toSkFont = (canvasKit, font) => font
? new canvasKit.Font(font.typeFace === undefined ? null : toSkTypeFace(canvasKit, font.typeFace), font.size)
: undefined;
export const toSkColor = (canvasKit, color) => {
var _a;
if (typeof color === 'string') {
// @ts-ignore
return canvasKit.parseColorString(color);
}
else {
return color ? canvasKit.Color(color.red, color.green, color.blue, (_a = color.alpha) !== null && _a !== void 0 ? _a : 1) : undefined;
}
};
export const toSkPaint = (canvasKit, paint) => {
if (paint === undefined) {
return undefined;
}
const skPaint = new canvasKit.Paint();
// TODO blendMode?: BlendMode;
const skColor = toSkColor(canvasKit, paint.color);
if (skColor) {
skPaint.setColor(skColor);
}
// TODO filterQuality?: FilterQuality;
// TODO strokeCap?: StrokeCap;
// TODO strokeJoin?: StrokeJoin;
if (paint.strokeMiter) {
skPaint.setStrokeMiter(paint.strokeMiter);
}
if (paint.strokeWidth) {
skPaint.setStrokeWidth(paint.strokeWidth);
}
if (paint.antiAlias) {
skPaint.setAntiAlias(paint.antiAlias);
}
// TODO colorFilter?: ColorFilter
// TODO imageFilter?: ImageFilter;
// TODO maskFilter?: MaskFilter
// TODO pathEffect?: PathEffect
// TODO shader?: Shader
// TODO style?: PaintStyle
return skPaint;
};
export const toFontStyle = (canvasKit, fontStyle) => {
var _a, _b, _c;
return {
slant: { value: (_a = fontStyle === null || fontStyle === void 0 ? void 0 : fontStyle.slant) !== null && _a !== void 0 ? _a : FontSlantEnum.Upright },
weight: { value: (_b = fontStyle === null || fontStyle === void 0 ? void 0 : fontStyle.weight) !== null && _b !== void 0 ? _b : FontWeightEnum.Normal },
width: { value: (_c = fontStyle === null || fontStyle === void 0 ? void 0 : fontStyle.width) !== null && _c !== void 0 ? _c : FontWidthEnum.Normal },
};
};
export const toSkTextStyle = (canvasKit, textStyle) => {
var _a, _b, _c, _d, _e, _f, _g;
return {
backgroundColor: (_a = toSkColor(canvasKit, textStyle === null || textStyle === void 0 ? void 0 : textStyle.backgroundColor)) !== null && _a !== void 0 ? _a : canvasKit.WHITE,
color: (_b = toSkColor(canvasKit, textStyle === null || textStyle === void 0 ? void 0 : textStyle.color)) !== null && _b !== void 0 ? _b : canvasKit.BLACK,
decoration: (_c = textStyle === null || textStyle === void 0 ? void 0 : textStyle.decoration) !== null && _c !== void 0 ? _c : 0,
decorationThickness: (_d = textStyle === null || textStyle === void 0 ? void 0 : textStyle.decorationThickness) !== null && _d !== void 0 ? _d : 0,
fontFamilies: (_e = textStyle === null || textStyle === void 0 ? void 0 : textStyle.fontFamilies) !== null && _e !== void 0 ? _e : [],
fontSize: (_f = textStyle === null || textStyle === void 0 ? void 0 : textStyle.fontSize) !== null && _f !== void 0 ? _f : 14,
fontStyle: toFontStyle(canvasKit, textStyle === null || textStyle === void 0 ? void 0 : textStyle.fontStyle),
foregroundColor: (_g = toSkColor(canvasKit, textStyle === null || textStyle === void 0 ? void 0 : textStyle.foregroundColor)) !== null && _g !== void 0 ? _g : canvasKit.BLACK,
};
};
export const toSkParagraphStyle = (canvasKit, paragraphStyle) => {
const textAlign = (paragraphStyle === null || paragraphStyle === void 0 ? void 0 : paragraphStyle.textAlign) ? { value: paragraphStyle.textAlign } : undefined;
const textDirection = (paragraphStyle === null || paragraphStyle === void 0 ? void 0 : paragraphStyle.textDirection) ? { value: paragraphStyle.textDirection } : undefined;
return new canvasKit.ParagraphStyle({
disableHinting: paragraphStyle === null || paragraphStyle === void 0 ? void 0 : paragraphStyle.disableHinting,
ellipsis: paragraphStyle === null || paragraphStyle === void 0 ? void 0 : paragraphStyle.ellipsis,
maxLines: paragraphStyle === null || paragraphStyle === void 0 ? void 0 : paragraphStyle.maxLines,
textAlign,
textDirection,
textStyle: toSkTextStyle(canvasKit, paragraphStyle === null || paragraphStyle === void 0 ? void 0 : paragraphStyle.textStyle),
});
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2tpYUVsZW1lbnRNYXBwaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1NraWFFbGVtZW50TWFwcGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFXQSxPQUFPLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQU1qRixNQUFNLENBQUMsTUFBTSxZQUFZLEdBQXlDLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxFQUFFLFdBQ3hGLE9BQUEsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFBLFNBQVMsQ0FBQyxRQUFRLENBQUMsd0JBQXdCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxtQ0FBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQSxFQUFBLENBQUE7QUFDaEcsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFpQyxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUN4RSxJQUFJO0lBQ0YsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQzlHLENBQUMsQ0FBQyxTQUFTLENBQUE7QUFDZixNQUFNLENBQUMsTUFBTSxTQUFTLEdBQTRDLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxFQUFFOztJQUNyRixJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtRQUM3QixhQUFhO1FBQ2IsT0FBZ0IsU0FBUyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFBO0tBQ2xEO1NBQU07UUFDTCxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxLQUFL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b3IgYXMgU2tDb2xvcixcbiAgRm9udCBhcyBTa0ZvbnQsXG4gIEZvbnRTdHlsZSxcbiAgUGFpbnQgYXMgU2tQYWludCxcbiAgUGFyYWdyYXBoU3R5bGUgYXMgU2tQYXJhZ3JhcGhTdHlsZSxcbiAgVGV4dFN0eWxlIGFzIFNrVGV4dFN0eWxlLFxuICBUeXBlZmFjZSBhcyBTa1R5cGVmYWNlLFxufSBmcm9tICdjYW52YXNraXQtd2FzbSdcbmltcG9ydCB0eXBlIHsgQ2tGb250U3R5bGUsIENvbG9yLCBGb250LCBQYWludCwgUGFyYWdyYXBoU3R5bGUsIFRleHRTdHlsZSwgVHlwZUZhY2UgfSBmcm9tICcuL1NraWFFbGVtZW50VHlwZXMnXG5pbXBvcnQgeyBGb250U2xhbnRFbnVtLCBGb250V2VpZ2h0RW51bSwgRm9udFdpZHRoRW51bSB9IGZyb20gJy4vU2tpYUVsZW1lbnRUeXBlcydcblxuZXhwb3J0IGludGVyZmFjZSBQcm9wc0NvbnZlcnRlcjxJTiwgT1VUPiB7XG4gIChjYW52YXNLaXQ6IENhbnZhc0tpdCwgcHJvcEluPzogSU4pOiBPVVQgfCB1bmRlZmluZWRcbn1cblxuZXhwb3J0IGNvbnN0IHRvU2tUeXBlRmFjZTogUHJvcHNDb252ZXJ0ZXI8VHlwZUZhY2UsIFNrVHlwZWZhY2U+ID0gKGNhbnZhc0tpdCwgdHlwZUZhY2UpID0+XG4gIHR5cGVGYWNlID8gY2FudmFzS2l0LlR5cGVmYWNlLk1ha2VGcmVlVHlwZUZhY2VGcm9tRGF0YSh0eXBlRmFjZS5kYXRhKSA/PyB1bmRlZmluZWQgOiB1bmRlZmluZWRcbmV4cG9ydCBjb25zdCB0b1NrRm9udDogUHJvcHNDb252ZXJ0ZXI8Rm9udCwgU2tGb250PiA9IChjYW52YXNLaXQsIGZvbnQpID0+XG4gIGZvbnRcbiAgICA/IG5ldyBjYW52YXNLaXQuRm9udChmb250LnR5cGVGYWNlID09PSB1bmRlZmluZWQgPyBudWxsIDogdG9Ta1R5cGVGYWNlKGNhbnZhc0tpdCwgZm9udC50eXBlRmFjZSkhISwgZm9udC5zaXplKVxuICAgIDogdW5kZWZpbmVkXG5leHBvcnQgY29uc3QgdG9Ta0NvbG9yOiBQcm9wc0NvbnZlcnRlcjxDb2xvciB8IHN0cmluZywgU2tDb2xvcj4gPSAoY2FudmFzS2l0LCBjb2xvcikgPT4ge1xuICBpZiAodHlwZW9mIGNvbG9yID09PSAnc3RyaW5nJykge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICByZXR1cm4gPFNrQ29sb3I+Y2FudmFzS2l0LnBhcnNlQ29sb3JTdHJpbmcoY29sb3IpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGNvbG9yID8gY2FudmFzS2l0LkNvbG9yKGNvbG9yLnJlZCwgY29sb3IuZ3JlZW4sIGNvbG9yLmJsdWUsIGNvbG9yLmFscGhhID8/IDEpIDogdW5kZWZpbmVkXG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IHRvU2tQYWludDogUHJvcHNDb252ZXJ0ZXI8UGFpbnQsIFNrUGFpbnQ+ID0gKGNhbnZhc0tpdCwgcGFpbnQpID0+IHtcbiAgaWYgKHBhaW50ID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cblxuICBjb25zdCBza1BhaW50ID0gbmV3IGNhbnZhc0tpdC5QYWludCgpXG5cbiAgLy8gVE9ETyBibGVuZE1vZGU/OiBCbGVuZE1vZGU7XG5cbiAgY29uc3Qgc2tDb2xvciA9IHRvU2tDb2xvcihjYW52YXNLaXQsIHBhaW50LmNvbG9yKVxuICBpZiAoc2tDb2xvcikge1xuICAgIHNrUGFpbnQuc2V0Q29sb3Ioc2tDb2xvcilcbiAgfVxuXG4gIC8vIFRPRE8gZmlsdGVyUXVhbGl0eT86IEZpbHRlclF1YWxpdHk7XG4gIC8vIFRPRE8gc3Ryb2tlQ2FwPzogU3Ryb2tlQ2FwO1xuICAvLyBUT0RPIHN0cm9rZUpvaW4/OiBTdHJva2VKb2luO1xuXG4gIGlmIChwYWludC5zdHJva2VNaXRlcikge1xuICAgIHNrUGFpbnQuc2V0U3Ryb2tlTWl0ZXIocGFpbnQuc3Ryb2tlTWl0ZXIpXG4gIH1cbiAgaWYgKHBhaW50LnN0cm9rZVdpZHRoKSB7XG4gICAgc2tQYWludC5zZXRTdHJva2VXaWR0aChwYWludC5zdHJva2VXaWR0aClcbiAgfVxuICBpZiAocGFpbnQuYW50aUFsaWFzKSB7XG4gICAgc2tQYWludC5zZXRBbnRpQWxpYXMocGFpbnQuYW50aUFsaWFzKVxuICB9XG4gIC8vIFRPRE8gY29sb3JGaWx0ZXI/OiBDb2xvckZpbHRlclxuICAvLyBUT0RPIGltYWdlRmlsdGVyPzogSW1hZ2VGaWx0ZXI7XG4gIC8vIFRPRE8gbWFza0ZpbHRlcj86IE1hc2tGaWx0ZXJcbiAgLy8gVE9ETyBwYXRoRWZmZWN0PzogUGF0aEVmZmVjdFxuICAvLyBUT0RPIHNoYWRlcj86IFNoYWRlclxuICAvLyBUT0RPIHN0eWxlPzogUGFpbnRTdHlsZVxuXG4gIHJldHVybiBza1BhaW50XG59XG5cbmV4cG9ydCBjb25zdCB0b0ZvbnRTdHlsZTogUHJvcHNDb252ZXJ0ZXI8Q2tGb250U3R5bGUsIEZvbnRTdHlsZT4gPSAoY2FudmFzS2l0LCBmb250U3R5bGUpOiBGb250U3R5bGUgPT4ge1xuICByZXR1cm4ge1xuICAgIHNsYW50OiB7IHZhbHVlOiBmb250U3R5bGU/LnNsYW50ID8/IEZvbnRTbGFudEVudW0uVXByaWdodCB9LFxuICAgIHdlaWdodDogeyB2YWx1ZTogZm9udFN0eWxlPy53ZWlnaHQgPz8gRm9udFdlaWdodEVudW0uTm9ybWFsIH0sXG4gICAgd2lkdGg6IHsgdmFsdWU6IGZvbnRTdHlsZT8ud2lkdGggPz8gRm9udFdpZHRoRW51bS5Ob3JtYWwgfSxcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgdG9Ta1RleHRTdHlsZTogUHJvcHNDb252ZXJ0ZXI8VGV4dFN0eWxlLCBTa1RleHRTdHlsZT4gPSAoY2FudmFzS2l0LCB0ZXh0U3R5bGUpID0+IHtcbiAgcmV0dXJuIHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHRvU2tDb2xvcihjYW52YXNLaXQsIHRleHRTdHlsZT8uYmFja2dyb3VuZENvbG9yKSA/PyBjYW52YXNLaXQuV0hJVEUsXG4gICAgY29sb3I6IHRvU2tDb2xvcihjYW52YXNLaXQsIHRleHRTdHlsZT8uY29sb3IpID8/IGNhbnZhc0tpdC5CTEFDSyxcbiAgICBkZWNvcmF0aW9uOiB0ZXh0U3R5bGU/LmRlY29yYXRpb24gPz8gMCxcbiAgICBkZWNvcmF0aW9uVGhpY2tuZXNzOiB0ZXh0U3R5bGU/LmRlY29yYXRpb25UaGlja25lc3MgPz8gMCxcbiAgICBmb250RmFtaWxpZXM6IHRleHRTdHlsZT8uZm9udEZhbWlsaWVzID8/IFtdLFxuICAgIGZvbnRTaXplOiB0ZXh0U3R5bGU/LmZvbnRTaXplID8/IDE0LFxuICAgIGZvbnRTdHlsZTogPEZvbnRTdHlsZT50b0ZvbnRTdHlsZShjYW52YXNLaXQsIHRleHRTdHlsZT8uZm9udFN0eWxlKSxcbiAgICBmb3JlZ3JvdW5kQ29sb3I6IHRvU2tDb2xvcihjYW52YXNLaXQsIHRleHRTdHlsZT8uZm9yZWdyb3VuZENvbG9yKSA/PyBjYW52YXNLaXQuQkxBQ0ssXG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IHRvU2tQYXJhZ3JhcGhTdHlsZTogUHJvcHNDb252ZXJ0ZXI8UGFyYWdyYXBoU3R5bGUsIFNrUGFyYWdyYXBoU3R5bGU+ID0gKGNhbnZhc0tpdCwgcGFyYWdyYXBoU3R5bGUpID0+IHtcbiAgY29uc3QgdGV4dEFsaWduID0gcGFyYWdyYXBoU3R5bGU/LnRleHRBbGlnbiA/IHsgdmFsdWU6IHBhcmFncmFwaFN0eWxlLnRleHRBbGlnbiB9IDogdW5kZWZpbmVkXG4gIGNvbnN0IHRleHREaXJlY3Rpb24gPSBwYXJhZ3JhcGhTdHlsZT8udGV4dERpcmVjdGlvbiA/IHsgdmFsdWU6IHBhcmFncmFwaFN0eWxlLnRleHREaXJlY3Rpb24gfSA6IHVuZGVmaW5lZFxuXG4gIHJldHVybiBuZXcgY2FudmFzS2l0LlBhcmFncmFwaFN0eWxlKHtcbiAgICBkaXNhYmxlSGludGluZzogcGFyYWdyYXBoU3R5bGU/LmRpc2FibGVIaW50aW5nLFxuICAgIGVsbGlwc2lzOiBwYXJhZ3JhcGhTdHlsZT8uZWxsaXBzaXMsXG4gICAgbWF4TGluZXM6IHBhcmFncmFwaFN0eWxlPy5tYXhMaW5lcyxcbiAgICB0ZXh0QWxpZ24sXG4gICAgdGV4dERpcmVjdGlvbixcbiAgICB0ZXh0U3R5bGU6IDxTa1RleHRTdHlsZT50b1NrVGV4dFN0eWxlKGNhbnZhc0tpdCwgcGFyYWdyYXBoU3R5bGU/LnRleHRTdHlsZSksXG4gIH0pXG59XG4iXX0=