@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
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
// Copyright (c) 2010 LearnBoost <tj@learnboost.com>
|
|
2
|
+
|
|
3
|
+
#pragma once
|
|
4
|
+
|
|
5
|
+
#include "cairo.h"
|
|
6
|
+
#include "Canvas.h"
|
|
7
|
+
#include "color.h"
|
|
8
|
+
#include "nan.h"
|
|
9
|
+
#include <pango/pangocairo.h>
|
|
10
|
+
#include <stack>
|
|
11
|
+
|
|
12
|
+
/*
|
|
13
|
+
* State struct.
|
|
14
|
+
*
|
|
15
|
+
* Used in conjunction with Save() / Restore() since
|
|
16
|
+
* cairo's gstate maintains only a single source pattern at a time.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
struct canvas_state_t {
|
|
20
|
+
rgba_t fill = { 0, 0, 0, 1 };
|
|
21
|
+
rgba_t stroke = { 0, 0, 0, 1 };
|
|
22
|
+
rgba_t shadow = { 0, 0, 0, 0 };
|
|
23
|
+
double shadowOffsetX = 0.;
|
|
24
|
+
double shadowOffsetY = 0.;
|
|
25
|
+
cairo_pattern_t* fillPattern = nullptr;
|
|
26
|
+
cairo_pattern_t* strokePattern = nullptr;
|
|
27
|
+
cairo_pattern_t* fillGradient = nullptr;
|
|
28
|
+
cairo_pattern_t* strokeGradient = nullptr;
|
|
29
|
+
PangoFontDescription* fontDescription = nullptr;
|
|
30
|
+
std::string font = "10px sans-serif";
|
|
31
|
+
cairo_filter_t patternQuality = CAIRO_FILTER_GOOD;
|
|
32
|
+
float globalAlpha = 1.f;
|
|
33
|
+
int shadowBlur = 0;
|
|
34
|
+
text_align_t textAlignment = TEXT_ALIGNMENT_LEFT; // TODO default is supposed to be START
|
|
35
|
+
text_baseline_t textBaseline = TEXT_BASELINE_ALPHABETIC;
|
|
36
|
+
canvas_draw_mode_t textDrawingMode = TEXT_DRAW_PATHS;
|
|
37
|
+
bool imageSmoothingEnabled = true;
|
|
38
|
+
|
|
39
|
+
canvas_state_t() {
|
|
40
|
+
fontDescription = pango_font_description_from_string("sans");
|
|
41
|
+
pango_font_description_set_absolute_size(fontDescription, 10 * PANGO_SCALE);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
canvas_state_t(const canvas_state_t& other) {
|
|
45
|
+
fill = other.fill;
|
|
46
|
+
stroke = other.stroke;
|
|
47
|
+
patternQuality = other.patternQuality;
|
|
48
|
+
fillPattern = other.fillPattern;
|
|
49
|
+
strokePattern = other.strokePattern;
|
|
50
|
+
fillGradient = other.fillGradient;
|
|
51
|
+
strokeGradient = other.strokeGradient;
|
|
52
|
+
globalAlpha = other.globalAlpha;
|
|
53
|
+
textAlignment = other.textAlignment;
|
|
54
|
+
textBaseline = other.textBaseline;
|
|
55
|
+
shadow = other.shadow;
|
|
56
|
+
shadowBlur = other.shadowBlur;
|
|
57
|
+
shadowOffsetX = other.shadowOffsetX;
|
|
58
|
+
shadowOffsetY = other.shadowOffsetY;
|
|
59
|
+
textDrawingMode = other.textDrawingMode;
|
|
60
|
+
fontDescription = pango_font_description_copy(other.fontDescription);
|
|
61
|
+
font = other.font;
|
|
62
|
+
imageSmoothingEnabled = other.imageSmoothingEnabled;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
~canvas_state_t() {
|
|
66
|
+
pango_font_description_free(fontDescription);
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
/*
|
|
71
|
+
* Equivalent to a PangoRectangle but holds floats instead of ints
|
|
72
|
+
* (software pixels are stored here instead of pango units)
|
|
73
|
+
*
|
|
74
|
+
* Should be compatible with PANGO_ASCENT, PANGO_LBEARING, etc.
|
|
75
|
+
*/
|
|
76
|
+
|
|
77
|
+
typedef struct {
|
|
78
|
+
float x;
|
|
79
|
+
float y;
|
|
80
|
+
float width;
|
|
81
|
+
float height;
|
|
82
|
+
} float_rectangle;
|
|
83
|
+
|
|
84
|
+
class Context2d : public Nan::ObjectWrap {
|
|
85
|
+
public:
|
|
86
|
+
std::stack<canvas_state_t> states;
|
|
87
|
+
canvas_state_t *state;
|
|
88
|
+
Context2d(Canvas *canvas);
|
|
89
|
+
static Nan::Persistent<v8::Function> _DOMMatrix;
|
|
90
|
+
static Nan::Persistent<v8::Function> _parseFont;
|
|
91
|
+
static Nan::Persistent<v8::FunctionTemplate> constructor;
|
|
92
|
+
static void Initialize(Nan::ADDON_REGISTER_FUNCTION_ARGS_TYPE target);
|
|
93
|
+
static NAN_METHOD(New);
|
|
94
|
+
static NAN_METHOD(SaveExternalModules);
|
|
95
|
+
static NAN_METHOD(DrawImage);
|
|
96
|
+
static NAN_METHOD(PutImageData);
|
|
97
|
+
static NAN_METHOD(Save);
|
|
98
|
+
static NAN_METHOD(Restore);
|
|
99
|
+
static NAN_METHOD(Rotate);
|
|
100
|
+
static NAN_METHOD(Translate);
|
|
101
|
+
static NAN_METHOD(Scale);
|
|
102
|
+
static NAN_METHOD(Transform);
|
|
103
|
+
static NAN_METHOD(GetTransform);
|
|
104
|
+
static NAN_METHOD(ResetTransform);
|
|
105
|
+
static NAN_METHOD(SetTransform);
|
|
106
|
+
static NAN_METHOD(IsPointInPath);
|
|
107
|
+
static NAN_METHOD(BeginPath);
|
|
108
|
+
static NAN_METHOD(ClosePath);
|
|
109
|
+
static NAN_METHOD(AddPage);
|
|
110
|
+
static NAN_METHOD(Clip);
|
|
111
|
+
static NAN_METHOD(Fill);
|
|
112
|
+
static NAN_METHOD(Stroke);
|
|
113
|
+
static NAN_METHOD(FillText);
|
|
114
|
+
static NAN_METHOD(StrokeText);
|
|
115
|
+
static NAN_METHOD(SetFont);
|
|
116
|
+
static NAN_METHOD(SetFillColor);
|
|
117
|
+
static NAN_METHOD(SetStrokeColor);
|
|
118
|
+
static NAN_METHOD(SetStrokePattern);
|
|
119
|
+
static NAN_METHOD(SetTextAlignment);
|
|
120
|
+
static NAN_METHOD(SetLineDash);
|
|
121
|
+
static NAN_METHOD(GetLineDash);
|
|
122
|
+
static NAN_METHOD(MeasureText);
|
|
123
|
+
static NAN_METHOD(BezierCurveTo);
|
|
124
|
+
static NAN_METHOD(QuadraticCurveTo);
|
|
125
|
+
static NAN_METHOD(LineTo);
|
|
126
|
+
static NAN_METHOD(MoveTo);
|
|
127
|
+
static NAN_METHOD(FillRect);
|
|
128
|
+
static NAN_METHOD(StrokeRect);
|
|
129
|
+
static NAN_METHOD(ClearRect);
|
|
130
|
+
static NAN_METHOD(Rect);
|
|
131
|
+
static NAN_METHOD(RoundRect);
|
|
132
|
+
static NAN_METHOD(Arc);
|
|
133
|
+
static NAN_METHOD(ArcTo);
|
|
134
|
+
static NAN_METHOD(Ellipse);
|
|
135
|
+
static NAN_METHOD(GetImageData);
|
|
136
|
+
static NAN_METHOD(CreateImageData);
|
|
137
|
+
static NAN_METHOD(GetStrokeColor);
|
|
138
|
+
static NAN_METHOD(CreatePattern);
|
|
139
|
+
static NAN_METHOD(CreateLinearGradient);
|
|
140
|
+
static NAN_METHOD(CreateRadialGradient);
|
|
141
|
+
static NAN_GETTER(GetFormat);
|
|
142
|
+
static NAN_GETTER(GetPatternQuality);
|
|
143
|
+
static NAN_GETTER(GetImageSmoothingEnabled);
|
|
144
|
+
static NAN_GETTER(GetGlobalCompositeOperation);
|
|
145
|
+
static NAN_GETTER(GetGlobalAlpha);
|
|
146
|
+
static NAN_GETTER(GetShadowColor);
|
|
147
|
+
static NAN_GETTER(GetMiterLimit);
|
|
148
|
+
static NAN_GETTER(GetLineCap);
|
|
149
|
+
static NAN_GETTER(GetLineJoin);
|
|
150
|
+
static NAN_GETTER(GetLineWidth);
|
|
151
|
+
static NAN_GETTER(GetLineDashOffset);
|
|
152
|
+
static NAN_GETTER(GetShadowOffsetX);
|
|
153
|
+
static NAN_GETTER(GetShadowOffsetY);
|
|
154
|
+
static NAN_GETTER(GetShadowBlur);
|
|
155
|
+
static NAN_GETTER(GetAntiAlias);
|
|
156
|
+
static NAN_GETTER(GetTextDrawingMode);
|
|
157
|
+
static NAN_GETTER(GetQuality);
|
|
158
|
+
static NAN_GETTER(GetCurrentTransform);
|
|
159
|
+
static NAN_GETTER(GetFillStyle);
|
|
160
|
+
static NAN_GETTER(GetStrokeStyle);
|
|
161
|
+
static NAN_GETTER(GetFont);
|
|
162
|
+
static NAN_GETTER(GetTextBaseline);
|
|
163
|
+
static NAN_GETTER(GetTextAlign);
|
|
164
|
+
static NAN_SETTER(SetPatternQuality);
|
|
165
|
+
static NAN_SETTER(SetImageSmoothingEnabled);
|
|
166
|
+
static NAN_SETTER(SetGlobalCompositeOperation);
|
|
167
|
+
static NAN_SETTER(SetGlobalAlpha);
|
|
168
|
+
static NAN_SETTER(SetShadowColor);
|
|
169
|
+
static NAN_SETTER(SetMiterLimit);
|
|
170
|
+
static NAN_SETTER(SetLineCap);
|
|
171
|
+
static NAN_SETTER(SetLineJoin);
|
|
172
|
+
static NAN_SETTER(SetLineWidth);
|
|
173
|
+
static NAN_SETTER(SetLineDashOffset);
|
|
174
|
+
static NAN_SETTER(SetShadowOffsetX);
|
|
175
|
+
static NAN_SETTER(SetShadowOffsetY);
|
|
176
|
+
static NAN_SETTER(SetShadowBlur);
|
|
177
|
+
static NAN_SETTER(SetAntiAlias);
|
|
178
|
+
static NAN_SETTER(SetTextDrawingMode);
|
|
179
|
+
static NAN_SETTER(SetQuality);
|
|
180
|
+
static NAN_SETTER(SetCurrentTransform);
|
|
181
|
+
static NAN_SETTER(SetFillStyle);
|
|
182
|
+
static NAN_SETTER(SetStrokeStyle);
|
|
183
|
+
static NAN_SETTER(SetFont);
|
|
184
|
+
static NAN_SETTER(SetTextBaseline);
|
|
185
|
+
static NAN_SETTER(SetTextAlign);
|
|
186
|
+
inline void setContext(cairo_t *ctx) { _context = ctx; }
|
|
187
|
+
inline cairo_t *context(){ return _context; }
|
|
188
|
+
inline Canvas *canvas(){ return _canvas; }
|
|
189
|
+
inline bool hasShadow();
|
|
190
|
+
void inline setSourceRGBA(rgba_t color);
|
|
191
|
+
void inline setSourceRGBA(cairo_t *ctx, rgba_t color);
|
|
192
|
+
void setTextPath(double x, double y);
|
|
193
|
+
void blur(cairo_surface_t *surface, int radius);
|
|
194
|
+
void shadow(void (fn)(cairo_t *cr));
|
|
195
|
+
void shadowStart();
|
|
196
|
+
void shadowApply();
|
|
197
|
+
void savePath();
|
|
198
|
+
void restorePath();
|
|
199
|
+
void saveState();
|
|
200
|
+
void restoreState();
|
|
201
|
+
void inline setFillRule(v8::Local<v8::Value> value);
|
|
202
|
+
void fill(bool preserve = false);
|
|
203
|
+
void stroke(bool preserve = false);
|
|
204
|
+
void save();
|
|
205
|
+
void restore();
|
|
206
|
+
void setFontFromState();
|
|
207
|
+
void resetState();
|
|
208
|
+
inline PangoLayout *layout(){ return _layout; }
|
|
209
|
+
|
|
210
|
+
private:
|
|
211
|
+
~Context2d();
|
|
212
|
+
void _resetPersistentHandles();
|
|
213
|
+
v8::Local<v8::Value> _getFillColor();
|
|
214
|
+
v8::Local<v8::Value> _getStrokeColor();
|
|
215
|
+
void _setFillColor(v8::Local<v8::Value> arg);
|
|
216
|
+
void _setFillPattern(v8::Local<v8::Value> arg);
|
|
217
|
+
void _setStrokeColor(v8::Local<v8::Value> arg);
|
|
218
|
+
void _setStrokePattern(v8::Local<v8::Value> arg);
|
|
219
|
+
Nan::Persistent<v8::Value> _fillStyle;
|
|
220
|
+
Nan::Persistent<v8::Value> _strokeStyle;
|
|
221
|
+
Canvas *_canvas;
|
|
222
|
+
cairo_t *_context;
|
|
223
|
+
cairo_path_t *_path;
|
|
224
|
+
PangoLayout *_layout;
|
|
225
|
+
};
|