UNPKG

@napi-rs/canvas

Version:

Canvas for Node.js with skia backend

115 lines (101 loc) 2.69 kB
const { platform, homedir } = require('os') const { join } = require('path') const { clearAllCache, CanvasRenderingContext2D, CanvasElement, SVGCanvas, Path: Path2D, ImageData, Image, FontKey, GlobalFonts, PathOp, FillType, StrokeJoin, StrokeCap, convertSVGTextToPath, } = require('./js-binding') const { DOMPoint, DOMMatrix, DOMRect } = require('./geometry') const loadImage = require('./load-image') const SvgExportFlag = { ConvertTextToPaths: 0x01, NoPrettyXML: 0x02, RelativePathEncoding: 0x04, } if (!('families' in GlobalFonts)) { Object.defineProperty(GlobalFonts, 'families', { get: function () { return JSON.parse(GlobalFonts.getFamilies().toString()) }, }) } if (!('has' in GlobalFonts)) { Object.defineProperty(GlobalFonts, 'has', { value: function has(name) { return !!JSON.parse(GlobalFonts.getFamilies().toString()).find(({ family }) => family === name) }, configurable: false, enumerable: false, writable: false, }) } const _getTransform = CanvasRenderingContext2D.prototype.getTransform CanvasRenderingContext2D.prototype.getTransform = function getTransform() { const transform = _getTransform.apply(this, arguments) // monkey patched, skip if (transform instanceof DOMMatrix) { return transform } const { a, b, c, d, e, f } = transform return new DOMMatrix([a, b, c, d, e, f]) } function createCanvas(width, height, flag) { const isSvgBackend = typeof flag !== 'undefined' return isSvgBackend ? new SVGCanvas(width, height, flag) : new CanvasElement(width, height) } class Canvas { constructor(width, height, flag) { return createCanvas(width, height, flag) } static [Symbol.hasInstance](instance) { return instance instanceof CanvasElement || instance instanceof SVGCanvas } } if (!process.env.DISABLE_SYSTEM_FONTS_LOAD) { GlobalFonts.loadSystemFonts() const platformName = platform() const homedirPath = homedir() switch (platformName) { case 'win32': GlobalFonts.loadFontsFromDir(join(homedirPath, 'AppData', 'Local', 'Microsoft', 'Windows', 'Fonts')) break case 'darwin': GlobalFonts.loadFontsFromDir(join(homedirPath, 'Library', 'Fonts')) break case 'linux': GlobalFonts.loadFontsFromDir(join('usr', 'local', 'share', 'fonts')) GlobalFonts.loadFontsFromDir(join(homedirPath, '.fonts')) break } } module.exports = { clearAllCache, Canvas, createCanvas, Path2D, ImageData, Image, PathOp, FillType, StrokeCap, StrokeJoin, SvgExportFlag, GlobalFonts: GlobalFonts, convertSVGTextToPath, DOMPoint, DOMMatrix, DOMRect, loadImage, FontKey, }