@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.
Files changed (57) hide show
  1. package/Readme.md +600 -0
  2. package/binding.gyp +230 -0
  3. package/browser.js +35 -0
  4. package/index.js +94 -0
  5. package/lib/DOMMatrix.js +620 -0
  6. package/lib/bindings.js +80 -0
  7. package/lib/canvas.js +113 -0
  8. package/lib/context2d.js +14 -0
  9. package/lib/image.js +96 -0
  10. package/lib/jpegstream.js +41 -0
  11. package/lib/parse-font.js +101 -0
  12. package/lib/pattern.js +17 -0
  13. package/lib/pdfstream.js +35 -0
  14. package/lib/pngstream.js +42 -0
  15. package/package.json +71 -0
  16. package/scripts/install.js +24 -0
  17. package/src/Backends.cc +18 -0
  18. package/src/Backends.h +10 -0
  19. package/src/Canvas.cc +965 -0
  20. package/src/Canvas.h +96 -0
  21. package/src/CanvasError.h +23 -0
  22. package/src/CanvasGradient.cc +123 -0
  23. package/src/CanvasGradient.h +22 -0
  24. package/src/CanvasPattern.cc +136 -0
  25. package/src/CanvasPattern.h +37 -0
  26. package/src/CanvasRenderingContext2d.cc +3360 -0
  27. package/src/CanvasRenderingContext2d.h +225 -0
  28. package/src/Image.cc +1434 -0
  29. package/src/Image.h +127 -0
  30. package/src/ImageData.cc +146 -0
  31. package/src/ImageData.h +27 -0
  32. package/src/JPEGStream.h +167 -0
  33. package/src/PNG.h +292 -0
  34. package/src/Point.h +11 -0
  35. package/src/Util.h +9 -0
  36. package/src/backend/Backend.cc +112 -0
  37. package/src/backend/Backend.h +69 -0
  38. package/src/backend/ImageBackend.cc +74 -0
  39. package/src/backend/ImageBackend.h +26 -0
  40. package/src/backend/PdfBackend.cc +53 -0
  41. package/src/backend/PdfBackend.h +24 -0
  42. package/src/backend/SvgBackend.cc +61 -0
  43. package/src/backend/SvgBackend.h +24 -0
  44. package/src/bmp/BMPParser.cc +457 -0
  45. package/src/bmp/BMPParser.h +60 -0
  46. package/src/bmp/LICENSE.md +24 -0
  47. package/src/closure.cc +26 -0
  48. package/src/closure.h +81 -0
  49. package/src/color.cc +779 -0
  50. package/src/color.h +30 -0
  51. package/src/dll_visibility.h +20 -0
  52. package/src/init.cc +94 -0
  53. package/src/register_font.cc +408 -0
  54. package/src/register_font.h +7 -0
  55. package/types/index.d.ts +484 -0
  56. package/util/has_lib.js +119 -0
  57. 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