@pooder/kit 5.3.1 → 6.0.0
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/.test-dist/src/extensions/background.js +475 -131
- package/.test-dist/src/extensions/dieline.js +283 -180
- package/.test-dist/src/extensions/dielineShape.js +66 -0
- package/.test-dist/src/extensions/feature.js +388 -303
- package/.test-dist/src/extensions/film.js +133 -74
- package/.test-dist/src/extensions/geometry.js +120 -56
- package/.test-dist/src/extensions/image.js +296 -212
- package/.test-dist/src/extensions/index.js +1 -3
- package/.test-dist/src/extensions/maskOps.js +75 -20
- package/.test-dist/src/extensions/ruler.js +312 -215
- package/.test-dist/src/extensions/sceneLayoutModel.js +9 -3
- package/.test-dist/src/extensions/sceneVisibility.js +3 -10
- package/.test-dist/src/extensions/tracer.js +229 -58
- package/.test-dist/src/extensions/white-ink.js +139 -129
- package/.test-dist/src/services/CanvasService.js +888 -126
- package/.test-dist/src/services/index.js +1 -0
- package/.test-dist/src/services/visibility.js +54 -0
- package/.test-dist/tests/run.js +58 -4
- package/CHANGELOG.md +12 -0
- package/dist/index.d.mts +377 -82
- package/dist/index.d.ts +377 -82
- package/dist/index.js +3920 -2178
- package/dist/index.mjs +3992 -2247
- package/package.json +1 -1
- package/src/extensions/background.ts +631 -145
- package/src/extensions/dieline.ts +280 -187
- package/src/extensions/dielineShape.ts +109 -0
- package/src/extensions/feature.ts +485 -366
- package/src/extensions/film.ts +152 -76
- package/src/extensions/geometry.ts +203 -104
- package/src/extensions/image.ts +319 -238
- package/src/extensions/index.ts +0 -1
- package/src/extensions/ruler.ts +481 -268
- package/src/extensions/sceneLayoutModel.ts +18 -6
- package/src/extensions/white-ink.ts +157 -171
- package/src/services/CanvasService.ts +1126 -140
- package/src/services/index.ts +1 -0
- package/src/services/renderSpec.ts +69 -4
- package/src/services/visibility.ts +78 -0
- package/tests/run.ts +139 -4
- package/.test-dist/src/CanvasService.js +0 -249
- package/.test-dist/src/ViewportSystem.js +0 -75
- package/.test-dist/src/background.js +0 -203
- package/.test-dist/src/bridgeSelection.js +0 -20
- package/.test-dist/src/constraints.js +0 -237
- package/.test-dist/src/dieline.js +0 -818
- package/.test-dist/src/edgeScale.js +0 -12
- package/.test-dist/src/feature.js +0 -826
- package/.test-dist/src/featureComplete.js +0 -32
- package/.test-dist/src/film.js +0 -167
- package/.test-dist/src/geometry.js +0 -506
- package/.test-dist/src/image.js +0 -1250
- package/.test-dist/src/maskOps.js +0 -270
- package/.test-dist/src/mirror.js +0 -104
- package/.test-dist/src/renderSpec.js +0 -2
- package/.test-dist/src/ruler.js +0 -343
- package/.test-dist/src/sceneLayout.js +0 -99
- package/.test-dist/src/sceneLayoutModel.js +0 -196
- package/.test-dist/src/sceneView.js +0 -40
- package/.test-dist/src/sceneVisibility.js +0 -42
- package/.test-dist/src/size.js +0 -332
- package/.test-dist/src/tracer.js +0 -544
- package/.test-dist/src/white-ink.js +0 -829
- package/.test-dist/src/wrappedOffsets.js +0 -33
- package/src/extensions/sceneVisibility.ts +0 -71
|
@@ -2,6 +2,13 @@ import type { ConfigurationService } from "@pooder/core";
|
|
|
2
2
|
import type { CanvasService } from "../services";
|
|
3
3
|
import { Coordinate, Unit } from "../coordinate";
|
|
4
4
|
import { parseLengthToMm } from "../units";
|
|
5
|
+
import {
|
|
6
|
+
DEFAULT_DIELINE_SHAPE,
|
|
7
|
+
DEFAULT_DIELINE_SHAPE_STYLE,
|
|
8
|
+
normalizeShapeStyle,
|
|
9
|
+
normalizeDielineShape,
|
|
10
|
+
} from "./dielineShape";
|
|
11
|
+
import type { DielineShape, DielineShapeStyle } from "./dielineShape";
|
|
5
12
|
|
|
6
13
|
export type SizeConstraintMode = "free" | "lockAspect" | "equal";
|
|
7
14
|
export type CutMode = "trim" | "outset" | "inset";
|
|
@@ -45,9 +52,9 @@ export interface SceneLayoutSnapshot {
|
|
|
45
52
|
}
|
|
46
53
|
|
|
47
54
|
export interface SceneGeometrySnapshot {
|
|
48
|
-
shape:
|
|
49
|
-
|
|
50
|
-
|
|
55
|
+
shape: DielineShape;
|
|
56
|
+
shapeStyle: DielineShapeStyle;
|
|
57
|
+
unit: "px";
|
|
51
58
|
x: number;
|
|
52
59
|
y: number;
|
|
53
60
|
width: number;
|
|
@@ -331,11 +338,16 @@ export function buildSceneGeometry(
|
|
|
331
338
|
const sourceHeight = Number(
|
|
332
339
|
configService.get("dieline.customSourceHeightPx", 0),
|
|
333
340
|
);
|
|
341
|
+
const shapeStyle = normalizeShapeStyle(
|
|
342
|
+
configService.get("dieline.shapeStyle", DEFAULT_DIELINE_SHAPE_STYLE),
|
|
343
|
+
);
|
|
334
344
|
|
|
335
345
|
return {
|
|
336
|
-
shape:
|
|
337
|
-
|
|
338
|
-
|
|
346
|
+
shape: normalizeDielineShape(
|
|
347
|
+
configService.get("dieline.shape", DEFAULT_DIELINE_SHAPE),
|
|
348
|
+
),
|
|
349
|
+
shapeStyle,
|
|
350
|
+
unit: "px",
|
|
339
351
|
x: layout.trimRect.centerX,
|
|
340
352
|
y: layout.trimRect.centerY,
|
|
341
353
|
width: layout.trimRect.width,
|
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
ToolSessionService,
|
|
9
9
|
WorkbenchService,
|
|
10
10
|
} from "@pooder/core";
|
|
11
|
-
import { CanvasService, RenderObjectSpec } from "../services";
|
|
11
|
+
import { CanvasService, RenderLayoutRect, RenderObjectSpec } from "../services";
|
|
12
12
|
import { computeSceneLayout, readSizeState } from "./sceneLayoutModel";
|
|
13
13
|
|
|
14
14
|
export interface WhiteInkItem {
|
|
@@ -88,7 +88,6 @@ const WHITE_INK_OBJECT_LAYER_ID = "white-ink.user";
|
|
|
88
88
|
const WHITE_INK_COVER_LAYER_ID = "white-ink.cover";
|
|
89
89
|
const WHITE_INK_OVERLAY_LAYER_ID = "white-ink.overlay";
|
|
90
90
|
const IMAGE_OBJECT_LAYER_ID = "image.user";
|
|
91
|
-
const IMAGE_OVERLAY_LAYER_ID = "image-overlay";
|
|
92
91
|
|
|
93
92
|
const WHITE_INK_DEBUG_KEY = "whiteInk.debug";
|
|
94
93
|
const WHITE_INK_PREVIEW_IMAGE_VISIBLE_KEY = "whiteInk.previewImageVisible";
|
|
@@ -125,6 +124,10 @@ export class WhiteInkTool implements Extension {
|
|
|
125
124
|
private previewImageVisible = true;
|
|
126
125
|
private renderSeq = 0;
|
|
127
126
|
private dirtyTrackerDisposable?: { dispose(): void };
|
|
127
|
+
private whiteSpecs: RenderObjectSpec[] = [];
|
|
128
|
+
private coverSpecs: RenderObjectSpec[] = [];
|
|
129
|
+
private overlaySpecs: RenderObjectSpec[] = [];
|
|
130
|
+
private renderProducerDisposable?: { dispose: () => void };
|
|
128
131
|
|
|
129
132
|
activate(context: ExtensionContext) {
|
|
130
133
|
this.context = context;
|
|
@@ -133,6 +136,33 @@ export class WhiteInkTool implements Extension {
|
|
|
133
136
|
console.warn("CanvasService not found for WhiteInkTool");
|
|
134
137
|
return;
|
|
135
138
|
}
|
|
139
|
+
this.renderProducerDisposable?.dispose();
|
|
140
|
+
this.renderProducerDisposable = this.canvasService.registerRenderProducer(
|
|
141
|
+
this.id,
|
|
142
|
+
() => ({
|
|
143
|
+
passes: [
|
|
144
|
+
{
|
|
145
|
+
id: WHITE_INK_COVER_LAYER_ID,
|
|
146
|
+
stack: 220,
|
|
147
|
+
order: 0,
|
|
148
|
+
objects: this.coverSpecs,
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
id: WHITE_INK_OBJECT_LAYER_ID,
|
|
152
|
+
stack: 221,
|
|
153
|
+
order: 0,
|
|
154
|
+
objects: this.whiteSpecs,
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
id: WHITE_INK_OVERLAY_LAYER_ID,
|
|
158
|
+
stack: 790,
|
|
159
|
+
order: 0,
|
|
160
|
+
objects: this.overlaySpecs,
|
|
161
|
+
},
|
|
162
|
+
],
|
|
163
|
+
}),
|
|
164
|
+
{ priority: 260 },
|
|
165
|
+
);
|
|
136
166
|
|
|
137
167
|
context.eventBus.on("tool:activated", this.onToolActivated);
|
|
138
168
|
context.eventBus.on("scene:layout:change", this.onSceneLayoutChanged);
|
|
@@ -222,7 +252,11 @@ export class WhiteInkTool implements Extension {
|
|
|
222
252
|
this.dirtyTrackerDisposable?.dispose();
|
|
223
253
|
this.dirtyTrackerDisposable = undefined;
|
|
224
254
|
this.clearRenderedWhiteInks();
|
|
225
|
-
this.
|
|
255
|
+
this.renderProducerDisposable?.dispose();
|
|
256
|
+
this.renderProducerDisposable = undefined;
|
|
257
|
+
if (this.canvasService) {
|
|
258
|
+
void this.canvasService.flushRenderFromProducers();
|
|
259
|
+
}
|
|
226
260
|
|
|
227
261
|
this.canvasService = undefined;
|
|
228
262
|
this.context = undefined;
|
|
@@ -747,11 +781,21 @@ export class WhiteInkTool implements Extension {
|
|
|
747
781
|
return { left: 0, top: 0, width: 0, height: 0 };
|
|
748
782
|
}
|
|
749
783
|
|
|
750
|
-
return {
|
|
784
|
+
return this.canvasService.toSceneRect({
|
|
751
785
|
left: layout.cutRect.left,
|
|
752
786
|
top: layout.cutRect.top,
|
|
753
787
|
width: layout.cutRect.width,
|
|
754
788
|
height: layout.cutRect.height,
|
|
789
|
+
});
|
|
790
|
+
}
|
|
791
|
+
|
|
792
|
+
private toLayoutSceneRect(rect: FrameRect): RenderLayoutRect {
|
|
793
|
+
return {
|
|
794
|
+
left: rect.left,
|
|
795
|
+
top: rect.top,
|
|
796
|
+
width: rect.width,
|
|
797
|
+
height: rect.height,
|
|
798
|
+
space: "scene",
|
|
755
799
|
};
|
|
756
800
|
}
|
|
757
801
|
|
|
@@ -786,15 +830,23 @@ export class WhiteInkTool implements Extension {
|
|
|
786
830
|
const width = Number(obj?.width || 0);
|
|
787
831
|
const height = Number(obj?.height || 0);
|
|
788
832
|
this.rememberSourceSize(src, { width, height });
|
|
833
|
+
const sceneScale = this.canvasService?.getSceneScale() || 1;
|
|
834
|
+
const leftScreen = Number.isFinite(obj?.left) ? Number(obj.left) : 0;
|
|
835
|
+
const topScreen = Number.isFinite(obj?.top) ? Number(obj.top) : 0;
|
|
836
|
+
const scenePoint = this.canvasService
|
|
837
|
+
? this.canvasService.toScenePoint({ x: leftScreen, y: topScreen })
|
|
838
|
+
: { x: leftScreen, y: topScreen };
|
|
789
839
|
|
|
790
840
|
return {
|
|
791
841
|
id: String(obj?.data?.id || "image"),
|
|
792
842
|
src,
|
|
793
843
|
element,
|
|
794
|
-
left:
|
|
795
|
-
top:
|
|
796
|
-
scaleX:
|
|
797
|
-
|
|
844
|
+
left: scenePoint.x,
|
|
845
|
+
top: scenePoint.y,
|
|
846
|
+
scaleX:
|
|
847
|
+
(Number.isFinite(obj?.scaleX) ? Number(obj.scaleX) : 1) / sceneScale,
|
|
848
|
+
scaleY:
|
|
849
|
+
(Number.isFinite(obj?.scaleY) ? Number(obj.scaleY) : 1) / sceneScale,
|
|
798
850
|
angle: Number.isFinite(obj?.angle) ? Number(obj.angle) : 0,
|
|
799
851
|
originX: typeof obj?.originX === "string" ? obj.originX : "center",
|
|
800
852
|
originY: typeof obj?.originY === "string" ? obj.originY : "center",
|
|
@@ -864,7 +916,9 @@ export class WhiteInkTool implements Extension {
|
|
|
864
916
|
return Math.max(frameW / sourceW, frameH / sourceH);
|
|
865
917
|
}
|
|
866
918
|
|
|
867
|
-
private async ensureSourceSize(
|
|
919
|
+
private async ensureSourceSize(
|
|
920
|
+
sourceUrl: string,
|
|
921
|
+
): Promise<SourceSize | null> {
|
|
868
922
|
if (!sourceUrl) return null;
|
|
869
923
|
const cached = this.getSourceSize(sourceUrl);
|
|
870
924
|
if (cached) return cached;
|
|
@@ -1025,8 +1079,11 @@ export class WhiteInkTool implements Extension {
|
|
|
1025
1079
|
if (!this.isToolActive || !this.canvasService) return [];
|
|
1026
1080
|
if (frame.width <= 0 || frame.height <= 0) return [];
|
|
1027
1081
|
|
|
1028
|
-
const
|
|
1029
|
-
const
|
|
1082
|
+
const viewport = this.canvasService.getSceneViewportRect();
|
|
1083
|
+
const canvasW = viewport.width || 0;
|
|
1084
|
+
const canvasH = viewport.height || 0;
|
|
1085
|
+
const canvasLeft = viewport.left || 0;
|
|
1086
|
+
const canvasTop = viewport.top || 0;
|
|
1030
1087
|
const strokeColor =
|
|
1031
1088
|
this.getConfig<string>("image.frame.strokeColor", "#808080") || "#808080";
|
|
1032
1089
|
const strokeWidthRaw = Number(
|
|
@@ -1048,23 +1105,44 @@ export class WhiteInkTool implements Extension {
|
|
|
1048
1105
|
const dashLength = Number.isFinite(dashLengthRaw)
|
|
1049
1106
|
? Math.max(1, dashLengthRaw)
|
|
1050
1107
|
: 8;
|
|
1108
|
+
const strokeWidthScene = this.canvasService.toSceneLength(strokeWidth);
|
|
1109
|
+
const dashLengthScene = this.canvasService.toSceneLength(dashLength);
|
|
1051
1110
|
|
|
1052
|
-
const frameLeft = Math.max(
|
|
1053
|
-
|
|
1111
|
+
const frameLeft = Math.max(
|
|
1112
|
+
canvasLeft,
|
|
1113
|
+
Math.min(canvasLeft + canvasW, frame.left),
|
|
1114
|
+
);
|
|
1115
|
+
const frameTop = Math.max(
|
|
1116
|
+
canvasTop,
|
|
1117
|
+
Math.min(canvasTop + canvasH, frame.top),
|
|
1118
|
+
);
|
|
1054
1119
|
const frameRight = Math.max(
|
|
1055
1120
|
frameLeft,
|
|
1056
|
-
Math.min(canvasW, frame.left + frame.width),
|
|
1121
|
+
Math.min(canvasLeft + canvasW, frame.left + frame.width),
|
|
1057
1122
|
);
|
|
1058
1123
|
const frameBottom = Math.max(
|
|
1059
1124
|
frameTop,
|
|
1060
|
-
Math.min(canvasH, frame.top + frame.height),
|
|
1125
|
+
Math.min(canvasTop + canvasH, frame.top + frame.height),
|
|
1061
1126
|
);
|
|
1062
1127
|
const visibleFrameH = Math.max(0, frameBottom - frameTop);
|
|
1063
1128
|
|
|
1064
|
-
const topH = frameTop;
|
|
1065
|
-
const bottomH = Math.max(0, canvasH - frameBottom);
|
|
1066
|
-
const leftW = frameLeft;
|
|
1067
|
-
const rightW = Math.max(0, canvasW - frameRight);
|
|
1129
|
+
const topH = Math.max(0, frameTop - canvasTop);
|
|
1130
|
+
const bottomH = Math.max(0, canvasTop + canvasH - frameBottom);
|
|
1131
|
+
const leftW = Math.max(0, frameLeft - canvasLeft);
|
|
1132
|
+
const rightW = Math.max(0, canvasLeft + canvasW - frameRight);
|
|
1133
|
+
const viewportRect = this.toLayoutSceneRect({
|
|
1134
|
+
left: canvasLeft,
|
|
1135
|
+
top: canvasTop,
|
|
1136
|
+
width: canvasW,
|
|
1137
|
+
height: canvasH,
|
|
1138
|
+
});
|
|
1139
|
+
const visibleFrameBandRect = this.toLayoutSceneRect({
|
|
1140
|
+
left: canvasLeft,
|
|
1141
|
+
top: frameTop,
|
|
1142
|
+
width: canvasW,
|
|
1143
|
+
height: visibleFrameH,
|
|
1144
|
+
});
|
|
1145
|
+
const frameRect = this.toLayoutSceneRect(frame);
|
|
1068
1146
|
|
|
1069
1147
|
const maskSpecs: RenderObjectSpec[] = [
|
|
1070
1148
|
{
|
|
@@ -1075,13 +1153,17 @@ export class WhiteInkTool implements Extension {
|
|
|
1075
1153
|
layerId: WHITE_INK_OVERLAY_LAYER_ID,
|
|
1076
1154
|
type: "white-ink-mask",
|
|
1077
1155
|
},
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1156
|
+
layout: {
|
|
1157
|
+
reference: "custom",
|
|
1158
|
+
referenceRect: viewportRect,
|
|
1159
|
+
alignX: "start",
|
|
1160
|
+
alignY: "start",
|
|
1161
|
+
width: "100%",
|
|
1082
1162
|
height: topH,
|
|
1083
|
-
|
|
1084
|
-
|
|
1163
|
+
},
|
|
1164
|
+
props: {
|
|
1165
|
+
originX: "left",
|
|
1166
|
+
originY: "top",
|
|
1085
1167
|
fill: outerBackground,
|
|
1086
1168
|
selectable: false,
|
|
1087
1169
|
evented: false,
|
|
@@ -1096,13 +1178,17 @@ export class WhiteInkTool implements Extension {
|
|
|
1096
1178
|
layerId: WHITE_INK_OVERLAY_LAYER_ID,
|
|
1097
1179
|
type: "white-ink-mask",
|
|
1098
1180
|
},
|
|
1099
|
-
|
|
1100
|
-
|
|
1101
|
-
|
|
1102
|
-
|
|
1181
|
+
layout: {
|
|
1182
|
+
reference: "custom",
|
|
1183
|
+
referenceRect: viewportRect,
|
|
1184
|
+
alignX: "start",
|
|
1185
|
+
alignY: "end",
|
|
1186
|
+
width: "100%",
|
|
1103
1187
|
height: bottomH,
|
|
1104
|
-
|
|
1105
|
-
|
|
1188
|
+
},
|
|
1189
|
+
props: {
|
|
1190
|
+
originX: "left",
|
|
1191
|
+
originY: "top",
|
|
1106
1192
|
fill: outerBackground,
|
|
1107
1193
|
selectable: false,
|
|
1108
1194
|
evented: false,
|
|
@@ -1117,13 +1203,17 @@ export class WhiteInkTool implements Extension {
|
|
|
1117
1203
|
layerId: WHITE_INK_OVERLAY_LAYER_ID,
|
|
1118
1204
|
type: "white-ink-mask",
|
|
1119
1205
|
},
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
|
|
1206
|
+
layout: {
|
|
1207
|
+
reference: "custom",
|
|
1208
|
+
referenceRect: visibleFrameBandRect,
|
|
1209
|
+
alignX: "start",
|
|
1210
|
+
alignY: "start",
|
|
1123
1211
|
width: leftW,
|
|
1124
|
-
height:
|
|
1125
|
-
|
|
1126
|
-
|
|
1212
|
+
height: "100%",
|
|
1213
|
+
},
|
|
1214
|
+
props: {
|
|
1215
|
+
originX: "left",
|
|
1216
|
+
originY: "top",
|
|
1127
1217
|
fill: outerBackground,
|
|
1128
1218
|
selectable: false,
|
|
1129
1219
|
evented: false,
|
|
@@ -1138,13 +1228,17 @@ export class WhiteInkTool implements Extension {
|
|
|
1138
1228
|
layerId: WHITE_INK_OVERLAY_LAYER_ID,
|
|
1139
1229
|
type: "white-ink-mask",
|
|
1140
1230
|
},
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1231
|
+
layout: {
|
|
1232
|
+
reference: "custom",
|
|
1233
|
+
referenceRect: visibleFrameBandRect,
|
|
1234
|
+
alignX: "end",
|
|
1235
|
+
alignY: "start",
|
|
1144
1236
|
width: rightW,
|
|
1145
|
-
height:
|
|
1146
|
-
|
|
1147
|
-
|
|
1237
|
+
height: "100%",
|
|
1238
|
+
},
|
|
1239
|
+
props: {
|
|
1240
|
+
originX: "left",
|
|
1241
|
+
originY: "top",
|
|
1148
1242
|
fill: outerBackground,
|
|
1149
1243
|
selectable: false,
|
|
1150
1244
|
evented: false,
|
|
@@ -1163,17 +1257,21 @@ export class WhiteInkTool implements Extension {
|
|
|
1163
1257
|
layerId: WHITE_INK_OVERLAY_LAYER_ID,
|
|
1164
1258
|
type: "white-ink-frame",
|
|
1165
1259
|
},
|
|
1260
|
+
layout: {
|
|
1261
|
+
reference: "custom",
|
|
1262
|
+
referenceRect: frameRect,
|
|
1263
|
+
alignX: "start",
|
|
1264
|
+
alignY: "start",
|
|
1265
|
+
width: "100%",
|
|
1266
|
+
height: "100%",
|
|
1267
|
+
},
|
|
1166
1268
|
props: {
|
|
1167
|
-
|
|
1168
|
-
|
|
1169
|
-
width: frame.width,
|
|
1170
|
-
height: frame.height,
|
|
1171
|
-
originX: "center",
|
|
1172
|
-
originY: "center",
|
|
1269
|
+
originX: "left",
|
|
1270
|
+
originY: "top",
|
|
1173
1271
|
fill: innerBackground,
|
|
1174
1272
|
stroke: strokeColor,
|
|
1175
|
-
strokeWidth,
|
|
1176
|
-
strokeDashArray: [
|
|
1273
|
+
strokeWidth: strokeWidthScene,
|
|
1274
|
+
strokeDashArray: [dashLengthScene, dashLengthScene],
|
|
1177
1275
|
selectable: false,
|
|
1178
1276
|
evented: false,
|
|
1179
1277
|
excludeFromExport: true,
|
|
@@ -1181,25 +1279,6 @@ export class WhiteInkTool implements Extension {
|
|
|
1181
1279
|
},
|
|
1182
1280
|
];
|
|
1183
1281
|
}
|
|
1184
|
-
|
|
1185
|
-
private applyImageVisibilityForWhiteInk(previewActive: boolean) {
|
|
1186
|
-
if (!this.canvasService) return;
|
|
1187
|
-
const visible = !previewActive;
|
|
1188
|
-
let changed = false;
|
|
1189
|
-
|
|
1190
|
-
this.canvasService.canvas.getObjects().forEach((obj: any) => {
|
|
1191
|
-
if (obj?.data?.layerId !== IMAGE_OBJECT_LAYER_ID) return;
|
|
1192
|
-
if (obj.visible === visible) return;
|
|
1193
|
-
obj.set({ visible });
|
|
1194
|
-
obj.setCoords?.();
|
|
1195
|
-
changed = true;
|
|
1196
|
-
});
|
|
1197
|
-
|
|
1198
|
-
if (changed) {
|
|
1199
|
-
this.canvasService.requestRenderAll();
|
|
1200
|
-
}
|
|
1201
|
-
}
|
|
1202
|
-
|
|
1203
1282
|
private resolveRenderItems(): WhiteInkItem[] {
|
|
1204
1283
|
if (this.isToolActive) {
|
|
1205
1284
|
return this.cloneItems(this.workingItems);
|
|
@@ -1232,93 +1311,12 @@ export class WhiteInkTool implements Extension {
|
|
|
1232
1311
|
};
|
|
1233
1312
|
}
|
|
1234
1313
|
|
|
1235
|
-
private resolveDefaultInsertIndex(objects: any[]): number {
|
|
1236
|
-
if (!this.canvasService) return 0;
|
|
1237
|
-
const backgroundLayer = this.canvasService.getLayer("background");
|
|
1238
|
-
if (!backgroundLayer) return 0;
|
|
1239
|
-
const bgIndex = objects.indexOf(backgroundLayer as any);
|
|
1240
|
-
if (bgIndex < 0) return 0;
|
|
1241
|
-
return bgIndex + 1;
|
|
1242
|
-
}
|
|
1243
|
-
|
|
1244
|
-
private syncZOrder() {
|
|
1245
|
-
if (!this.canvasService) return;
|
|
1246
|
-
const canvas = this.canvasService.canvas;
|
|
1247
|
-
|
|
1248
|
-
const whiteObjects = this.canvasService.getRootLayerObjects(
|
|
1249
|
-
WHITE_INK_OBJECT_LAYER_ID,
|
|
1250
|
-
) as any[];
|
|
1251
|
-
const coverObjects = this.canvasService.getRootLayerObjects(
|
|
1252
|
-
WHITE_INK_COVER_LAYER_ID,
|
|
1253
|
-
) as any[];
|
|
1254
|
-
const frameObjects = this.canvasService.getRootLayerObjects(
|
|
1255
|
-
WHITE_INK_OVERLAY_LAYER_ID,
|
|
1256
|
-
) as any[];
|
|
1257
|
-
|
|
1258
|
-
const currentObjects = canvas.getObjects();
|
|
1259
|
-
const imageIndexes = currentObjects
|
|
1260
|
-
.map((obj: any, index: number) =>
|
|
1261
|
-
obj?.data?.layerId === IMAGE_OBJECT_LAYER_ID ? index : -1,
|
|
1262
|
-
)
|
|
1263
|
-
.filter((index: number) => index >= 0);
|
|
1264
|
-
|
|
1265
|
-
let whiteInsertIndex = imageIndexes.length
|
|
1266
|
-
? Math.min(...imageIndexes)
|
|
1267
|
-
: this.resolveDefaultInsertIndex(currentObjects);
|
|
1268
|
-
|
|
1269
|
-
whiteObjects.forEach((obj) => {
|
|
1270
|
-
canvas.moveObjectTo(obj, whiteInsertIndex);
|
|
1271
|
-
whiteInsertIndex += 1;
|
|
1272
|
-
});
|
|
1273
|
-
|
|
1274
|
-
const afterWhiteObjects = canvas.getObjects();
|
|
1275
|
-
const afterImageIndexes = afterWhiteObjects
|
|
1276
|
-
.map((obj: any, index: number) =>
|
|
1277
|
-
obj?.data?.layerId === IMAGE_OBJECT_LAYER_ID ? index : -1,
|
|
1278
|
-
)
|
|
1279
|
-
.filter((index: number) => index >= 0);
|
|
1280
|
-
|
|
1281
|
-
let coverInsertIndex = afterImageIndexes.length
|
|
1282
|
-
? Math.max(...afterImageIndexes) + 1
|
|
1283
|
-
: whiteInsertIndex;
|
|
1284
|
-
|
|
1285
|
-
coverObjects.forEach((obj) => {
|
|
1286
|
-
canvas.moveObjectTo(obj, coverInsertIndex);
|
|
1287
|
-
coverInsertIndex += 1;
|
|
1288
|
-
});
|
|
1289
|
-
|
|
1290
|
-
frameObjects.forEach((obj) => canvas.bringObjectToFront(obj));
|
|
1291
|
-
|
|
1292
|
-
canvas
|
|
1293
|
-
.getObjects()
|
|
1294
|
-
.filter((obj: any) => obj?.data?.layerId === IMAGE_OVERLAY_LAYER_ID)
|
|
1295
|
-
.forEach((obj: any) => canvas.bringObjectToFront(obj));
|
|
1296
|
-
|
|
1297
|
-
const dielineOverlay = this.canvasService.getLayer("dieline-overlay");
|
|
1298
|
-
if (dielineOverlay) {
|
|
1299
|
-
canvas.bringObjectToFront(dielineOverlay as any);
|
|
1300
|
-
}
|
|
1301
|
-
|
|
1302
|
-
const rulerOverlay = this.canvasService.getLayer("ruler-overlay");
|
|
1303
|
-
if (rulerOverlay) {
|
|
1304
|
-
canvas.bringObjectToFront(rulerOverlay as any);
|
|
1305
|
-
}
|
|
1306
|
-
}
|
|
1307
|
-
|
|
1308
1314
|
private clearRenderedWhiteInks() {
|
|
1309
1315
|
if (!this.canvasService) return;
|
|
1310
|
-
|
|
1311
|
-
|
|
1312
|
-
|
|
1313
|
-
);
|
|
1314
|
-
void this.canvasService.applyObjectSpecsToRootLayer(
|
|
1315
|
-
WHITE_INK_COVER_LAYER_ID,
|
|
1316
|
-
[],
|
|
1317
|
-
);
|
|
1318
|
-
void this.canvasService.applyObjectSpecsToRootLayer(
|
|
1319
|
-
WHITE_INK_OVERLAY_LAYER_ID,
|
|
1320
|
-
[],
|
|
1321
|
-
);
|
|
1316
|
+
this.whiteSpecs = [];
|
|
1317
|
+
this.coverSpecs = [];
|
|
1318
|
+
this.overlaySpecs = [];
|
|
1319
|
+
this.canvasService.requestRenderFromProducers();
|
|
1322
1320
|
}
|
|
1323
1321
|
|
|
1324
1322
|
private purgeSourceCaches(item?: WhiteInkItem) {
|
|
@@ -1349,7 +1347,6 @@ export class WhiteInkTool implements Extension {
|
|
|
1349
1347
|
const seq = ++this.renderSeq;
|
|
1350
1348
|
|
|
1351
1349
|
const previewActive = this.isPreviewActive();
|
|
1352
|
-
this.applyImageVisibilityForWhiteInk(previewActive);
|
|
1353
1350
|
|
|
1354
1351
|
const frame = this.getFrameRect();
|
|
1355
1352
|
const frameSpecs = this.buildFrameSpecs(frame);
|
|
@@ -1397,25 +1394,15 @@ export class WhiteInkTool implements Extension {
|
|
|
1397
1394
|
}
|
|
1398
1395
|
}
|
|
1399
1396
|
|
|
1400
|
-
|
|
1401
|
-
WHITE_INK_OBJECT_LAYER_ID,
|
|
1402
|
-
whiteSpecs,
|
|
1403
|
-
);
|
|
1397
|
+
this.whiteSpecs = whiteSpecs;
|
|
1404
1398
|
if (seq !== this.renderSeq) return;
|
|
1405
1399
|
|
|
1406
|
-
|
|
1407
|
-
WHITE_INK_COVER_LAYER_ID,
|
|
1408
|
-
coverSpecs,
|
|
1409
|
-
);
|
|
1400
|
+
this.coverSpecs = coverSpecs;
|
|
1410
1401
|
if (seq !== this.renderSeq) return;
|
|
1411
1402
|
|
|
1412
|
-
|
|
1413
|
-
|
|
1414
|
-
frameSpecs,
|
|
1415
|
-
);
|
|
1403
|
+
this.overlaySpecs = frameSpecs;
|
|
1404
|
+
await this.canvasService.flushRenderFromProducers();
|
|
1416
1405
|
if (seq !== this.renderSeq) return;
|
|
1417
|
-
|
|
1418
|
-
this.syncZOrder();
|
|
1419
1406
|
this.canvasService.requestRenderAll();
|
|
1420
1407
|
}
|
|
1421
1408
|
|
|
@@ -1522,4 +1509,3 @@ export class WhiteInkTool implements Extension {
|
|
|
1522
1509
|
});
|
|
1523
1510
|
}
|
|
1524
1511
|
}
|
|
1525
|
-
|