@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.
Files changed (65) hide show
  1. package/.test-dist/src/extensions/background.js +475 -131
  2. package/.test-dist/src/extensions/dieline.js +283 -180
  3. package/.test-dist/src/extensions/dielineShape.js +66 -0
  4. package/.test-dist/src/extensions/feature.js +388 -303
  5. package/.test-dist/src/extensions/film.js +133 -74
  6. package/.test-dist/src/extensions/geometry.js +120 -56
  7. package/.test-dist/src/extensions/image.js +296 -212
  8. package/.test-dist/src/extensions/index.js +1 -3
  9. package/.test-dist/src/extensions/maskOps.js +75 -20
  10. package/.test-dist/src/extensions/ruler.js +312 -215
  11. package/.test-dist/src/extensions/sceneLayoutModel.js +9 -3
  12. package/.test-dist/src/extensions/sceneVisibility.js +3 -10
  13. package/.test-dist/src/extensions/tracer.js +229 -58
  14. package/.test-dist/src/extensions/white-ink.js +139 -129
  15. package/.test-dist/src/services/CanvasService.js +888 -126
  16. package/.test-dist/src/services/index.js +1 -0
  17. package/.test-dist/src/services/visibility.js +54 -0
  18. package/.test-dist/tests/run.js +58 -4
  19. package/CHANGELOG.md +12 -0
  20. package/dist/index.d.mts +377 -82
  21. package/dist/index.d.ts +377 -82
  22. package/dist/index.js +3920 -2178
  23. package/dist/index.mjs +3992 -2247
  24. package/package.json +1 -1
  25. package/src/extensions/background.ts +631 -145
  26. package/src/extensions/dieline.ts +280 -187
  27. package/src/extensions/dielineShape.ts +109 -0
  28. package/src/extensions/feature.ts +485 -366
  29. package/src/extensions/film.ts +152 -76
  30. package/src/extensions/geometry.ts +203 -104
  31. package/src/extensions/image.ts +319 -238
  32. package/src/extensions/index.ts +0 -1
  33. package/src/extensions/ruler.ts +481 -268
  34. package/src/extensions/sceneLayoutModel.ts +18 -6
  35. package/src/extensions/white-ink.ts +157 -171
  36. package/src/services/CanvasService.ts +1126 -140
  37. package/src/services/index.ts +1 -0
  38. package/src/services/renderSpec.ts +69 -4
  39. package/src/services/visibility.ts +78 -0
  40. package/tests/run.ts +139 -4
  41. package/.test-dist/src/CanvasService.js +0 -249
  42. package/.test-dist/src/ViewportSystem.js +0 -75
  43. package/.test-dist/src/background.js +0 -203
  44. package/.test-dist/src/bridgeSelection.js +0 -20
  45. package/.test-dist/src/constraints.js +0 -237
  46. package/.test-dist/src/dieline.js +0 -818
  47. package/.test-dist/src/edgeScale.js +0 -12
  48. package/.test-dist/src/feature.js +0 -826
  49. package/.test-dist/src/featureComplete.js +0 -32
  50. package/.test-dist/src/film.js +0 -167
  51. package/.test-dist/src/geometry.js +0 -506
  52. package/.test-dist/src/image.js +0 -1250
  53. package/.test-dist/src/maskOps.js +0 -270
  54. package/.test-dist/src/mirror.js +0 -104
  55. package/.test-dist/src/renderSpec.js +0 -2
  56. package/.test-dist/src/ruler.js +0 -343
  57. package/.test-dist/src/sceneLayout.js +0 -99
  58. package/.test-dist/src/sceneLayoutModel.js +0 -196
  59. package/.test-dist/src/sceneView.js +0 -40
  60. package/.test-dist/src/sceneVisibility.js +0 -42
  61. package/.test-dist/src/size.js +0 -332
  62. package/.test-dist/src/tracer.js +0 -544
  63. package/.test-dist/src/white-ink.js +0 -829
  64. package/.test-dist/src/wrappedOffsets.js +0 -33
  65. 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: "rect" | "circle" | "ellipse" | "custom";
