@shqld/canvas 2.11.2-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Readme.md +600 -0
- package/binding.gyp +230 -0
- package/browser.js +35 -0
- package/index.js +94 -0
- package/lib/DOMMatrix.js +620 -0
- package/lib/bindings.js +80 -0
- package/lib/canvas.js +113 -0
- package/lib/context2d.js +14 -0
- package/lib/image.js +96 -0
- package/lib/jpegstream.js +41 -0
- package/lib/parse-font.js +101 -0
- package/lib/pattern.js +17 -0
- package/lib/pdfstream.js +35 -0
- package/lib/pngstream.js +42 -0
- package/package.json +71 -0
- package/scripts/install.js +24 -0
- package/src/Backends.cc +18 -0
- package/src/Backends.h +10 -0
- package/src/Canvas.cc +965 -0
- package/src/Canvas.h +96 -0
- package/src/CanvasError.h +23 -0
- package/src/CanvasGradient.cc +123 -0
- package/src/CanvasGradient.h +22 -0
- package/src/CanvasPattern.cc +136 -0
- package/src/CanvasPattern.h +37 -0
- package/src/CanvasRenderingContext2d.cc +3360 -0
- package/src/CanvasRenderingContext2d.h +225 -0
- package/src/Image.cc +1434 -0
- package/src/Image.h +127 -0
- package/src/ImageData.cc +146 -0
- package/src/ImageData.h +27 -0
- package/src/JPEGStream.h +167 -0
- package/src/PNG.h +292 -0
- package/src/Point.h +11 -0
- package/src/Util.h +9 -0
- package/src/backend/Backend.cc +112 -0
- package/src/backend/Backend.h +69 -0
- package/src/backend/ImageBackend.cc +74 -0
- package/src/backend/ImageBackend.h +26 -0
- package/src/backend/PdfBackend.cc +53 -0
- package/src/backend/PdfBackend.h +24 -0
- package/src/backend/SvgBackend.cc +61 -0
- package/src/backend/SvgBackend.h +24 -0
- package/src/bmp/BMPParser.cc +457 -0
- package/src/bmp/BMPParser.h +60 -0
- package/src/bmp/LICENSE.md +24 -0
- package/src/closure.cc +26 -0
- package/src/closure.h +81 -0
- package/src/color.cc +779 -0
- package/src/color.h +30 -0
- package/src/dll_visibility.h +20 -0
- package/src/init.cc +94 -0
- package/src/register_font.cc +408 -0
- package/src/register_font.h +7 -0
- package/types/index.d.ts +484 -0
- package/util/has_lib.js +119 -0
- package/util/win_jpeg_lookup.js +21 -0
package/binding.gyp
ADDED
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
{
|
|
2
|
+
'conditions': [
|
|
3
|
+
['OS=="win"', {
|
|
4
|
+
'variables': {
|
|
5
|
+
'GTK_Root%': 'C:/GTK', # Set the location of GTK all-in-one bundle
|
|
6
|
+
'with_jpeg%': 'false',
|
|
7
|
+
'with_gif%': 'false',
|
|
8
|
+
'with_rsvg%': 'false',
|
|
9
|
+
'variables': { # Nest jpeg_root to evaluate it before with_jpeg
|
|
10
|
+
'jpeg_root%': '<!(node ./util/win_jpeg_lookup)'
|
|
11
|
+
},
|
|
12
|
+
'jpeg_root%': '<(jpeg_root)', # Take value of nested variable
|
|
13
|
+
'conditions': [
|
|
14
|
+
['jpeg_root==""', {
|
|
15
|
+
'with_jpeg%': 'false'
|
|
16
|
+
}, {
|
|
17
|
+
'with_jpeg%': 'true'
|
|
18
|
+
}]
|
|
19
|
+
]
|
|
20
|
+
}
|
|
21
|
+
}, { # 'OS!="win"'
|
|
22
|
+
'variables': {
|
|
23
|
+
'with_jpeg%': '<!(node ./util/has_lib.js jpeg)',
|
|
24
|
+
'with_gif%': '<!(node ./util/has_lib.js gif)',
|
|
25
|
+
'with_rsvg%': '<!(node ./util/has_lib.js rsvg)'
|
|
26
|
+
}
|
|
27
|
+
}]
|
|
28
|
+
],
|
|
29
|
+
'targets': [
|
|
30
|
+
{
|
|
31
|
+
'target_name': 'canvas-postbuild',
|
|
32
|
+
'dependencies': ['canvas'],
|
|
33
|
+
'conditions': [
|
|
34
|
+
['OS=="win"', {
|
|
35
|
+
'copies': [{
|
|
36
|
+
'destination': '<(PRODUCT_DIR)',
|
|
37
|
+
'files': [
|
|
38
|
+
'<(GTK_Root)/bin/zlib1.dll',
|
|
39
|
+
'<(GTK_Root)/bin/libintl-8.dll',
|
|
40
|
+
'<(GTK_Root)/bin/libpng14-14.dll',
|
|
41
|
+
'<(GTK_Root)/bin/libpangocairo-1.0-0.dll',
|
|
42
|
+
'<(GTK_Root)/bin/libpango-1.0-0.dll',
|
|
43
|
+
'<(GTK_Root)/bin/libpangoft2-1.0-0.dll',
|
|
44
|
+
'<(GTK_Root)/bin/libpangowin32-1.0-0.dll',
|
|
45
|
+
'<(GTK_Root)/bin/libcairo-2.dll',
|
|
46
|
+
'<(GTK_Root)/bin/libfontconfig-1.dll',
|
|
47
|
+
'<(GTK_Root)/bin/libfreetype-6.dll',
|
|
48
|
+
'<(GTK_Root)/bin/libglib-2.0-0.dll',
|
|
49
|
+
'<(GTK_Root)/bin/libgobject-2.0-0.dll',
|
|
50
|
+
'<(GTK_Root)/bin/libgmodule-2.0-0.dll',
|
|
51
|
+
'<(GTK_Root)/bin/libgthread-2.0-0.dll',
|
|
52
|
+
'<(GTK_Root)/bin/libexpat-1.dll'
|
|
53
|
+
]
|
|
54
|
+
}]
|
|
55
|
+
}]
|
|
56
|
+
]
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
'target_name': 'canvas',
|
|
60
|
+
'include_dirs': ["<!(node -e \"require('nan')\")"],
|
|
61
|
+
'sources': [
|
|
62
|
+
'src/backend/Backend.cc',
|
|
63
|
+
'src/backend/ImageBackend.cc',
|
|
64
|
+
'src/backend/PdfBackend.cc',
|
|
65
|
+
'src/backend/SvgBackend.cc',
|
|
66
|
+
'src/bmp/BMPParser.cc',
|
|
67
|
+
'src/Backends.cc',
|
|
68
|
+
'src/Canvas.cc',
|
|
69
|
+
'src/CanvasGradient.cc',
|
|
70
|
+
'src/CanvasPattern.cc',
|
|
71
|
+
'src/CanvasRenderingContext2d.cc',
|
|
72
|
+
'src/closure.cc',
|
|
73
|
+
'src/color.cc',
|
|
74
|
+
'src/Image.cc',
|
|
75
|
+
'src/ImageData.cc',
|
|
76
|
+
'src/init.cc',
|
|
77
|
+
'src/register_font.cc'
|
|
78
|
+
],
|
|
79
|
+
'conditions': [
|
|
80
|
+
['OS=="win"', {
|
|
81
|
+
'libraries': [
|
|
82
|
+
'-l<(GTK_Root)/lib/cairo.lib',
|
|
83
|
+
'-l<(GTK_Root)/lib/libpng.lib',
|
|
84
|
+
'-l<(GTK_Root)/lib/pangocairo-1.0.lib',
|
|
85
|
+
'-l<(GTK_Root)/lib/pango-1.0.lib',
|
|
86
|
+
'-l<(GTK_Root)/lib/freetype.lib',
|
|
87
|
+
'-l<(GTK_Root)/lib/glib-2.0.lib',
|
|
88
|
+
'-l<(GTK_Root)/lib/gobject-2.0.lib'
|
|
89
|
+
],
|
|
90
|
+
'include_dirs': [
|
|
91
|
+
'<(GTK_Root)/include',
|
|
92
|
+
'<(GTK_Root)/include/cairo',
|
|
93
|
+
'<(GTK_Root)/include/pango-1.0',
|
|
94
|
+
'<(GTK_Root)/include/glib-2.0',
|
|
95
|
+
'<(GTK_Root)/include/freetype2',
|
|
96
|
+
'<(GTK_Root)/lib/glib-2.0/include'
|
|
97
|
+
],
|
|
98
|
+
'defines': [
|
|
99
|
+
'_USE_MATH_DEFINES', # for M_PI
|
|
100
|
+
'NOMINMAX' # allow std::min/max to work
|
|
101
|
+
],
|
|
102
|
+
'configurations': {
|
|
103
|
+
'Debug': {
|
|
104
|
+
'msvs_settings': {
|
|
105
|
+
'VCCLCompilerTool': {
|
|
106
|
+
'WarningLevel': 4,
|
|
107
|
+
'ExceptionHandling': 1,
|
|
108
|
+
'DisableSpecificWarnings': [
|
|
109
|
+
4100, 4611
|
|
110
|
+
]
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
},
|
|
114
|
+
'Release': {
|
|
115
|
+
'msvs_settings': {
|
|
116
|
+
'VCCLCompilerTool': {
|
|
117
|
+
'WarningLevel': 4,
|
|
118
|
+
'ExceptionHandling': 1,
|
|
119
|
+
'DisableSpecificWarnings': [
|
|
120
|
+
4100, 4611
|
|
121
|
+
]
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}, { # 'OS!="win"'
|
|
127
|
+
'libraries': [
|
|
128
|
+
'<!@(pkg-config pixman-1 --libs)',
|
|
129
|
+
'<!@(pkg-config cairo --libs)',
|
|
130
|
+
'<!@(pkg-config libpng --libs)',
|
|
131
|
+
'<!@(pkg-config pangocairo --libs)',
|
|
132
|
+
'<!@(pkg-config freetype2 --libs)'
|
|
133
|
+
],
|
|
134
|
+
'include_dirs': [
|
|
135
|
+
'<!@(pkg-config cairo --cflags-only-I | sed s/-I//g)',
|
|
136
|
+
'<!@(pkg-config libpng --cflags-only-I | sed s/-I//g)',
|
|
137
|
+
'<!@(pkg-config pangocairo --cflags-only-I | sed s/-I//g)',
|
|
138
|
+
'<!@(pkg-config freetype2 --cflags-only-I | sed s/-I//g)'
|
|
139
|
+
],
|
|
140
|
+
'cflags': ['-Wno-cast-function-type'],
|
|
141
|
+
'cflags!': ['-fno-exceptions'],
|
|
142
|
+
'cflags_cc!': ['-fno-exceptions']
|
|
143
|
+
}],
|
|
144
|
+
['OS=="mac"', {
|
|
145
|
+
'xcode_settings': {
|
|
146
|
+
'GCC_ENABLE_CPP_EXCEPTIONS': 'YES'
|
|
147
|
+
}
|
|
148
|
+
}],
|
|
149
|
+
['with_jpeg=="true"', {
|
|
150
|
+
'defines': [
|
|
151
|
+
'HAVE_JPEG'
|
|
152
|
+
],
|
|
153
|
+
'conditions': [
|
|
154
|
+
['OS=="win"', {
|
|
155
|
+
'copies': [{
|
|
156
|
+
'destination': '<(PRODUCT_DIR)',
|
|
157
|
+
'files': [
|
|
158
|
+
'<(jpeg_root)/bin/jpeg62.dll',
|
|
159
|
+
]
|
|
160
|
+
}],
|
|
161
|
+
'include_dirs': [
|
|
162
|
+
'<(jpeg_root)/include'
|
|
163
|
+
],
|
|
164
|
+
'libraries': [
|
|
165
|
+
'-l<(jpeg_root)/lib/jpeg.lib',
|
|
166
|
+
]
|
|
167
|
+
}, {
|
|
168
|
+
'include_dirs': [
|
|
169
|
+
'<!@(pkg-config libjpeg --cflags-only-I | sed s/-I//g)'
|
|
170
|
+
],
|
|
171
|
+
'libraries': [
|
|
172
|
+
'<!@(pkg-config libjpeg --libs)'
|
|
173
|
+
]
|
|
174
|
+
}]
|
|
175
|
+
]
|
|
176
|
+
}],
|
|
177
|
+
['with_gif=="true"', {
|
|
178
|
+
'defines': [
|
|
179
|
+
'HAVE_GIF'
|
|
180
|
+
],
|
|
181
|
+
'conditions': [
|
|
182
|
+
['OS=="win"', {
|
|
183
|
+
'libraries': [
|
|
184
|
+
'-l<(GTK_Root)/lib/gif.lib'
|
|
185
|
+
]
|
|
186
|
+
}, {
|
|
187
|
+
'include_dirs': [
|
|
188
|
+
'/opt/homebrew/include'
|
|
189
|
+
],
|
|
190
|
+
'libraries': [
|
|
191
|
+
'-L/opt/homebrew/lib',
|
|
192
|
+
'-lgif'
|
|
193
|
+
]
|
|
194
|
+
}]
|
|
195
|
+
]
|
|
196
|
+
}],
|
|
197
|
+
['with_rsvg=="true"', {
|
|
198
|
+
'defines': [
|
|
199
|
+
'HAVE_RSVG'
|
|
200
|
+
],
|
|
201
|
+
'conditions': [
|
|
202
|
+
['OS=="win"', {
|
|
203
|
+
'copies': [{
|
|
204
|
+
'destination': '<(PRODUCT_DIR)',
|
|
205
|
+
'files': [
|
|
206
|
+
'<(GTK_Root)/bin/librsvg-2-2.dll',
|
|
207
|
+
'<(GTK_Root)/bin/libgdk_pixbuf-2.0-0.dll',
|
|
208
|
+
'<(GTK_Root)/bin/libgio-2.0-0.dll',
|
|
209
|
+
'<(GTK_Root)/bin/libcroco-0.6-3.dll',
|
|
210
|
+
'<(GTK_Root)/bin/libgsf-1-114.dll',
|
|
211
|
+
'<(GTK_Root)/bin/libxml2-2.dll'
|
|
212
|
+
]
|
|
213
|
+
}],
|
|
214
|
+
'libraries': [
|
|
215
|
+
'-l<(GTK_Root)/lib/librsvg-2-2.lib'
|
|
216
|
+
]
|
|
217
|
+
}, {
|
|
218
|
+
'include_dirs': [
|
|
219
|
+
'<!@(pkg-config librsvg-2.0 --cflags-only-I | sed s/-I//g)'
|
|
220
|
+
],
|
|
221
|
+
'libraries': [
|
|
222
|
+
'<!@(pkg-config librsvg-2.0 --libs)'
|
|
223
|
+
]
|
|
224
|
+
}]
|
|
225
|
+
]
|
|
226
|
+
}]
|
|
227
|
+
]
|
|
228
|
+
}
|
|
229
|
+
]
|
|
230
|
+
}
|
package/browser.js
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/* globals document, ImageData */
|
|
2
|
+
|
|
3
|
+
const parseFont = require('./lib/parse-font')
|
|
4
|
+
|
|
5
|
+
exports.parseFont = parseFont
|
|
6
|
+
|
|
7
|
+
exports.createCanvas = function (width, height) {
|
|
8
|
+
return Object.assign(document.createElement('canvas'), { width: width, height: height })
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
exports.createImageData = function (array, width, height) {
|
|
12
|
+
// Browser implementation of ImageData looks at the number of arguments passed
|
|
13
|
+
switch (arguments.length) {
|
|
14
|
+
case 0: return new ImageData()
|
|
15
|
+
case 1: return new ImageData(array)
|
|
16
|
+
case 2: return new ImageData(array, width)
|
|
17
|
+
default: return new ImageData(array, width, height)
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
exports.loadImage = function (src, options) {
|
|
22
|
+
return new Promise(function (resolve, reject) {
|
|
23
|
+
const image = Object.assign(document.createElement('img'), options)
|
|
24
|
+
|
|
25
|
+
function cleanup () {
|
|
26
|
+
image.onload = null
|
|
27
|
+
image.onerror = null
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
image.onload = function () { cleanup(); resolve(image) }
|
|
31
|
+
image.onerror = function () { cleanup(); reject(new Error('Failed to load the image "' + src + '"')) }
|
|
32
|
+
|
|
33
|
+
image.src = src
|
|
34
|
+
})
|
|
35
|
+
}
|
package/index.js
ADDED
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
const Canvas = require('./lib/canvas')
|
|
2
|
+
const Image = require('./lib/image')
|
|
3
|
+
const CanvasRenderingContext2D = require('./lib/context2d')
|
|
4
|
+
const CanvasPattern = require('./lib/pattern')
|
|
5
|
+
const parseFont = require('./lib/parse-font')
|
|
6
|
+
const packageJson = require('./package.json')
|
|
7
|
+
const bindings = require('./lib/bindings')
|
|
8
|
+
const fs = require('fs')
|
|
9
|
+
const PNGStream = require('./lib/pngstream')
|
|
10
|
+
const PDFStream = require('./lib/pdfstream')
|
|
11
|
+
const JPEGStream = require('./lib/jpegstream')
|
|
12
|
+
const { DOMPoint, DOMMatrix } = require('./lib/DOMMatrix')
|
|
13
|
+
|
|
14
|
+
function createCanvas (width, height, type) {
|
|
15
|
+
return new Canvas(width, height, type)
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
function createImageData (array, width, height) {
|
|
19
|
+
return new bindings.ImageData(array, width, height)
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function loadImage (src) {
|
|
23
|
+
return new Promise((resolve, reject) => {
|
|
24
|
+
const image = new Image()
|
|
25
|
+
|
|
26
|
+
function cleanup () {
|
|
27
|
+
image.onload = null
|
|
28
|
+
image.onerror = null
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
image.onload = () => { cleanup(); resolve(image) }
|
|
32
|
+
image.onerror = (err) => { cleanup(); reject(err) }
|
|
33
|
+
|
|
34
|
+
image.src = src
|
|
35
|
+
})
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Resolve paths for registerFont. Must be called *before* creating a Canvas
|
|
40
|
+
* instance.
|
|
41
|
+
* @param src {string} Path to font file.
|
|
42
|
+
* @param fontFace {{family: string, weight?: string, style?: string}} Object
|
|
43
|
+
* specifying font information. `weight` and `style` default to `"normal"`.
|
|
44
|
+
*/
|
|
45
|
+
function registerFont (src, fontFace) {
|
|
46
|
+
// TODO this doesn't need to be on Canvas; it should just be a static method
|
|
47
|
+
// of `bindings`.
|
|
48
|
+
return Canvas._registerFont(fs.realpathSync(src), fontFace)
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Unload all fonts from pango to free up memory
|
|
53
|
+
*/
|
|
54
|
+
function deregisterAllFonts () {
|
|
55
|
+
return Canvas._deregisterAllFonts()
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
exports.Canvas = Canvas
|
|
59
|
+
exports.Context2d = CanvasRenderingContext2D // Legacy/compat export
|
|
60
|
+
exports.CanvasRenderingContext2D = CanvasRenderingContext2D
|
|
61
|
+
exports.CanvasGradient = bindings.CanvasGradient
|
|
62
|
+
exports.CanvasPattern = CanvasPattern
|
|
63
|
+
exports.Image = Image
|
|
64
|
+
exports.ImageData = bindings.ImageData
|
|
65
|
+
exports.PNGStream = PNGStream
|
|
66
|
+
exports.PDFStream = PDFStream
|
|
67
|
+
exports.JPEGStream = JPEGStream
|
|
68
|
+
exports.DOMMatrix = DOMMatrix
|
|
69
|
+
exports.DOMPoint = DOMPoint
|
|
70
|
+
|
|
71
|
+
exports.registerFont = registerFont
|
|
72
|
+
exports.deregisterAllFonts = deregisterAllFonts
|
|
73
|
+
exports.parseFont = parseFont
|
|
74
|
+
|
|
75
|
+
exports.createCanvas = createCanvas
|
|
76
|
+
exports.createImageData = createImageData
|
|
77
|
+
exports.loadImage = loadImage
|
|
78
|
+
|
|
79
|
+
exports.backends = bindings.Backends
|
|
80
|
+
|
|
81
|
+
/** Library version. */
|
|
82
|
+
exports.version = packageJson.version
|
|
83
|
+
/** Cairo version. */
|
|
84
|
+
exports.cairoVersion = bindings.cairoVersion
|
|
85
|
+
/** jpeglib version. */
|
|
86
|
+
exports.jpegVersion = bindings.jpegVersion
|
|
87
|
+
/** gif_lib version. */
|
|
88
|
+
exports.gifVersion = bindings.gifVersion ? bindings.gifVersion.replace(/[^.\d]/g, '') : undefined
|
|
89
|
+
/** freetype version. */
|
|
90
|
+
exports.freetypeVersion = bindings.freetypeVersion
|
|
91
|
+
/** rsvg version. */
|
|
92
|
+
exports.rsvgVersion = bindings.rsvgVersion
|
|
93
|
+
/** pango version. */
|
|
94
|
+
exports.pangoVersion = bindings.pangoVersion
|