leafer-draw 1.0.9 → 1.0.10
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/dist/web.cjs +13 -13
- package/dist/web.esm.js +13 -13
- package/dist/web.esm.min.js +1 -1
- package/dist/web.js +64 -39
- package/dist/web.min.cjs +1 -1
- package/dist/web.min.js +1 -1
- package/dist/web.module.js +64 -39
- package/dist/web.module.min.js +1 -1
- package/package.json +2 -2
package/dist/web.module.js
CHANGED
|
@@ -1411,14 +1411,13 @@ const UICreator = {
|
|
|
1411
1411
|
list: {},
|
|
1412
1412
|
register(UI) {
|
|
1413
1413
|
const { __tag: tag } = UI.prototype;
|
|
1414
|
-
if (list$1[tag])
|
|
1414
|
+
if (list$1[tag])
|
|
1415
1415
|
debug$d.repeat(tag);
|
|
1416
|
-
|
|
1417
|
-
else {
|
|
1418
|
-
list$1[tag] = UI;
|
|
1419
|
-
}
|
|
1416
|
+
list$1[tag] = UI;
|
|
1420
1417
|
},
|
|
1421
1418
|
get(tag, data, x, y, width, height) {
|
|
1419
|
+
if (!list$1[tag])
|
|
1420
|
+
debug$d.error('not register ' + tag);
|
|
1422
1421
|
const ui = new list$1[tag](data);
|
|
1423
1422
|
if (x !== undefined) {
|
|
1424
1423
|
ui.x = x;
|
|
@@ -1442,7 +1441,7 @@ const EventCreator = {
|
|
|
1442
1441
|
Object.keys(Event).forEach(key => {
|
|
1443
1442
|
name = Event[key];
|
|
1444
1443
|
if (typeof name === 'string')
|
|
1445
|
-
nameList[name]
|
|
1444
|
+
nameList[name] && debug$c.repeat(name), nameList[name] = Event;
|
|
1446
1445
|
});
|
|
1447
1446
|
},
|
|
1448
1447
|
changeName(oldName, newName) {
|
|
@@ -1644,7 +1643,7 @@ class LeafData {
|
|
|
1644
1643
|
const t = this;
|
|
1645
1644
|
if (t.blendMode === 'pass-through') {
|
|
1646
1645
|
const leaf = this.__leaf;
|
|
1647
|
-
if ((t.opacity < 1 && leaf.isBranch) || leaf.__hasEraser || t.eraser) {
|
|
1646
|
+
if ((t.opacity < 1 && (leaf.isBranch || t.__hasMultiPaint)) || leaf.__hasEraser || t.eraser) {
|
|
1648
1647
|
t.__single = true;
|
|
1649
1648
|
}
|
|
1650
1649
|
else if (t.__single) {
|
|
@@ -2042,8 +2041,9 @@ class LeaferCanvasBase extends Canvas$1 {
|
|
|
2042
2041
|
takeCanvas = this.getSameCanvas();
|
|
2043
2042
|
takeCanvas.copyWorld(this);
|
|
2044
2043
|
}
|
|
2045
|
-
|
|
2046
|
-
|
|
2044
|
+
const s = this.size;
|
|
2045
|
+
DataHelper.copyAttrs(s, size, canvasSizeAttrs);
|
|
2046
|
+
canvasSizeAttrs.forEach(key => s[key] || (s[key] = 1));
|
|
2047
2047
|
this.bounds = new Bounds(0, 0, this.width, this.height);
|
|
2048
2048
|
if (this.context && !this.unreal) {
|
|
2049
2049
|
this.updateViewSize();
|
|
@@ -2157,6 +2157,17 @@ class LeaferCanvasBase extends Canvas$1 {
|
|
|
2157
2157
|
if (!onlyResetTransform)
|
|
2158
2158
|
this.useWorldTransform();
|
|
2159
2159
|
}
|
|
2160
|
+
useGrayscaleAlpha(bounds) {
|
|
2161
|
+
this.setTempBounds(bounds, true, true);
|
|
2162
|
+
let alpha, pixel;
|
|
2163
|
+
const { context } = this, imageData = context.getImageData(tempBounds$1.x, tempBounds$1.y, tempBounds$1.width, tempBounds$1.height), { data } = imageData;
|
|
2164
|
+
for (let i = 0, len = data.length; i < len; i += 4) {
|
|
2165
|
+
pixel = data[i] * 0.299 + data[i + 1] * 0.587 + data[i + 2] * 0.114;
|
|
2166
|
+
if (alpha = data[i + 3])
|
|
2167
|
+
data[i + 3] = alpha === 255 ? pixel : alpha * (pixel / 255);
|
|
2168
|
+
}
|
|
2169
|
+
context.putImageData(imageData, tempBounds$1.x, tempBounds$1.y);
|
|
2170
|
+
}
|
|
2160
2171
|
useMask(maskCanvas, fromBounds, toBounds) {
|
|
2161
2172
|
this.copyWorld(maskCanvas, fromBounds, toBounds, 'destination-in');
|
|
2162
2173
|
}
|
|
@@ -2167,7 +2178,7 @@ class LeaferCanvasBase extends Canvas$1 {
|
|
|
2167
2178
|
if (blendMode)
|
|
2168
2179
|
this.blendMode = blendMode;
|
|
2169
2180
|
this.fillStyle = color;
|
|
2170
|
-
|
|
2181
|
+
this.setTempBounds(bounds);
|
|
2171
2182
|
this.fillRect(tempBounds$1.x, tempBounds$1.y, tempBounds$1.width, tempBounds$1.height);
|
|
2172
2183
|
if (blendMode)
|
|
2173
2184
|
this.blendMode = 'source-over';
|
|
@@ -2176,22 +2187,18 @@ class LeaferCanvasBase extends Canvas$1 {
|
|
|
2176
2187
|
if (blendMode)
|
|
2177
2188
|
this.blendMode = blendMode;
|
|
2178
2189
|
this.strokeStyle = color;
|
|
2179
|
-
|
|
2190
|
+
this.setTempBounds(bounds);
|
|
2180
2191
|
this.strokeRect(tempBounds$1.x, tempBounds$1.y, tempBounds$1.width, tempBounds$1.height);
|
|
2181
2192
|
if (blendMode)
|
|
2182
2193
|
this.blendMode = 'source-over';
|
|
2183
2194
|
}
|
|
2184
2195
|
clearWorld(bounds, ceilPixel) {
|
|
2185
|
-
|
|
2186
|
-
if (ceilPixel)
|
|
2187
|
-
tempBounds$1.ceil();
|
|
2196
|
+
this.setTempBounds(bounds, ceilPixel);
|
|
2188
2197
|
this.clearRect(tempBounds$1.x, tempBounds$1.y, tempBounds$1.width, tempBounds$1.height);
|
|
2189
2198
|
}
|
|
2190
2199
|
clipWorld(bounds, ceilPixel) {
|
|
2191
2200
|
this.beginPath();
|
|
2192
|
-
|
|
2193
|
-
if (ceilPixel)
|
|
2194
|
-
tempBounds$1.ceil();
|
|
2201
|
+
this.setTempBounds(bounds, ceilPixel);
|
|
2195
2202
|
this.rect(tempBounds$1.x, tempBounds$1.y, tempBounds$1.width, tempBounds$1.height);
|
|
2196
2203
|
this.clip();
|
|
2197
2204
|
}
|
|
@@ -2199,6 +2206,14 @@ class LeaferCanvasBase extends Canvas$1 {
|
|
|
2199
2206
|
const { pixelRatio } = this;
|
|
2200
2207
|
this.clearRect(0, 0, this.width * pixelRatio + 2, this.height * pixelRatio + 2);
|
|
2201
2208
|
}
|
|
2209
|
+
setTempBounds(bounds, ceil, intersect) {
|
|
2210
|
+
tempBounds$1.set(bounds);
|
|
2211
|
+
if (intersect)
|
|
2212
|
+
tempBounds$1.intersect(this.bounds);
|
|
2213
|
+
tempBounds$1.scale(this.pixelRatio);
|
|
2214
|
+
if (ceil)
|
|
2215
|
+
tempBounds$1.ceil();
|
|
2216
|
+
}
|
|
2202
2217
|
isSameSize(size) {
|
|
2203
2218
|
return this.width === size.width && this.height === size.height && this.pixelRatio === size.pixelRatio;
|
|
2204
2219
|
}
|
|
@@ -5212,13 +5227,14 @@ const BranchRender = {
|
|
|
5212
5227
|
this.__.__checkSingle();
|
|
5213
5228
|
},
|
|
5214
5229
|
__render(canvas, options) {
|
|
5230
|
+
this.__nowWorld = this.__getNowWorld(options);
|
|
5215
5231
|
if (this.__worldOpacity) {
|
|
5216
5232
|
if (this.__.__single) {
|
|
5217
5233
|
if (this.__.eraser === 'path')
|
|
5218
5234
|
return this.__renderEraser(canvas, options);
|
|
5219
5235
|
const tempCanvas = canvas.getSameCanvas(false, true);
|
|
5220
5236
|
this.__renderBranch(tempCanvas, options);
|
|
5221
|
-
const nowWorld = this.
|
|
5237
|
+
const nowWorld = this.__nowWorld;
|
|
5222
5238
|
canvas.opacity = this.__.opacity;
|
|
5223
5239
|
canvas.copyWorldByReset(tempCanvas, nowWorld, nowWorld, this.__.__blendMode, true);
|
|
5224
5240
|
tempCanvas.recycle(nowWorld);
|
|
@@ -5959,7 +5975,7 @@ class LeafLevelList {
|
|
|
5959
5975
|
}
|
|
5960
5976
|
}
|
|
5961
5977
|
|
|
5962
|
-
const version = "1.0.
|
|
5978
|
+
const version = "1.0.10";
|
|
5963
5979
|
|
|
5964
5980
|
const debug$5 = Debug.get('LeaferCanvas');
|
|
5965
5981
|
class LeaferCanvas extends LeaferCanvasBase {
|
|
@@ -6601,7 +6617,8 @@ class Renderer {
|
|
|
6601
6617
|
this.totalBounds = new Bounds();
|
|
6602
6618
|
debug$3.log(target.innerName, '--->');
|
|
6603
6619
|
try {
|
|
6604
|
-
target.
|
|
6620
|
+
if (!target.isApp)
|
|
6621
|
+
target.app.emit(RenderEvent.CHILD_START, target);
|
|
6605
6622
|
this.emitRender(RenderEvent.START);
|
|
6606
6623
|
this.renderOnce(callback);
|
|
6607
6624
|
this.emitRender(RenderEvent.END, this.totalBounds);
|
|
@@ -6882,6 +6899,12 @@ class UIData extends LeafData {
|
|
|
6882
6899
|
return strokeWidth;
|
|
6883
6900
|
}
|
|
6884
6901
|
get __hasStroke() { return this.stroke && this.strokeWidth; }
|
|
6902
|
+
get __hasMultiPaint() {
|
|
6903
|
+
const t = this;
|
|
6904
|
+
if ((t.__isFills && t.fill.length > 1) || (t.__isStrokes && t.stroke.length > 1) || t.__useEffect)
|
|
6905
|
+
return true;
|
|
6906
|
+
return t.fill && this.__hasStroke;
|
|
6907
|
+
}
|
|
6885
6908
|
get __clipAfterFill() { return (this.cornerRadius || this.__pathInputed); }
|
|
6886
6909
|
get __autoWidth() { return !this._width; }
|
|
6887
6910
|
get __autoHeight() { return !this._height; }
|
|
@@ -7251,9 +7274,8 @@ const RectRender = {
|
|
|
7251
7274
|
canvas.strokeRect(half, half, width, height);
|
|
7252
7275
|
canvas.restore();
|
|
7253
7276
|
}
|
|
7254
|
-
else
|
|
7277
|
+
else
|
|
7255
7278
|
canvas.strokeRect(half, half, width, height);
|
|
7256
|
-
}
|
|
7257
7279
|
break;
|
|
7258
7280
|
case 'outside':
|
|
7259
7281
|
canvas.strokeRect(-half, -half, width + __strokeWidth, height + __strokeWidth);
|
|
@@ -7478,6 +7500,15 @@ __decorate([
|
|
|
7478
7500
|
__decorate([
|
|
7479
7501
|
boundsType(0)
|
|
7480
7502
|
], UI.prototype, "padding", void 0);
|
|
7503
|
+
__decorate([
|
|
7504
|
+
boundsType(false)
|
|
7505
|
+
], UI.prototype, "lockRatio", void 0);
|
|
7506
|
+
__decorate([
|
|
7507
|
+
boundsType()
|
|
7508
|
+
], UI.prototype, "widthRange", void 0);
|
|
7509
|
+
__decorate([
|
|
7510
|
+
boundsType()
|
|
7511
|
+
], UI.prototype, "heightRange", void 0);
|
|
7481
7512
|
__decorate([
|
|
7482
7513
|
dataType(false)
|
|
7483
7514
|
], UI.prototype, "draggable", void 0);
|
|
@@ -7769,8 +7800,6 @@ let Leafer = Leafer_1 = class Leafer extends Group {
|
|
|
7769
7800
|
__onResize(event) {
|
|
7770
7801
|
this.emitEvent(event);
|
|
7771
7802
|
DataHelper.copyAttrs(this.__, event, canvasSizeAttrs);
|
|
7772
|
-
if (!event.width || !event.height)
|
|
7773
|
-
debug$1.warn('w = 0 or h = 0');
|
|
7774
7803
|
setTimeout(() => { if (this.canvasManager)
|
|
7775
7804
|
this.canvasManager.clearRecycled(); }, 0);
|
|
7776
7805
|
}
|
|
@@ -8095,9 +8124,6 @@ __decorate([
|
|
|
8095
8124
|
__decorate([
|
|
8096
8125
|
dataType(false)
|
|
8097
8126
|
], Box.prototype, "resizeChildren", void 0);
|
|
8098
|
-
__decorate([
|
|
8099
|
-
dataType(false)
|
|
8100
|
-
], Box.prototype, "textBox", void 0);
|
|
8101
8127
|
__decorate([
|
|
8102
8128
|
affectRenderBoundsType('show')
|
|
8103
8129
|
], Box.prototype, "overflow", void 0);
|
|
@@ -9559,16 +9585,16 @@ const EffectModule = {
|
|
|
9559
9585
|
|
|
9560
9586
|
const { excludeRenderBounds } = LeafBoundsHelper;
|
|
9561
9587
|
Group.prototype.__renderMask = function (canvas, options) {
|
|
9562
|
-
let child, maskCanvas, contentCanvas, maskOpacity, currentMask;
|
|
9588
|
+
let child, maskCanvas, contentCanvas, maskOpacity, currentMask, mask;
|
|
9563
9589
|
const { children } = this;
|
|
9564
9590
|
for (let i = 0, len = children.length; i < len; i++) {
|
|
9565
|
-
child = children[i];
|
|
9566
|
-
if (
|
|
9591
|
+
child = children[i], mask = child.__.mask;
|
|
9592
|
+
if (mask) {
|
|
9567
9593
|
if (currentMask) {
|
|
9568
9594
|
maskEnd(this, currentMask, canvas, contentCanvas, maskCanvas, maskOpacity);
|
|
9569
9595
|
maskCanvas = contentCanvas = null;
|
|
9570
9596
|
}
|
|
9571
|
-
if (
|
|
9597
|
+
if (mask === 'path' || mask === 'clipping-path') {
|
|
9572
9598
|
if (child.opacity < 1) {
|
|
9573
9599
|
currentMask = 'opacity-path';
|
|
9574
9600
|
maskOpacity = child.opacity;
|
|
@@ -9582,14 +9608,14 @@ Group.prototype.__renderMask = function (canvas, options) {
|
|
|
9582
9608
|
child.__clip(contentCanvas || canvas, options);
|
|
9583
9609
|
}
|
|
9584
9610
|
else {
|
|
9585
|
-
currentMask = 'alpha';
|
|
9611
|
+
currentMask = mask === 'grayscale' ? 'grayscale' : 'alpha';
|
|
9586
9612
|
if (!maskCanvas)
|
|
9587
9613
|
maskCanvas = getCanvas(canvas);
|
|
9588
9614
|
if (!contentCanvas)
|
|
9589
9615
|
contentCanvas = getCanvas(canvas);
|
|
9590
9616
|
child.__render(maskCanvas, options);
|
|
9591
9617
|
}
|
|
9592
|
-
if (
|
|
9618
|
+
if (!(mask === 'clipping' || mask === 'clipping-path'))
|
|
9593
9619
|
continue;
|
|
9594
9620
|
}
|
|
9595
9621
|
if (excludeRenderBounds(child, options))
|
|
@@ -9600,6 +9626,8 @@ Group.prototype.__renderMask = function (canvas, options) {
|
|
|
9600
9626
|
};
|
|
9601
9627
|
function maskEnd(leaf, maskMode, canvas, contentCanvas, maskCanvas, maskOpacity) {
|
|
9602
9628
|
switch (maskMode) {
|
|
9629
|
+
case 'grayscale':
|
|
9630
|
+
maskCanvas.useGrayscaleAlpha(leaf.__nowWorld);
|
|
9603
9631
|
case 'alpha':
|
|
9604
9632
|
usePixelMask(leaf, canvas, contentCanvas, maskCanvas);
|
|
9605
9633
|
break;
|
|
@@ -10304,15 +10332,12 @@ const canvas = LeaferCanvasBase.prototype;
|
|
|
10304
10332
|
const debug = Debug.get('@leafer-ui/export');
|
|
10305
10333
|
canvas.export = function (filename, options) {
|
|
10306
10334
|
const { quality, blob } = FileHelper.getExportOptions(options);
|
|
10307
|
-
if (filename.includes('.'))
|
|
10335
|
+
if (filename.includes('.'))
|
|
10308
10336
|
return this.saveAs(filename, quality);
|
|
10309
|
-
|
|
10310
|
-
else if (blob) {
|
|
10337
|
+
else if (blob)
|
|
10311
10338
|
return this.toBlob(filename, quality);
|
|
10312
|
-
|
|
10313
|
-
else {
|
|
10339
|
+
else
|
|
10314
10340
|
return this.toDataURL(filename, quality);
|
|
10315
|
-
}
|
|
10316
10341
|
};
|
|
10317
10342
|
canvas.toBlob = function (type, quality) {
|
|
10318
10343
|
return new Promise((resolve) => {
|