49
- unit: "mm";
50
- displayUnit: Unit;
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: configService.get("dieline.shape", "rect"),
337
- unit: "mm",
338
- displayUnit: normalizeUnit(configService.get("size.unit", "mm")),
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.applyImageVisibilityForWhiteInk(false);
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: Number.isFinite(obj?.left) ? Number(obj.left) : 0,
795
- top: Number.isFinite(obj?.top) ? Number(obj.top) : 0,
796
- scaleX: Number.isFinite(obj?.scaleX) ? Number(obj.scaleX) : 1,
797
- scaleY: Number.isFinite(obj?.scaleY) ? Number(obj.scaleY) : 1,
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(sourceUrl: string): Promise<SourceSize | null> {
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 canvasW = this.canvasService.canvas.width || 0;
1029
- const canvasH = this.canvasService.canvas.height || 0;
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(0, Math.min(canvasW, frame.left));
1053
- const frameTop = Math.max(0, Math.min(canvasH, frame.top));
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
- props: {
1079
- left: canvasW / 2,
1080
- top: topH / 2,
1081
- width: canvasW,
1156
+ layout: {
1157
+ reference: "custom",
1158
+ referenceRect: viewportRect,
1159
+ alignX: "start",
1160
+ alignY: "start",
1161
+ width: "100%",
1082
1162
  height: topH,
1083
- originX: "center",
1084
- originY: "center",
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
- props: {
1100
- left: canvasW / 2,
1101
- top: frameBottom + bottomH / 2,
1102
- width: canvasW,
1181
+ layout: {
1182
+ reference: "custom",
1183
+ referenceRect: viewportRect,
1184
+ alignX: "start",
1185
+ alignY: "end",
1186
+ width: "100%",
1103
1187
  height: bottomH,
1104
- originX: "center",
1105
- originY: "center",
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
- props: {
1121
- left: leftW / 2,
1122
- top: frameTop + visibleFrameH / 2,
1206
+ layout: {
1207
+ reference: "custom",
1208
+ referenceRect: visibleFrameBandRect,
1209
+ alignX: "start",
1210
+ alignY: "start",
1123
1211
  width: leftW,
1124
- height: visibleFrameH,
1125
- originX: "center",
1126
- originY: "center",
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
- props: {
1142
- left: frameRight + rightW / 2,
1143
- top: frameTop + visibleFrameH / 2,
1231
+ layout: {
1232
+ reference: "custom",
1233
+ referenceRect: visibleFrameBandRect,
1234
+ alignX: "end",
1235
+ alignY: "start",
1144
1236
  width: rightW,
1145
- height: visibleFrameH,
1146
- originX: "center",
1147
- originY: "center",
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
- left: frame.left + frame.width / 2,
1168
- top: frame.top + frame.height / 2,
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: [dashLength, dashLength],
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
- void this.canvasService.applyObjectSpecsToRootLayer(
1311
- WHITE_INK_OBJECT_LAYER_ID,
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
- await this.canvasService.applyObjectSpecsToRootLayer(
1401
- WHITE_INK_OBJECT_LAYER_ID,
1402
- whiteSpecs,
1403
- );
1397
+ this.whiteSpecs = whiteSpecs;
1404
1398
  if (seq !== this.renderSeq) return;
1405
1399
 
1406
- await this.canvasService.applyObjectSpecsToRootLayer(
1407
- WHITE_INK_COVER_LAYER_ID,
1408
- coverSpecs,
1409
- );
1400
+ this.coverSpecs = coverSpecs;
1410
1401
  if (seq !== this.renderSeq) return;
1411
1402
 
1412
- await this.canvasService.applyObjectSpecsToRootLayer(
1413
- WHITE_INK_OVERLAY_LAYER_ID,
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
-