@leafer-editor/worker 1.0.8 → 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/worker.js +82 -55
- package/dist/worker.min.js +1 -1
- package/dist/worker.module.js +82 -55
- package/dist/worker.module.min.js +1 -1
- package/package.json +6 -6
package/dist/worker.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$3[tag])
|
|
1414
|
+
if (list$3[tag])
|
|
1415
1415
|
debug$f.repeat(tag);
|
|
1416
|
-
|
|
1417
|
-
else {
|
|
1418
|
-
list$3[tag] = UI;
|
|
1419
|
-
}
|
|
1416
|
+
list$3[tag] = UI;
|
|
1420
1417
|
},
|
|
1421
1418
|
get(tag, data, x, y, width, height) {
|
|
1419
|
+
if (!list$3[tag])
|
|
1420
|
+
debug$f.error('not register ' + tag);
|
|
1422
1421
|
const ui = new list$3[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$e.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
|
class LeaferCanvas extends LeaferCanvasBase {
|
|
5965
5981
|
get allowBackgroundColor() { return true; }
|
|
@@ -6428,7 +6444,8 @@ class Renderer {
|
|
|
6428
6444
|
this.totalBounds = new Bounds();
|
|
6429
6445
|
debug$6.log(target.innerName, '--->');
|
|
6430
6446
|
try {
|
|
6431
|
-
target.
|
|
6447
|
+
if (!target.isApp)
|
|
6448
|
+
target.app.emit(RenderEvent.CHILD_START, target);
|
|
6432
6449
|
this.emitRender(RenderEvent.START);
|
|
6433
6450
|
this.renderOnce(callback);
|
|
6434
6451
|
this.emitRender(RenderEvent.END, this.totalBounds);
|
|
@@ -6982,6 +6999,12 @@ class UIData extends LeafData {
|
|
|
6982
6999
|
return strokeWidth;
|
|
6983
7000
|
}
|
|
6984
7001
|
get __hasStroke() { return this.stroke && this.strokeWidth; }
|
|
7002
|
+
get __hasMultiPaint() {
|
|
7003
|
+
const t = this;
|
|
7004
|
+
if ((t.__isFills && t.fill.length > 1) || (t.__isStrokes && t.stroke.length > 1) || t.__useEffect)
|
|
7005
|
+
return true;
|
|
7006
|
+
return t.fill && this.__hasStroke;
|
|
7007
|
+
}
|
|
6985
7008
|
get __clipAfterFill() { return (this.cornerRadius || this.__pathInputed); }
|
|
6986
7009
|
get __autoWidth() { return !this._width; }
|
|
6987
7010
|
get __autoHeight() { return !this._height; }
|
|
@@ -7351,9 +7374,8 @@ const RectRender = {
|
|
|
7351
7374
|
canvas.strokeRect(half, half, width, height);
|
|
7352
7375
|
canvas.restore();
|
|
7353
7376
|
}
|
|
7354
|
-
else
|
|
7377
|
+
else
|
|
7355
7378
|
canvas.strokeRect(half, half, width, height);
|
|
7356
|
-
}
|
|
7357
7379
|
break;
|
|
7358
7380
|
case 'outside':
|
|
7359
7381
|
canvas.strokeRect(-half, -half, width + __strokeWidth, height + __strokeWidth);
|
|
@@ -7578,6 +7600,15 @@ __decorate([
|
|
|
7578
7600
|
__decorate([
|
|
7579
7601
|
boundsType(0)
|
|
7580
7602
|
], UI.prototype, "padding", void 0);
|
|
7603
|
+
__decorate([
|
|
7604
|
+
boundsType(false)
|
|
7605
|
+
], UI.prototype, "lockRatio", void 0);
|
|
7606
|
+
__decorate([
|
|
7607
|
+
boundsType()
|
|
7608
|
+
], UI.prototype, "widthRange", void 0);
|
|
7609
|
+
__decorate([
|
|
7610
|
+
boundsType()
|
|
7611
|
+
], UI.prototype, "heightRange", void 0);
|
|
7581
7612
|
__decorate([
|
|
7582
7613
|
dataType(false)
|
|
7583
7614
|
], UI.prototype, "draggable", void 0);
|
|
@@ -7869,8 +7900,6 @@ let Leafer = Leafer_1 = class Leafer extends Group {
|
|
|
7869
7900
|
__onResize(event) {
|
|
7870
7901
|
this.emitEvent(event);
|
|
7871
7902
|
DataHelper.copyAttrs(this.__, event, canvasSizeAttrs);
|
|
7872
|
-
if (!event.width || !event.height)
|
|
7873
|
-
debug$4.warn('w = 0 or h = 0');
|
|
7874
7903
|
setTimeout(() => { if (this.canvasManager)
|
|
7875
7904
|
this.canvasManager.clearRecycled(); }, 0);
|
|
7876
7905
|
}
|
|
@@ -8195,9 +8224,6 @@ __decorate([
|
|
|
8195
8224
|
__decorate([
|
|
8196
8225
|
dataType(false)
|
|
8197
8226
|
], Box.prototype, "resizeChildren", void 0);
|
|
8198
|
-
__decorate([
|
|
8199
|
-
dataType(false)
|
|
8200
|
-
], Box.prototype, "textBox", void 0);
|
|
8201
8227
|
__decorate([
|
|
8202
8228
|
affectRenderBoundsType('show')
|
|
8203
8229
|
], Box.prototype, "overflow", void 0);
|
|
@@ -8608,7 +8634,6 @@ let Text = class Text extends UI {
|
|
|
8608
8634
|
this.__updateTextDrawData();
|
|
8609
8635
|
const { bounds } = data.__textDrawData;
|
|
8610
8636
|
const b = layout.boxBounds;
|
|
8611
|
-
console.log(bounds, autoWidth, autoHeight);
|
|
8612
8637
|
if (data.__lineHeight < fontSize)
|
|
8613
8638
|
spread(bounds, fontSize / 2);
|
|
8614
8639
|
if (autoWidth || autoHeight) {
|
|
@@ -8953,19 +8978,13 @@ class UIEvent extends Event {
|
|
|
8953
8978
|
Object.assign(this, params);
|
|
8954
8979
|
}
|
|
8955
8980
|
getBoxPoint(relative) {
|
|
8956
|
-
|
|
8957
|
-
relative = this.current;
|
|
8958
|
-
return relative.getBoxPoint(this);
|
|
8981
|
+
return (relative || this.current).getBoxPoint(this);
|
|
8959
8982
|
}
|
|
8960
8983
|
getInnerPoint(relative) {
|
|
8961
|
-
|
|
8962
|
-
relative = this.current;
|
|
8963
|
-
return relative.getInnerPoint(this);
|
|
8984
|
+
return (relative || this.current).getInnerPoint(this);
|
|
8964
8985
|
}
|
|
8965
8986
|
getLocalPoint(relative) {
|
|
8966
|
-
|
|
8967
|
-
relative = this.current;
|
|
8968
|
-
return relative.getLocalPoint(this);
|
|
8987
|
+
return (relative || this.current).getLocalPoint(this);
|
|
8969
8988
|
}
|
|
8970
8989
|
getPagePoint() {
|
|
8971
8990
|
return this.current.getPagePoint(this);
|
|
@@ -9199,7 +9218,8 @@ const debug$3 = Debug.get('LeaferTypeCreator');
|
|
|
9199
9218
|
const LeaferTypeCreator = {
|
|
9200
9219
|
list: {},
|
|
9201
9220
|
register(name, fn) {
|
|
9202
|
-
list$1[name]
|
|
9221
|
+
list$1[name] && debug$3.repeat(name);
|
|
9222
|
+
list$1[name] = fn;
|
|
9203
9223
|
},
|
|
9204
9224
|
run(name, leafer) {
|
|
9205
9225
|
const fn = list$1[name];
|
|
@@ -11215,16 +11235,16 @@ const EffectModule = {
|
|
|
11215
11235
|
|
|
11216
11236
|
const { excludeRenderBounds } = LeafBoundsHelper;
|
|
11217
11237
|
Group.prototype.__renderMask = function (canvas, options) {
|
|
11218
|
-
let child, maskCanvas, contentCanvas, maskOpacity, currentMask;
|
|
11238
|
+
let child, maskCanvas, contentCanvas, maskOpacity, currentMask, mask;
|
|
11219
11239
|
const { children } = this;
|
|
11220
11240
|
for (let i = 0, len = children.length; i < len; i++) {
|
|
11221
|
-
child = children[i];
|
|
11222
|
-
if (
|
|
11241
|
+
child = children[i], mask = child.__.mask;
|
|
11242
|
+
if (mask) {
|
|
11223
11243
|
if (currentMask) {
|
|
11224
11244
|
maskEnd(this, currentMask, canvas, contentCanvas, maskCanvas, maskOpacity);
|
|
11225
11245
|
maskCanvas = contentCanvas = null;
|
|
11226
11246
|
}
|
|
11227
|
-
if (
|
|
11247
|
+
if (mask === 'path' || mask === 'clipping-path') {
|
|
11228
11248
|
if (child.opacity < 1) {
|
|
11229
11249
|
currentMask = 'opacity-path';
|
|
11230
11250
|
maskOpacity = child.opacity;
|
|
@@ -11238,14 +11258,14 @@ Group.prototype.__renderMask = function (canvas, options) {
|
|
|
11238
11258
|
child.__clip(contentCanvas || canvas, options);
|
|
11239
11259
|
}
|
|
11240
11260
|
else {
|
|
11241
|
-
currentMask = 'alpha';
|
|
11261
|
+
currentMask = mask === 'grayscale' ? 'grayscale' : 'alpha';
|
|
11242
11262
|
if (!maskCanvas)
|
|
11243
11263
|
maskCanvas = getCanvas(canvas);
|
|
11244
11264
|
if (!contentCanvas)
|
|
11245
11265
|
contentCanvas = getCanvas(canvas);
|
|
11246
11266
|
child.__render(maskCanvas, options);
|
|
11247
11267
|
}
|
|
11248
|
-
if (
|
|
11268
|
+
if (!(mask === 'clipping' || mask === 'clipping-path'))
|
|
11249
11269
|
continue;
|
|
11250
11270
|
}
|
|
11251
11271
|
if (excludeRenderBounds(child, options))
|
|
@@ -11256,6 +11276,8 @@ Group.prototype.__renderMask = function (canvas, options) {
|
|
|
11256
11276
|
};
|
|
11257
11277
|
function maskEnd(leaf, maskMode, canvas, contentCanvas, maskCanvas, maskOpacity) {
|
|
11258
11278
|
switch (maskMode) {
|
|
11279
|
+
case 'grayscale':
|
|
11280
|
+
maskCanvas.useGrayscaleAlpha(leaf.__nowWorld);
|
|
11259
11281
|
case 'alpha':
|
|
11260
11282
|
usePixelMask(leaf, canvas, contentCanvas, maskCanvas);
|
|
11261
11283
|
break;
|
|
@@ -11960,15 +11982,12 @@ const canvas = LeaferCanvasBase.prototype;
|
|
|
11960
11982
|
const debug$1 = Debug.get('@leafer-ui/export');
|
|
11961
11983
|
canvas.export = function (filename, options) {
|
|
11962
11984
|
const { quality, blob } = FileHelper.getExportOptions(options);
|
|
11963
|
-
if (filename.includes('.'))
|
|
11985
|
+
if (filename.includes('.'))
|
|
11964
11986
|
return this.saveAs(filename, quality);
|
|
11965
|
-
|
|
11966
|
-
else if (blob) {
|
|
11987
|
+
else if (blob)
|
|
11967
11988
|
return this.toBlob(filename, quality);
|
|
11968
|
-
|
|
11969
|
-
else {
|
|
11989
|
+
else
|
|
11970
11990
|
return this.toDataURL(filename, quality);
|
|
11971
|
-
}
|
|
11972
11991
|
};
|
|
11973
11992
|
canvas.toBlob = function (type, quality) {
|
|
11974
11993
|
return new Promise((resolve) => {
|
|
@@ -13010,7 +13029,7 @@ class EditBox extends Group {
|
|
|
13010
13029
|
}
|
|
13011
13030
|
getPointStyle(userStyle) {
|
|
13012
13031
|
const { stroke, strokeWidth, pointFill, pointSize, pointRadius } = this.editor.mergeConfig;
|
|
13013
|
-
const defaultStyle = { fill: pointFill, stroke, strokeWidth, around: 'center', strokeAlign: 'center', width: pointSize, height: pointSize, cornerRadius: pointRadius };
|
|
13032
|
+
const defaultStyle = { fill: pointFill, stroke, strokeWidth, around: 'center', strokeAlign: 'center', width: pointSize, height: pointSize, cornerRadius: pointRadius, offsetX: 0, offsetY: 0 };
|
|
13014
13033
|
return userStyle ? Object.assign(defaultStyle, userStyle) : defaultStyle;
|
|
13015
13034
|
}
|
|
13016
13035
|
getPointsStyle() {
|
|
@@ -13092,9 +13111,10 @@ class EditBox extends Group {
|
|
|
13092
13111
|
const { editor } = this;
|
|
13093
13112
|
if (editor.single) {
|
|
13094
13113
|
const { element } = editor;
|
|
13095
|
-
if (element.isBranch) {
|
|
13114
|
+
if (element.isBranch && !element.editInner) {
|
|
13096
13115
|
if (element.textBox) {
|
|
13097
|
-
const
|
|
13116
|
+
const { children } = element;
|
|
13117
|
+
const find = children.find(item => item.editable && item instanceof Text) || children.find(item => item instanceof Text);
|
|
13098
13118
|
if (find)
|
|
13099
13119
|
return editor.openInnerEditor(find);
|
|
13100
13120
|
}
|
|
@@ -13354,7 +13374,8 @@ const EditToolCreator = {
|
|
|
13354
13374
|
list: {},
|
|
13355
13375
|
register(EditTool) {
|
|
13356
13376
|
const { tag } = EditTool.prototype;
|
|
13357
|
-
list[tag]
|
|
13377
|
+
list[tag] && debug.repeat(tag);
|
|
13378
|
+
list[tag] = EditTool;
|
|
13358
13379
|
},
|
|
13359
13380
|
get(tag, editor) {
|
|
13360
13381
|
return new list[tag](editor);
|
|
@@ -14048,12 +14069,16 @@ LineEditTool = __decorate([
|
|
|
14048
14069
|
], LineEditTool);
|
|
14049
14070
|
|
|
14050
14071
|
Creator.editor = function (options) { return new Editor(options); };
|
|
14072
|
+
dataType(false)(Box.prototype, 'textBox');
|
|
14051
14073
|
defineKey(UI.prototype, 'editOuter', {
|
|
14052
14074
|
get() { return this.__.__isLinePath ? 'LineEditTool' : 'EditTool'; }
|
|
14053
14075
|
});
|
|
14054
14076
|
defineKey(UI.prototype, 'editInner', {
|
|
14055
14077
|
get() { return 'PathEditor'; }
|
|
14056
14078
|
});
|
|
14079
|
+
defineKey(Group.prototype, 'editInner', {
|
|
14080
|
+
get() { return ''; }
|
|
14081
|
+
});
|
|
14057
14082
|
defineKey(Text.prototype, 'editInner', {
|
|
14058
14083
|
get() { return 'TextEditor'; }
|
|
14059
14084
|
});
|
|
@@ -14681,8 +14706,10 @@ let TextEditor = class TextEditor extends InnerEditor {
|
|
|
14681
14706
|
this.textScale = textScale;
|
|
14682
14707
|
const { a, b, c, d, e, f } = new Matrix(text.worldTransform).scale(1 / textScale);
|
|
14683
14708
|
let { x, y } = this.inBody ? text.app.clientBounds : text.app.tree.clientBounds;
|
|
14709
|
+
if (!this.inBody)
|
|
14710
|
+
x -= window.scrollX, y -= window.scrollY;
|
|
14684
14711
|
let { width, height } = text;
|
|
14685
|
-
|
|
14712
|
+
width *= textScale, height *= textScale;
|
|
14686
14713
|
const data = text.__;
|
|
14687
14714
|
if (data.__autoWidth && data.autoSizeAlign) {
|
|
14688
14715
|
width += 20;
|