@idraw/core 0.4.0-beta.22 → 0.4.0-beta.24

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.
@@ -656,23 +656,23 @@ var __privateMethod = (obj, member, method) => {
656
656
  const ctx = canvas.getContext("2d");
657
657
  if (createCustomContext2D) {
658
658
  const viewContext = createCustomContext2D(ctxOpts);
659
- const helperContext = createCustomContext2D(ctxOpts);
660
- const underContext = createCustomContext2D(ctxOpts);
659
+ const overlayContext = createCustomContext2D(ctxOpts);
660
+ const underlayContext = createCustomContext2D(ctxOpts);
661
661
  const boardContext = createContext2D(Object.assign({ ctx }, ctxOpts));
662
662
  const drawView = () => {
663
663
  const { width: w2, height: h2 } = viewContext.$getSize();
664
664
  boardContext.clearRect(0, 0, w2, h2);
665
- boardContext.drawImage(underContext.canvas, 0, 0, w2, h2);
665
+ boardContext.drawImage(underlayContext.canvas, 0, 0, w2, h2);
666
666
  boardContext.drawImage(viewContext.canvas, 0, 0, w2, h2);
667
- boardContext.drawImage(helperContext.canvas, 0, 0, w2, h2);
668
- underContext.clearRect(0, 0, w2, h2);
667
+ boardContext.drawImage(overlayContext.canvas, 0, 0, w2, h2);
668
+ underlayContext.clearRect(0, 0, w2, h2);
669
669
  viewContext.clearRect(0, 0, w2, h2);
670
- helperContext.clearRect(0, 0, w2, h2);
670
+ overlayContext.clearRect(0, 0, w2, h2);
671
671
  };
672
672
  const content = {
673
- underContext,
673
+ underlayContext,
674
674
  viewContext,
675
- helperContext,
675
+ overlayContext,
676
676
  boardContext,
677
677
  drawView
678
678
  };
@@ -680,45 +680,45 @@ var __privateMethod = (obj, member, method) => {
680
680
  }
681
681
  if (offscreen === true) {
682
682
  const viewContext = createOffscreenContext2D(ctxOpts);
683
- const helperContext = createOffscreenContext2D(ctxOpts);
684
- const underContext = createOffscreenContext2D(ctxOpts);
683
+ const overlayContext = createOffscreenContext2D(ctxOpts);
684
+ const underlayContext = createOffscreenContext2D(ctxOpts);
685
685
  const boardContext = createContext2D(Object.assign({ ctx }, ctxOpts));
686
686
  const drawView = () => {
687
687
  const { width: w2, height: h2 } = viewContext.$getSize();
688
688
  boardContext.clearRect(0, 0, w2, h2);
689
- boardContext.drawImage(underContext.canvas, 0, 0, w2, h2);
689
+ boardContext.drawImage(underlayContext.canvas, 0, 0, w2, h2);
690
690
  boardContext.drawImage(viewContext.canvas, 0, 0, w2, h2);
691
- boardContext.drawImage(helperContext.canvas, 0, 0, w2, h2);
692
- underContext.clearRect(0, 0, w2, h2);
691
+ boardContext.drawImage(overlayContext.canvas, 0, 0, w2, h2);
692
+ underlayContext.clearRect(0, 0, w2, h2);
693
693
  viewContext.clearRect(0, 0, w2, h2);
694
- helperContext.clearRect(0, 0, w2, h2);
694
+ overlayContext.clearRect(0, 0, w2, h2);
695
695
  };
696
696
  const content = {
697
- underContext,
697
+ underlayContext,
698
698
  viewContext,
699
- helperContext,
699
+ overlayContext,
700
700
  boardContext,
701
701
  drawView
702
702
  };
703
703
  return content;
704
704
  } else {
705
705
  const viewContext = createContext2D(ctxOpts);
706
- const helperContext = createContext2D(ctxOpts);
707
- const underContext = createContext2D(ctxOpts);
706
+ const overlayContext = createContext2D(ctxOpts);
707
+ const underlayContext = createContext2D(ctxOpts);
708
708
  const boardContext = createContext2D(Object.assign({ ctx }, ctxOpts));
709
709
  const drawView = () => {
710
710
  boardContext.clearRect(0, 0, width, height);
711
- boardContext.drawImage(underContext.canvas, 0, 0, width, height);
711
+ boardContext.drawImage(underlayContext.canvas, 0, 0, width, height);
712
712
  boardContext.drawImage(viewContext.canvas, 0, 0, width, height);
713
- boardContext.drawImage(helperContext.canvas, 0, 0, width, height);
714
- underContext.clearRect(0, 0, width, height);
713
+ boardContext.drawImage(overlayContext.canvas, 0, 0, width, height);
714
+ underlayContext.clearRect(0, 0, width, height);
715
715
  viewContext.clearRect(0, 0, width, height);
716
- helperContext.clearRect(0, 0, width, height);
716
+ overlayContext.clearRect(0, 0, width, height);
717
717
  };
718
718
  const content = {
719
- underContext,
719
+ underlayContext,
720
720
  viewContext,
721
- helperContext,
721
+ overlayContext,
722
722
  boardContext,
723
723
  drawView
724
724
  };
@@ -1445,9 +1445,6 @@ var __privateMethod = (obj, member, method) => {
1445
1445
  if (p.x > mixX && p.x < maxX && p.y > mixY && p.y < maxY) {
1446
1446
  return true;
1447
1447
  }
1448
- if ((opts === null || opts === void 0 ? void 0 : opts.includeBorder) === true && (p.x === mixX || p.x === maxX || p.y === mixY || p.y === maxY)) {
1449
- return true;
1450
- }
1451
1448
  return false;
1452
1449
  }
1453
1450
  function getViewPointAtElement(p, opts) {
@@ -2491,7 +2488,7 @@ var __privateMethod = (obj, member, method) => {
2491
2488
  function drawImage(ctx, elem, opts) {
2492
2489
  const content = opts.loader.getContent(elem);
2493
2490
  const { viewScaleInfo, viewSizeInfo, parentOpacity } = opts;
2494
- const { x: x2, y: y2, w: w2, h: h2, angle: angle2 } = calcViewElementSize(elem, { viewScaleInfo, viewSizeInfo }) || elem;
2491
+ const { x: x2, y: y2, w: w2, h: h2, angle: angle2 } = calcViewElementSize(elem, { viewScaleInfo }) || elem;
2495
2492
  const viewElem = Object.assign(Object.assign({}, elem), { x: x2, y: y2, w: w2, h: h2, angle: angle2 });
2496
2493
  rotateElement$1(ctx, { x: x2, y: y2, w: w2, h: h2, angle: angle2 }, () => {
2497
2494
  drawBoxShadow(ctx, viewElem, {
@@ -2514,6 +2511,10 @@ var __privateMethod = (obj, member, method) => {
2514
2511
  viewScaleInfo,
2515
2512
  viewSizeInfo
2516
2513
  });
2514
+ const { detail } = elem;
2515
+ const { scaleMode, originW = 0, originH = 0 } = detail;
2516
+ const imageW = ctx.$undoPixelRatio(originW);
2517
+ const imageH = ctx.$undoPixelRatio(originH);
2517
2518
  ctx.save();
2518
2519
  ctx.fillStyle = "transparent";
2519
2520
  ctx.beginPath();
@@ -2525,7 +2526,41 @@ var __privateMethod = (obj, member, method) => {
2525
2526
  ctx.closePath();
2526
2527
  ctx.fill();
2527
2528
  ctx.clip();
2528
- ctx.drawImage(content, x3, y3, w3, h3);
2529
+ if (scaleMode && originH && originW) {
2530
+ let sx = 0;
2531
+ let sy = 0;
2532
+ let sWidth = imageW;
2533
+ let sHeight = imageH;
2534
+ const dx = x3;
2535
+ const dy = y3;
2536
+ const dWidth = w3;
2537
+ const dHeight = h3;
2538
+ if (imageW > elem.w || imageH > elem.h) {
2539
+ if (scaleMode === "fill") {
2540
+ const sourceScale = Math.max(elem.w / imageW, elem.h / imageH);
2541
+ const newImageWidth = imageW * sourceScale;
2542
+ const newImageHeight = imageH * sourceScale;
2543
+ sx = (newImageWidth - elem.w) / 2 / sourceScale;
2544
+ sy = (newImageHeight - elem.h) / 2 / sourceScale;
2545
+ sWidth = elem.w / sourceScale;
2546
+ sHeight = elem.h / sourceScale;
2547
+ } else if (scaleMode === "tile") {
2548
+ sx = 0;
2549
+ sy = 0;
2550
+ sWidth = elem.w;
2551
+ sHeight = elem.h;
2552
+ } else if (scaleMode === "fit") {
2553
+ const sourceScale = Math.min(elem.w / imageW, elem.h / imageH);
2554
+ sx = (imageW - elem.w / sourceScale) / 2;
2555
+ sy = (imageH - elem.h / sourceScale) / 2;
2556
+ sWidth = elem.w / sourceScale;
2557
+ sHeight = elem.h / sourceScale;
2558
+ }
2559
+ }
2560
+ ctx.drawImage(content, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight);
2561
+ } else {
2562
+ ctx.drawImage(content, x3, y3, w3, h3);
2563
+ }
2529
2564
  ctx.globalAlpha = parentOpacity;
2530
2565
  ctx.restore();
2531
2566
  }
@@ -2590,46 +2625,58 @@ var __privateMethod = (obj, member, method) => {
2590
2625
  fontSize: fontSize2,
2591
2626
  fontFamily: detail.fontFamily
2592
2627
  });
2593
- const detailText = detail.text.replace(/\r\n/gi, "\n");
2628
+ let detailText = detail.text.replace(/\r\n/gi, "\n");
2629
+ if (detail.textTransform === "lowercase") {
2630
+ detailText = detailText.toLowerCase();
2631
+ } else if (detail.textTransform === "uppercase") {
2632
+ detailText = detailText.toUpperCase();
2633
+ }
2594
2634
  const fontHeight = lineHeight2;
2595
2635
  const detailTextList = detailText.split("\n");
2596
2636
  const lines = [];
2597
2637
  let lineNum = 0;
2598
2638
  detailTextList.forEach((tempText, idx) => {
2599
- let lineText = "";
2600
- if (tempText.length > 0) {
2601
- for (let i = 0; i < tempText.length; i++) {
2602
- if (ctx.measureText(lineText + (tempText[i] || "")).width <= ctx.$doPixelRatio(w2)) {
2603
- lineText += tempText[i] || "";
2604
- } else {
2605
- lines.push({
2606
- text: lineText,
2607
- width: ctx.$undoPixelRatio(ctx.measureText(lineText).width)
2608
- });
2609
- lineText = tempText[i] || "";
2610
- lineNum++;
2611
- }
2612
- if ((lineNum + 1) * fontHeight > h2) {
2613
- break;
2614
- }
2615
- if (tempText.length - 1 === i) {
2616
- if ((lineNum + 1) * fontHeight <= h2) {
2639
+ if (detail.minInlineSize === "maxContent") {
2640
+ lines.push({
2641
+ text: tempText,
2642
+ width: ctx.$undoPixelRatio(ctx.measureText(tempText).width)
2643
+ });
2644
+ } else {
2645
+ let lineText = "";
2646
+ if (tempText.length > 0) {
2647
+ for (let i = 0; i < tempText.length; i++) {
2648
+ if (ctx.measureText(lineText + (tempText[i] || "")).width <= ctx.$doPixelRatio(w2)) {
2649
+ lineText += tempText[i] || "";
2650
+ } else {
2617
2651
  lines.push({
2618
2652
  text: lineText,
2619
2653
  width: ctx.$undoPixelRatio(ctx.measureText(lineText).width)
2620
2654
  });
2621
- if (idx < detailTextList.length - 1) {
2622
- lineNum++;
2623
- }
2655
+ lineText = tempText[i] || "";
2656
+ lineNum++;
2657
+ }
2658
+ if ((lineNum + 1) * fontHeight > h2) {
2624
2659
  break;
2625
2660
  }
2661
+ if (tempText.length - 1 === i) {
2662
+ if ((lineNum + 1) * fontHeight <= h2) {
2663
+ lines.push({
2664
+ text: lineText,
2665
+ width: ctx.$undoPixelRatio(ctx.measureText(lineText).width)
2666
+ });
2667
+ if (idx < detailTextList.length - 1) {
2668
+ lineNum++;
2669
+ }
2670
+ break;
2671
+ }
2672
+ }
2626
2673
  }
2674
+ } else {
2675
+ lines.push({
2676
+ text: "",
2677
+ width: 0
2678
+ });
2627
2679
  }
2628
- } else {
2629
- lines.push({
2630
- text: "",
2631
- width: 0
2632
- });
2633
2680
  }
2634
2681
  });
2635
2682
  let startY = 0;
@@ -2672,9 +2719,9 @@ var __privateMethod = (obj, member, method) => {
2672
2719
  }
2673
2720
  function drawPath(ctx, elem, opts) {
2674
2721
  const { detail } = elem;
2675
- const { originX, originY, originW, originH } = detail;
2722
+ const { originX, originY, originW, originH, fillRule } = detail;
2676
2723
  const { viewScaleInfo, viewSizeInfo, parentOpacity } = opts;
2677
- const { x: x2, y: y2, w: w2, h: h2, angle: angle2 } = calcViewElementSize(elem, { viewScaleInfo, viewSizeInfo }) || elem;
2724
+ const { x: x2, y: y2, w: w2, h: h2, angle: angle2 } = calcViewElementSize(elem, { viewScaleInfo }) || elem;
2678
2725
  const scaleW = w2 / originW;
2679
2726
  const scaleH = h2 / originH;
2680
2727
  const viewOriginX = originX * scaleW;
@@ -2702,7 +2749,7 @@ var __privateMethod = (obj, member, method) => {
2702
2749
  const path2d = new Path2D(pathStr);
2703
2750
  if (detail.fill) {
2704
2751
  ctx.fillStyle = detail.fill;
2705
- ctx.fill(path2d);
2752
+ ctx.fill(path2d, fillRule);
2706
2753
  }
2707
2754
  if (detail.stroke && detail.strokeWidth !== 0) {
2708
2755
  ctx.strokeStyle = detail.stroke;
@@ -3786,15 +3833,15 @@ var __privateMethod = (obj, member, method) => {
3786
3833
  const originViewSize = sharer.getActiveViewSizeInfo();
3787
3834
  const newViewSize = Object.assign(Object.assign({}, originViewSize), viewSize);
3788
3835
  const { width, height, devicePixelRatio } = newViewSize;
3789
- const { underContext, boardContext, helperContext, viewContext } = __classPrivateFieldGet$1(this, _Viewer_opts, "f").boardContent;
3836
+ const { underlayContext, boardContext, overlayContext, viewContext } = __classPrivateFieldGet$1(this, _Viewer_opts, "f").boardContent;
3790
3837
  boardContext.canvas.width = width * devicePixelRatio;
3791
3838
  boardContext.canvas.height = height * devicePixelRatio;
3792
3839
  boardContext.canvas.style.width = `${width}px`;
3793
3840
  boardContext.canvas.style.height = `${height}px`;
3794
- underContext.canvas.width = width * devicePixelRatio;
3795
- underContext.canvas.height = height * devicePixelRatio;
3796
- helperContext.canvas.width = width * devicePixelRatio;
3797
- helperContext.canvas.height = height * devicePixelRatio;
3841
+ underlayContext.canvas.width = width * devicePixelRatio;
3842
+ underlayContext.canvas.height = height * devicePixelRatio;
3843
+ overlayContext.canvas.width = width * devicePixelRatio;
3844
+ overlayContext.canvas.height = height * devicePixelRatio;
3798
3845
  viewContext.canvas.width = width * devicePixelRatio;
3799
3846
  viewContext.canvas.height = height * devicePixelRatio;
3800
3847
  sharer.setActiveViewSizeInfo(newViewSize);
@@ -4027,18 +4074,18 @@ var __privateMethod = (obj, member, method) => {
4027
4074
  const { width, height, devicePixelRatio } = newViewSize;
4028
4075
  const { boardContent } = __classPrivateFieldGet(this, _Board_opts, "f");
4029
4076
  boardContent.viewContext.$resize({ width, height, devicePixelRatio });
4030
- boardContent.helperContext.$resize({ width, height, devicePixelRatio });
4077
+ boardContent.overlayContext.$resize({ width, height, devicePixelRatio });
4031
4078
  boardContent.boardContext.$resize({ width, height, devicePixelRatio });
4032
- boardContent.underContext.$resize({ width, height, devicePixelRatio });
4079
+ boardContent.underlayContext.$resize({ width, height, devicePixelRatio });
4033
4080
  __classPrivateFieldGet(this, _Board_viewer, "f").drawFrame();
4034
4081
  __classPrivateFieldGet(this, _Board_watcher, "f").trigger("resize", viewSize);
4035
4082
  __classPrivateFieldGet(this, _Board_sharer, "f").setActiveViewSizeInfo(newViewSize);
4036
4083
  }
4037
4084
  clear() {
4038
4085
  const { boardContent } = __classPrivateFieldGet(this, _Board_opts, "f");
4039
- const { underContext, helperContext, viewContext, boardContext } = boardContent;
4040
- underContext.clearRect(0, 0, underContext.canvas.width, underContext.canvas.height);
4041
- helperContext.clearRect(0, 0, helperContext.canvas.width, helperContext.canvas.height);
4086
+ const { underlayContext, overlayContext, viewContext, boardContext } = boardContent;
4087
+ underlayContext.clearRect(0, 0, underlayContext.canvas.width, underlayContext.canvas.height);
4088
+ overlayContext.clearRect(0, 0, overlayContext.canvas.width, overlayContext.canvas.height);
4042
4089
  viewContext.clearRect(0, 0, viewContext.canvas.width, viewContext.canvas.height);
4043
4090
  boardContext.clearRect(0, 0, boardContext.canvas.width, boardContext.canvas.height);
4044
4091
  __classPrivateFieldGet(this, _Board_instances, "m", _Board_handleClear).call(this);
@@ -5412,6 +5459,8 @@ var __privateMethod = (obj, member, method) => {
5412
5459
  if (!targetRectInfo) {
5413
5460
  return null;
5414
5461
  }
5462
+ const vTargetLineDotMap = {};
5463
+ const hTargetLineDotMap = {};
5415
5464
  const vRefLineDotMap = {};
5416
5465
  const hRefLineDotMap = {};
5417
5466
  const vHelperLineDotMapList = [];
@@ -5419,6 +5468,12 @@ var __privateMethod = (obj, member, method) => {
5419
5468
  let sortedRefXKeys = [];
5420
5469
  let sortedRefYKeys = [];
5421
5470
  const targetBox = getViewBoxInfo(targetRectInfo);
5471
+ vTargetLineDotMap[targetBox.minX] = [targetBox.minY, targetBox.midY, targetBox.maxY];
5472
+ vTargetLineDotMap[targetBox.midX] = [targetBox.minY, targetBox.midY, targetBox.maxY];
5473
+ vTargetLineDotMap[targetBox.maxX] = [targetBox.minY, targetBox.midY, targetBox.maxY];
5474
+ hTargetLineDotMap[targetBox.minY] = [targetBox.minX, targetBox.midX, targetBox.maxX];
5475
+ hTargetLineDotMap[targetBox.midY] = [targetBox.minX, targetBox.midX, targetBox.maxX];
5476
+ hTargetLineDotMap[targetBox.maxY] = [targetBox.minX, targetBox.midX, targetBox.maxX];
5422
5477
  siblingViewRectInfoList.forEach((info) => {
5423
5478
  const box = getViewBoxInfo(info);
5424
5479
  if (!vRefLineDotMap[box.minX]) {
@@ -5817,7 +5872,7 @@ var __privateMethod = (obj, member, method) => {
5817
5872
  };
5818
5873
  const MiddlewareSelector = (opts) => {
5819
5874
  const { viewer, sharer, boardContent, calculator, eventHub } = opts;
5820
- const { helperContext } = boardContent;
5875
+ const { overlayContext } = boardContent;
5821
5876
  let prevPoint = null;
5822
5877
  let inBusyMode = null;
5823
5878
  sharer.setSharedStorage(keyActionType, null);
@@ -5874,7 +5929,7 @@ var __privateMethod = (obj, member, method) => {
5874
5929
  };
5875
5930
  const pointTargetBaseOptions = () => {
5876
5931
  return {
5877
- ctx: helperContext,
5932
+ ctx: overlayContext,
5878
5933
  calculator,
5879
5934
  data: sharer.getActiveStorage("data"),
5880
5935
  selectedElements: getActiveElements(),
@@ -5965,7 +6020,7 @@ var __privateMethod = (obj, member, method) => {
5965
6020
  };
5966
6021
  if ((groupQueue == null ? void 0 : groupQueue.length) > 0) {
5967
6022
  const isInActiveGroup = isPointInViewActiveGroup(e.point, {
5968
- ctx: helperContext,
6023
+ ctx: overlayContext,
5969
6024
  viewScaleInfo: sharer.getActiveViewScaleInfo(),
5970
6025
  viewSizeInfo: sharer.getActiveViewSizeInfo(),
5971
6026
  groupQueue: sharer.getSharedStorage(keyGroupQueue)
@@ -6042,7 +6097,7 @@ var __privateMethod = (obj, member, method) => {
6042
6097
  const groupQueue = sharer.getSharedStorage(keyGroupQueue);
6043
6098
  if ((groupQueue == null ? void 0 : groupQueue.length) > 0) {
6044
6099
  if (isPointInViewActiveGroup(e.point, {
6045
- ctx: helperContext,
6100
+ ctx: overlayContext,
6046
6101
  viewScaleInfo: sharer.getActiveViewScaleInfo(),
6047
6102
  viewSizeInfo: sharer.getActiveViewSizeInfo(),
6048
6103
  groupQueue
@@ -6387,10 +6442,10 @@ var __privateMethod = (obj, member, method) => {
6387
6442
  }) : null;
6388
6443
  const isLock = !!((_a = hoverElement == null ? void 0 : hoverElement.operations) == null ? void 0 : _a.lock);
6389
6444
  if ((groupQueue == null ? void 0 : groupQueue.length) > 0) {
6390
- drawGroupQueueVertexesWrappers(helperContext, groupQueueVertexesList, drawBaseOpts);
6445
+ drawGroupQueueVertexesWrappers(overlayContext, groupQueueVertexesList, drawBaseOpts);
6391
6446
  if (hoverElement && actionType !== "drag") {
6392
6447
  if (isLock) {
6393
- drawLockVertexesWrapper(helperContext, hoverElementVertexes, {
6448
+ drawLockVertexesWrapper(overlayContext, hoverElementVertexes, {
6394
6449
  ...drawBaseOpts,
6395
6450
  controller: calcElementSizeController(hoverElement, {
6396
6451
  groupQueue,
@@ -6399,11 +6454,11 @@ var __privateMethod = (obj, member, method) => {
6399
6454
  })
6400
6455
  });
6401
6456
  } else {
6402
- drawHoverVertexesWrapper(helperContext, hoverElementVertexes, drawBaseOpts);
6457
+ drawHoverVertexesWrapper(overlayContext, hoverElementVertexes, drawBaseOpts);
6403
6458
  }
6404
6459
  }
6405
6460
  if (!isLock && elem && ["select", "drag", "resize"].includes(actionType)) {
6406
- drawSelectedElementControllersVertexes(helperContext, selectedElementController, {
6461
+ drawSelectedElementControllersVertexes(overlayContext, selectedElementController, {
6407
6462
  ...drawBaseOpts,
6408
6463
  element: elem,
6409
6464
  calculator,
@@ -6412,7 +6467,7 @@ var __privateMethod = (obj, member, method) => {
6412
6467
  if (actionType === "drag") {
6413
6468
  const xLines = sharer2.getSharedStorage(keySelectedReferenceXLines);
6414
6469
  const yLines = sharer2.getSharedStorage(keySelectedReferenceYLines);
6415
- drawReferenceLines(helperContext, {
6470
+ drawReferenceLines(overlayContext, {
6416
6471
  xLines,
6417
6472
  yLines
6418
6473
  });
@@ -6421,7 +6476,7 @@ var __privateMethod = (obj, member, method) => {
6421
6476
  } else {
6422
6477
  if (hoverElement && actionType !== "drag") {
6423
6478
  if (isLock) {
6424
- drawLockVertexesWrapper(helperContext, hoverElementVertexes, {
6479
+ drawLockVertexesWrapper(overlayContext, hoverElementVertexes, {
6425
6480
  ...drawBaseOpts,
6426
6481
  controller: calcElementSizeController(hoverElement, {
6427
6482
  groupQueue,
@@ -6430,11 +6485,11 @@ var __privateMethod = (obj, member, method) => {
6430
6485
  })
6431
6486
  });
6432
6487
  } else {
6433
- drawHoverVertexesWrapper(helperContext, hoverElementVertexes, drawBaseOpts);
6488
+ drawHoverVertexesWrapper(overlayContext, hoverElementVertexes, drawBaseOpts);
6434
6489
  }
6435
6490
  }
6436
6491
  if (!isLock && elem && ["select", "drag", "resize"].includes(actionType)) {
6437
- drawSelectedElementControllersVertexes(helperContext, selectedElementController, {
6492
+ drawSelectedElementControllersVertexes(overlayContext, selectedElementController, {
6438
6493
  ...drawBaseOpts,
6439
6494
  element: elem,
6440
6495
  calculator,
@@ -6443,13 +6498,13 @@ var __privateMethod = (obj, member, method) => {
6443
6498
  if (actionType === "drag") {
6444
6499
  const xLines = sharer2.getSharedStorage(keySelectedReferenceXLines);
6445
6500
  const yLines = sharer2.getSharedStorage(keySelectedReferenceYLines);
6446
- drawReferenceLines(helperContext, {
6501
+ drawReferenceLines(overlayContext, {
6447
6502
  xLines,
6448
6503
  yLines
6449
6504
  });
6450
6505
  }
6451
6506
  } else if (actionType === "area" && areaStart && areaEnd) {
6452
- drawArea(helperContext, { start: areaStart, end: areaEnd });
6507
+ drawArea(overlayContext, { start: areaStart, end: areaEnd });
6453
6508
  } else if (["drag-list", "drag-list-end"].includes(actionType)) {
6454
6509
  const listAreaSize = calcSelectedElementsArea(getActiveElements(), {
6455
6510
  viewScaleInfo: sharer2.getActiveViewScaleInfo(),
@@ -6457,7 +6512,7 @@ var __privateMethod = (obj, member, method) => {
6457
6512
  calculator
6458
6513
  });
6459
6514
  if (listAreaSize) {
6460
- drawListArea(helperContext, { areaSize: listAreaSize });
6515
+ drawListArea(overlayContext, { areaSize: listAreaSize });
6461
6516
  }
6462
6517
  }
6463
6518
  }
@@ -6479,8 +6534,8 @@ var __privateMethod = (obj, member, method) => {
6479
6534
  scrollBarColor: "#FFFFFF60",
6480
6535
  showScrollBar: false
6481
6536
  };
6482
- function isPointAtRect(helperContext, p, rect) {
6483
- const ctx = helperContext;
6537
+ function isPointAtRect(overlayContext, p, rect) {
6538
+ const ctx = overlayContext;
6484
6539
  const { x: x2, y: y2, w: w2, h: h2 } = rect;
6485
6540
  ctx.beginPath();
6486
6541
  ctx.rect(x2, y2, w2, h2);
@@ -6490,12 +6545,12 @@ var __privateMethod = (obj, member, method) => {
6490
6545
  }
6491
6546
  return false;
6492
6547
  }
6493
- function isPointInScrollThumb(helperContext, p, opts) {
6548
+ function isPointInScrollThumb(overlayContext, p, opts) {
6494
6549
  let thumbType = null;
6495
6550
  const { xThumbRect, yThumbRect } = opts;
6496
- if (xThumbRect && isPointAtRect(helperContext, p, xThumbRect)) {
6551
+ if (xThumbRect && isPointAtRect(overlayContext, p, xThumbRect)) {
6497
6552
  thumbType = "X";
6498
- } else if (yThumbRect && isPointAtRect(helperContext, p, yThumbRect)) {
6553
+ } else if (yThumbRect && isPointAtRect(overlayContext, p, yThumbRect)) {
6499
6554
  thumbType = "Y";
6500
6555
  }
6501
6556
  return thumbType;
@@ -6619,8 +6674,8 @@ var __privateMethod = (obj, member, method) => {
6619
6674
  }
6620
6675
  ctx.restore();
6621
6676
  }
6622
- function drawScrollerInfo(helperContext, opts) {
6623
- const ctx = helperContext;
6677
+ function drawScrollerInfo(overlayContext, opts) {
6678
+ const ctx = overlayContext;
6624
6679
  const { viewScaleInfo, viewSizeInfo, scrollInfo } = opts;
6625
6680
  const { activeThumbType, prevPoint, activePoint } = scrollInfo;
6626
6681
  const wrapper = calcScrollerInfo(viewScaleInfo, viewSizeInfo);
@@ -6663,7 +6718,7 @@ var __privateMethod = (obj, member, method) => {
6663
6718
  }
6664
6719
  const MiddlewareScroller = (opts) => {
6665
6720
  const { viewer, boardContent, sharer } = opts;
6666
- const { helperContext } = boardContent;
6721
+ const { overlayContext } = boardContent;
6667
6722
  sharer.setSharedStorage(keyXThumbRect, null);
6668
6723
  sharer.setSharedStorage(keyYThumbRect, null);
6669
6724
  const clear = () => {
@@ -6697,7 +6752,7 @@ var __privateMethod = (obj, member, method) => {
6697
6752
  }
6698
6753
  };
6699
6754
  const getThumbType = (p) => {
6700
- return isPointInScrollThumb(helperContext, p, {
6755
+ return isPointInScrollThumb(overlayContext, p, {
6701
6756
  xThumbRect: sharer.getSharedStorage(keyXThumbRect),
6702
6757
  yThumbRect: sharer.getSharedStorage(keyYThumbRect)
6703
6758
  });
@@ -6744,7 +6799,7 @@ var __privateMethod = (obj, member, method) => {
6744
6799
  }
6745
6800
  },
6746
6801
  beforeDrawFrame({ snapshot }) {
6747
- const { xThumbRect, yThumbRect } = drawScroller(helperContext, { snapshot });
6802
+ const { xThumbRect, yThumbRect } = drawScroller(overlayContext, { snapshot });
6748
6803
  sharer.setSharedStorage(keyXThumbRect, xThumbRect);
6749
6804
  sharer.setSharedStorage(keyYThumbRect, yThumbRect);
6750
6805
  }
@@ -6789,12 +6844,35 @@ var __privateMethod = (obj, member, method) => {
6789
6844
  const gridKeyColor = "#AAAAAA40";
6790
6845
  const lineSize = 1;
6791
6846
  const selectedAreaColor = "#196097";
6847
+ const limitRulerUnitList = [1, 2, 5, 10, 20, 50, 100, 200, 500];
6848
+ function limitRulerUnit(unit) {
6849
+ unit = Math.max(limitRulerUnitList[0], Math.min(unit, limitRulerUnitList[limitRulerUnitList.length - 1]));
6850
+ for (let i = 0; i < limitRulerUnitList.length - 1; i++) {
6851
+ const thisUnit = limitRulerUnitList[i];
6852
+ const nextUnit = limitRulerUnitList[i + 1];
6853
+ if (unit > nextUnit) {
6854
+ continue;
6855
+ }
6856
+ if (unit === thisUnit) {
6857
+ return unit;
6858
+ }
6859
+ if (unit === nextUnit) {
6860
+ return unit;
6861
+ }
6862
+ const mid = (thisUnit + nextUnit) / 2;
6863
+ if (unit <= mid) {
6864
+ return thisUnit;
6865
+ }
6866
+ return nextUnit;
6867
+ }
6868
+ return unit;
6869
+ }
6792
6870
  function calcRulerScaleList(opts) {
6793
6871
  const { scale, viewLength, viewOffset } = opts;
6794
6872
  const list = [];
6795
6873
  let rulerUnit = 10;
6796
6874
  rulerUnit = formatNumber(rulerUnit / scale, { decimalPlaces: 0 });
6797
- rulerUnit = Math.max(10, Math.min(rulerUnit, 1e3));
6875
+ rulerUnit = limitRulerUnit(rulerUnit);
6798
6876
  const rulerKeyUnit = rulerUnit * 10;
6799
6877
  const rulerSubKeyUnit = rulerUnit * 5;
6800
6878
  let index = 0;
@@ -6817,7 +6895,7 @@ var __privateMethod = (obj, member, method) => {
6817
6895
  list.push(rulerScale);
6818
6896
  index++;
6819
6897
  }
6820
- return list;
6898
+ return { list, rulerUnit };
6821
6899
  }
6822
6900
  function calcXRulerScaleList(opts) {
6823
6901
  const { viewScaleInfo, viewSizeInfo } = opts;
@@ -6929,7 +7007,7 @@ var __privateMethod = (obj, member, method) => {
6929
7007
  ctx.strokeStyle = borderColor;
6930
7008
  ctx.stroke();
6931
7009
  }
6932
- function drawUnderGrid(ctx, opts) {
7010
+ function drawGrid(ctx, opts) {
6933
7011
  const { xList, yList, viewSizeInfo } = opts;
6934
7012
  const { width, height } = viewSizeInfo;
6935
7013
  for (let i = 0; i < xList.length; i++) {
@@ -7017,7 +7095,7 @@ var __privateMethod = (obj, member, method) => {
7017
7095
  const middlewareEventRuler = "@middleware/show-ruler";
7018
7096
  const MiddlewareRuler = (opts) => {
7019
7097
  const { boardContent, viewer, eventHub, calculator } = opts;
7020
- const { helperContext, underContext } = boardContent;
7098
+ const { overlayContext, underlayContext } = boardContent;
7021
7099
  let show = true;
7022
7100
  let showGrid = true;
7023
7101
  const rulerCallback = (e) => {
@@ -7043,14 +7121,15 @@ var __privateMethod = (obj, member, method) => {
7043
7121
  if (show === true) {
7044
7122
  const viewScaleInfo = getViewScaleInfoFromSnapshot(snapshot);
7045
7123
  const viewSizeInfo = getViewSizeInfoFromSnapshot(snapshot);
7046
- drawScrollerSelectedArea(helperContext, { snapshot, calculator });
7047
- drawRulerBackground(helperContext, { viewScaleInfo, viewSizeInfo });
7048
- const xList = calcXRulerScaleList({ viewScaleInfo, viewSizeInfo });
7049
- drawXRuler(helperContext, { scaleList: xList });
7050
- const yList = calcYRulerScaleList({ viewScaleInfo, viewSizeInfo });
7051
- drawYRuler(helperContext, { scaleList: yList });
7124
+ drawScrollerSelectedArea(overlayContext, { snapshot, calculator });
7125
+ drawRulerBackground(overlayContext, { viewScaleInfo, viewSizeInfo });
7126
+ const { list: xList, rulerUnit } = calcXRulerScaleList({ viewScaleInfo, viewSizeInfo });
7127
+ drawXRuler(overlayContext, { scaleList: xList });
7128
+ const { list: yList } = calcYRulerScaleList({ viewScaleInfo, viewSizeInfo });
7129
+ drawYRuler(overlayContext, { scaleList: yList });
7052
7130
  if (showGrid === true) {
7053
- drawUnderGrid(underContext, {
7131
+ const ctx = rulerUnit === 1 ? overlayContext : underlayContext;
7132
+ drawGrid(ctx, {
7054
7133
  xList,
7055
7134
  yList,
7056
7135
  viewScaleInfo,
@@ -7219,7 +7298,7 @@ var __privateMethod = (obj, member, method) => {
7219
7298
  const infoLineHeight = 16;
7220
7299
  const MiddlewareInfo = (opts) => {
7221
7300
  const { boardContent, calculator } = opts;
7222
- const { helperContext } = boardContent;
7301
+ const { overlayContext } = boardContent;
7223
7302
  return {
7224
7303
  name: "@middleware/info",
7225
7304
  beforeDrawFrame({ snapshot }) {
@@ -7275,7 +7354,7 @@ var __privateMethod = (obj, member, method) => {
7275
7354
  const xyText = `${formatNumber(x22, { decimalPlaces: 0 })},${formatNumber(y22, { decimalPlaces: 0 })}`;
7276
7355
  const whText = `${formatNumber(w22, { decimalPlaces: 0 })}x${formatNumber(h22, { decimalPlaces: 0 })}`;
7277
7356
  const angleText = `${formatNumber(elem.angle || 0, { decimalPlaces: 0 })}°`;
7278
- drawSizeInfoText(helperContext, {
7357
+ drawSizeInfoText(overlayContext, {
7279
7358
  point: {
7280
7359
  x: rectInfo.bottom.x,
7281
7360
  y: rectInfo.bottom.y + infoFontSize
@@ -7288,7 +7367,7 @@ var __privateMethod = (obj, member, method) => {
7288
7367
  color: infoTextColor,
7289
7368
  background: infoBackground
7290
7369
  });
7291
- drawPositionInfoText(helperContext, {
7370
+ drawPositionInfoText(overlayContext, {
7292
7371
  point: {
7293
7372
  x: rectInfo.topLeft.x,
7294
7373
  y: rectInfo.topLeft.y - infoFontSize * 2
@@ -7301,7 +7380,7 @@ var __privateMethod = (obj, member, method) => {
7301
7380
  color: infoTextColor,
7302
7381
  background: infoBackground
7303
7382
  });
7304
- drawAngleInfoText(helperContext, {
7383
+ drawAngleInfoText(overlayContext, {
7305
7384
  point: {
7306
7385
  x: rectInfo.top.x + infoFontSize,
7307
7386
  y: rectInfo.top.y - infoFontSize * 2
@@ -7416,7 +7495,7 @@ var __privateMethod = (obj, member, method) => {
7416
7495
  }
7417
7496
  const MiddlewareLayoutSelector = (opts) => {
7418
7497
  const { sharer, boardContent, calculator, viewer, eventHub } = opts;
7419
- const { helperContext } = boardContent;
7498
+ const { overlayContext } = boardContent;
7420
7499
  let prevPoint = null;
7421
7500
  const clear = () => {
7422
7501
  prevPoint = null;
@@ -7636,7 +7715,7 @@ var __privateMethod = (obj, member, method) => {
7636
7715
  const { x: x2, y: y2, w: w2, h: h2 } = activeStore.data.layout;
7637
7716
  const size = { x: x2, y: y2, w: w2, h: h2 };
7638
7717
  const controller = calcLayoutSizeController(size, { viewScaleInfo, controllerSize: 10 });
7639
- drawLayoutController(helperContext, { controller, operations: activeStore.data.layout.operations || {} });
7718
+ drawLayoutController(overlayContext, { controller, operations: activeStore.data.layout.operations || {} });
7640
7719
  }
7641
7720
  }
7642
7721
  },