1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
| 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,
| }
|
|