@node-projects/web-component-designer 0.0.62 → 0.0.66

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 (71) hide show
  1. package/.vscode/settings.json +1 -1
  2. package/ACKNOWLEDGMENTS +7 -0
  3. package/dist/elements/controls/DesignerTabControl.js +4 -2
  4. package/dist/elements/controls/PlainScrollbar.d.ts +15 -0
  5. package/dist/elements/controls/PlainScrollbar.js +482 -0
  6. package/dist/elements/controls/SimpleSplitView.d.ts +11 -0
  7. package/dist/elements/controls/SimpleSplitView.js +67 -0
  8. package/dist/elements/documentContainer.d.ts +4 -1
  9. package/dist/elements/documentContainer.js +45 -19
  10. package/dist/elements/helper/PathDataPolyfill.d.ts +5 -1
  11. package/dist/elements/helper/PathDataPolyfill.js +49 -1
  12. package/dist/elements/helper/contextMenu/ContextMenuHelper.js +1 -0
  13. package/dist/elements/services/DefaultServiceBootstrap.js +10 -0
  14. package/dist/elements/services/htmlParserService/NodeHtmlParserService.js +2 -0
  15. package/dist/elements/services/placementService/DefaultPlacementService.js +1 -1
  16. package/dist/elements/services/placementService/ISnaplinesProviderService.d.ts +5 -4
  17. package/dist/elements/services/placementService/SnaplinesProviderService.d.ts +5 -4
  18. package/dist/elements/services/placementService/SnaplinesProviderService.js +15 -13
  19. package/dist/elements/services/undoService/UndoService.js +3 -0
  20. package/dist/elements/widgets/designerView/IDesignerCanvas.d.ts +4 -0
  21. package/dist/elements/widgets/designerView/IPlacementView.d.ts +2 -0
  22. package/dist/elements/widgets/designerView/Snaplines.d.ts +2 -1
  23. package/dist/elements/widgets/designerView/designerCanvas.d.ts +8 -1
  24. package/dist/elements/widgets/designerView/designerCanvas.js +49 -26
  25. package/dist/elements/widgets/designerView/designerView.d.ts +5 -1
  26. package/dist/elements/widgets/designerView/designerView.js +81 -18
  27. package/dist/elements/widgets/designerView/extensions/AltToEnterContainerExtension.js +3 -3
  28. package/dist/elements/widgets/designerView/extensions/MouseOverExtension.js +1 -1
  29. package/dist/elements/widgets/designerView/extensions/PositionExtension.js +4 -4
  30. package/dist/elements/widgets/designerView/extensions/PrimarySelectionDefaultExtension.js +2 -2
  31. package/dist/elements/widgets/designerView/extensions/ResizeExtension.d.ts +2 -1
  32. package/dist/elements/widgets/designerView/extensions/ResizeExtension.js +19 -15
  33. package/dist/elements/widgets/designerView/extensions/RotateExtension.js +1 -1
  34. package/dist/elements/widgets/designerView/extensions/SelectionDefaultExtension.js +2 -2
  35. package/dist/elements/widgets/designerView/extensions/TransformOriginExtension.js +2 -2
  36. package/dist/elements/widgets/designerView/overlayLayerView.d.ts +1 -0
  37. package/dist/elements/widgets/designerView/overlayLayerView.js +6 -0
  38. package/dist/elements/widgets/designerView/tools/DrawEllipsisTool.d.ts +15 -0
  39. package/dist/elements/widgets/designerView/tools/DrawEllipsisTool.js +90 -0
  40. package/dist/elements/widgets/designerView/tools/DrawLineTool.d.ts +13 -0
  41. package/dist/elements/widgets/designerView/tools/DrawLineTool.js +75 -0
  42. package/dist/elements/widgets/designerView/tools/DrawPathTool.d.ts +0 -2
  43. package/dist/elements/widgets/designerView/tools/DrawPathTool.js +5 -18
  44. package/dist/elements/widgets/designerView/tools/DrawRectTool.d.ts +18 -0
  45. package/dist/elements/widgets/designerView/tools/DrawRectTool.js +105 -0
  46. package/dist/elements/widgets/designerView/tools/NamedTools.d.ts +3 -0
  47. package/dist/elements/widgets/designerView/tools/NamedTools.js +3 -0
  48. package/dist/elements/widgets/designerView/tools/PanTool.js +14 -0
  49. package/dist/elements/widgets/designerView/tools/PointerTool.js +7 -0
  50. package/dist/elements/widgets/designerView/tools/RectangleSelectorTool.js +2 -2
  51. package/dist/elements/widgets/paletteView/paletteTreeView.js +0 -5
  52. package/dist/elements/widgets/propertyGrid/PropertyGrid.js +1 -0
  53. package/dist/elements/widgets/propertyGrid/PropertyGridWithHeader.js +1 -0
  54. package/dist/elements/widgets/treeView/treeView.js +1 -1
  55. package/dist/index.d.ts +4 -0
  56. package/dist/index.js +4 -0
  57. package/package.json +1 -1
  58. package/dist/elements/widgets/designerView/ButtonSeperatorProvider copy.d.ts +0 -7
  59. package/dist/elements/widgets/designerView/ButtonSeperatorProvider copy.js +0 -11
  60. package/dist/elements/widgets/designerView/extensions/GridExtensionConfigButtons.d.ts +0 -5
  61. package/dist/elements/widgets/designerView/extensions/GridExtensionConfigButtons.js +0 -12
  62. package/dist/elements/widgets/designerView/extensions/GridExtensionProvider copy.d.ts +0 -10
  63. package/dist/elements/widgets/designerView/extensions/GridExtensionProvider copy.js +0 -18
  64. package/dist/elements/widgets/designerView/extensions/GridExtensionProviderConfigButtons.d.ts +0 -5
  65. package/dist/elements/widgets/designerView/extensions/GridExtensionProviderConfigButtons.js +0 -12
  66. package/dist/elements/widgets/designerView/extensions/GridExtensionProviderOptions.d.ts +0 -10
  67. package/dist/elements/widgets/designerView/extensions/GridExtensionProviderOptions.js +0 -18
  68. package/dist/elements/widgets/designerView/extensions/IDesignViewConfigButtonsProvider.d.ts +0 -0
  69. package/dist/elements/widgets/designerView/extensions/IDesignViewConfigButtonsProvider.js +0 -1
  70. package/dist/elements/widgets/designerView/extensions/IExtensionConfiguration.d.ts +0 -3
  71. package/dist/elements/widgets/designerView/extensions/IExtensionConfiguration.js +0 -1
@@ -3,7 +3,10 @@ import { DesignerCanvas } from "./designerCanvas.js";
3
3
  import { DomConverter } from './DomConverter.js';
4
4
  import { DefaultHtmlParserService } from '../../services/htmlParserService/DefaultHtmlParserService.js';
5
5
  import { EventNames } from '../../../enums/EventNames.js';
6
+ const autoZomOffset = 10;
6
7
  export class DesignerView extends BaseCustomWebComponentConstructorAppend {
8
+ _sVert;
9
+ _sHor;
7
10
  get serviceContainer() {
8
11
  return this._designerCanvas.serviceContainer;
9
12
  }
@@ -16,6 +19,10 @@ export class DesignerView extends BaseCustomWebComponentConstructorAppend {
16
19
  set instanceServiceContainer(value) {
17
20
  this._designerCanvas.instanceServiceContainer = value;
18
21
  }
22
+ _designerCanvas;
23
+ get designerCanvas() {
24
+ return this._designerCanvas;
25
+ }
19
26
  _zoomInput;
20
27
  _lowertoolbar;
21
28
  static style = css `
@@ -82,24 +89,50 @@ export class DesignerView extends BaseCustomWebComponentConstructorAppend {
82
89
  }
83
90
  .snap-guide {
84
91
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAYVJREFUeNqkU7tKA1EQnbs3CnlVqbQNARMjFilS+AnZQhIbW0ER/AA/wlYbhXR2wUKx0iKNYGMKDViEdEIgieBujGvCPpyz7sK6iWLIwJk798zsuXsfIxzHoXksAqcoij+vMbYq7MoszGxaEB3wtODlH3i5E5uojck210RCgq7SJie4MC0TsdO1cim/lMmkwHdarZWni+t16/1jz/FElJBAGc5imLzyakXNG0IuVo+OnwHE4JCzgisG7BJu/I3CQjyRuq1dvWi6vg8gBofcOHgGAZO+AFv88/VNDofDEcd3IBCD43ycfhEowY28Sazfnzh1cKMggWsUQvi4waiqKuVyud16/d7JZrOHxWJxKudMuQV3C81mk3RdX0wmk9Tr9UxN06jb7dJgMPjBwQRUAu/AtWg0SpZl7TDSUso2/1UVNWHOMIwJARzWBhcQwMXu1oJb9Ufbtsk0zYktPLrvgD8E/mWeYoNxxlj2xoZ3qI2/YrePQs10PksjTRPozCog5m3nLwEGABrLzseuHT6IAAAAAElFTkSuQmCC);
92
+ }
93
+
94
+ .bottom-scroll {
95
+ width: calc(100% - 16px);
96
+ position: absolute;
97
+ bottom: 16px;
98
+ height: 16px;
99
+ box-sizing: border-box;
100
+ }
101
+ .right-scroll {
102
+ height: calc(100% - 32px);
103
+ position: absolute;
104
+ right: 0;
105
+ top: 0;
106
+ width: 16px;
107
+ box-sizing: border-box;
108
+ }
109
+ .bottom-right {
110
+ width: 16px;
111
+ height: 16px;
112
+ bottom: 16px;
113
+ right: 0;
114
+ position: absolute;
115
+ background: #f0f0f0;
85
116
  }`;
86
117
  static template = html `
87
- <div id="outer">
88
- <div id="lowertoolbar">
89
- <input id="zoomInput" type="text" value="100%">
90
- <div title="decrease zoom" id="zoomIncrease" class="toolbar-control zoom-in"></div>
91
- <div title="increase zoom" id="zoomDecrease" class="toolbar-control zoom-out"></div>
92
- <div title="reset zoom" id="zoomReset" class="toolbar-control"
93
- style="width: 16px; height: 16px; font-size: 14px; display: flex; align-items: center; justify-content: center;">1
94
- </div>
95
- <div title="zoom to fit" id="zoomFit" class="toolbar-control"
96
- style="width: 16px; height: 16px; font-size: 8px; display: flex; align-items: center; justify-content: center;">
97
- 100%</div>
98
- <div title="snap to grid" id="alignGrid" class="toolbar-control snap-grid"></div>
99
- <div title="snap to elements" id="alignSnap" class="toolbar-control snap-guide"></div>
100
- </div>
101
- </div>`;
102
- _designerCanvas;
118
+ <div id="outer">
119
+ <node-projects-plain-scrollbar id="s-hor" value="0.5" class="bottom-scroll"></node-projects-plain-scrollbar>
120
+ <node-projects-plain-scrollbar id="s-vert" value="0.5" orientation="vertical" class="right-scroll"></node-projects-plain-scrollbar>
121
+ <div class="bottom-right"></div>
122
+ <div id="lowertoolbar">
123
+ <input id="zoomInput" type="text" value="100%">
124
+ <div title="decrease zoom" id="zoomIncrease" class="toolbar-control zoom-in"></div>
125
+ <div title="increase zoom" id="zoomDecrease" class="toolbar-control zoom-out"></div>
126
+ <div title="reset zoom" id="zoomReset" class="toolbar-control"
127
+ style="width: 16px; height: 16px; font-size: 14px; display: flex; align-items: center; justify-content: center;">1
128
+ </div>
129
+ <div title="zoom to fit" id="zoomFit" class="toolbar-control"
130
+ style="width: 16px; height: 16px; font-size: 8px; display: flex; align-items: center; justify-content: center;">
131
+ 100%</div>
132
+ <div title="snap to grid" id="alignGrid" class="toolbar-control snap-grid"></div>
133
+ <div title="snap to elements" id="alignSnap" class="toolbar-control snap-guide"></div>
134
+ </div>
135
+ </div>`;
103
136
  constructor() {
104
137
  super();
105
138
  const outer = this._getDomElement('outer');
@@ -130,12 +163,32 @@ export class DesignerView extends BaseCustomWebComponentConstructorAppend {
130
163
  };
131
164
  let zoomReset = this._getDomElement('zoomReset');
132
165
  zoomReset.onclick = () => {
166
+ this._designerCanvas.canvasOffset = { x: 0, y: 0 };
133
167
  this._designerCanvas.zoomFactor = 1;
168
+ this._sVert.value = 0.5;
169
+ this._sHor.value = 0.5;
134
170
  this._zoomInput.value = Math.round(this._designerCanvas.zoomFactor * 100) + '%';
135
171
  };
136
172
  let zoomFit = this._getDomElement('zoomFit');
137
173
  zoomFit.onclick = () => {
138
- this._designerCanvas.zoomFactor = 7.7;
174
+ let maxX = 0, maxY = 0, minX = 0, minY = 0;
175
+ this._designerCanvas.canvasOffset = { x: 0, y: 0 };
176
+ this._designerCanvas.zoomFactor = 1;
177
+ for (let n of DomHelper.getAllChildNodes(this.designerCanvas.rootDesignItem.element)) {
178
+ if (n instanceof Element) {
179
+ const rect = n.getBoundingClientRect();
180
+ minX = minX < rect.x ? minX : rect.x;
181
+ minY = minY < rect.y ? minY : rect.y;
182
+ maxX = maxX > rect.x + rect.width + autoZomOffset ? maxX : rect.x + rect.width + autoZomOffset;
183
+ maxY = maxY > rect.y + rect.height + autoZomOffset ? maxY : rect.y + rect.height + autoZomOffset;
184
+ }
185
+ }
186
+ const cvRect = this.designerCanvas.getBoundingClientRect();
187
+ maxX -= cvRect.x;
188
+ maxY -= cvRect.y;
189
+ let scaleX = cvRect.width / (maxX / this._designerCanvas.zoomFactor);
190
+ let scaleY = cvRect.height / (maxY / this._designerCanvas.zoomFactor);
191
+ this._designerCanvas.zoomFactor = scaleX < scaleY ? scaleX : scaleY;
139
192
  this._zoomInput.value = Math.round(this._designerCanvas.zoomFactor * 100) + '%';
140
193
  };
141
194
  this.addEventListener(EventNames.Wheel, event => this._onWheel(event));
@@ -146,6 +199,15 @@ export class DesignerView extends BaseCustomWebComponentConstructorAppend {
146
199
  alignGrid.onclick = () => { this._designerCanvas.alignOnGrid = !this._designerCanvas.alignOnGrid; alignGrid.style.backgroundColor = this._designerCanvas.alignOnGrid ? 'deepskyblue' : ''; };
147
200
  alignGrid.style.backgroundColor = this._designerCanvas.alignOnGrid ? 'deepskyblue' : '';
148
201
  this._lowertoolbar = this._getDomElement('lowertoolbar');
202
+ this._sVert = this._getDomElement('s-vert');
203
+ this._sHor = this._getDomElement('s-hor');
204
+ this._sVert.addEventListener('scrollbar-input', () => this._onScrollbar());
205
+ this._sHor.addEventListener('scrollbar-input', () => this._onScrollbar());
206
+ }
207
+ _onScrollbar() {
208
+ const x = this.designerCanvas.offsetWidth * (this._sHor.value - 0.5) * -1;
209
+ const y = this.designerCanvas.offsetHeight * (this._sVert.value - 0.5) * -1;
210
+ this.designerCanvas.canvasOffset = { x, y };
149
211
  }
150
212
  _onWheel(event) {
151
213
  if (event.ctrlKey) {
@@ -196,13 +258,14 @@ export class DesignerView extends BaseCustomWebComponentConstructorAppend {
196
258
  }
197
259
  }
198
260
  getHTML(designItemsAssignmentList) {
199
- this.instanceServiceContainer.selectionService.setSelectedElements(null);
261
+ //this.instanceServiceContainer.selectionService.setSelectedElements(null);
200
262
  return DomConverter.ConvertToString([...this._designerCanvas.rootDesignItem.children()], designItemsAssignmentList);
201
263
  }
202
264
  async parseHTML(html) {
203
265
  const parserService = this.serviceContainer.htmlParserService;
204
266
  if (!html) {
205
267
  this.instanceServiceContainer.undoService.clear();
268
+ this._designerCanvas.overlayLayer.removeAllOverlays();
206
269
  DomHelper.removeAllChildnodes(this._designerCanvas.overlayLayer);
207
270
  this._designerCanvas.rootDesignItem.clearChildren();
208
271
  }
@@ -10,9 +10,9 @@ export class AltToEnterContainerExtension extends AbstractExtension {
10
10
  this.refresh();
11
11
  }
12
12
  refresh() {
13
- let itemRect = this.extendedItem.element.getBoundingClientRect();
14
- this._text = this._drawText("Press ALT to enter container", itemRect.x - this.designerCanvas.containerBoundingRect.x + 5, itemRect.y - this.designerCanvas.containerBoundingRect.y + 12, 'svg-text-enter-container', this._text, OverlayLayer.Background);
15
- this._rect = this._drawRect(itemRect.x - this.designerCanvas.containerBoundingRect.x, itemRect.y - this.designerCanvas.containerBoundingRect.y, itemRect.width, itemRect.height, 'svg-rect-enter-container', this._rect, OverlayLayer.Background);
13
+ let itemRect = this.designerCanvas.getNormalizedElementCoordinates(this.extendedItem.element);
14
+ this._text = this._drawText("Press ALT to enter container", itemRect.x + 5, itemRect.y + 12, 'svg-text-enter-container', this._text, OverlayLayer.Foregorund);
15
+ this._rect = this._drawRect(itemRect.x, itemRect.y, itemRect.width, itemRect.height, 'svg-rect-enter-container', this._rect, OverlayLayer.Foregorund);
16
16
  }
17
17
  dispose() {
18
18
  this._removeAllOverlays();
@@ -12,7 +12,7 @@ export class MouseOverExtension extends AbstractExtension {
12
12
  let itemRect = this.extendedItem.element.getBoundingClientRect();
13
13
  const xOffset = itemRect.x - this.designerCanvas.containerBoundingRect.x;
14
14
  const yOffset = itemRect.y - this.designerCanvas.containerBoundingRect.y;
15
- this._rect = this._drawRect(xOffset - offset, yOffset - offset, itemRect.width + offset + offset, itemRect.height + offset + offset, 'svg-hover', this._rect);
15
+ this._rect = this._drawRect((xOffset - offset) / this.designerCanvas.scaleFactor, (yOffset - offset) / this.designerCanvas.scaleFactor, (itemRect.width + offset + offset) / this.designerCanvas.scaleFactor, (itemRect.height + offset + offset) / this.designerCanvas.scaleFactor, 'svg-hover', this._rect);
16
16
  }
17
17
  dispose() {
18
18
  this._removeAllOverlays();
@@ -34,10 +34,10 @@ export class PositionExtension extends AbstractExtension {
34
34
  tx = Number.parseFloat(transforms[4]);
35
35
  ty = Number.parseFloat(transforms[5].replace(')', ''));
36
36
  }
37
- this._line1 = this._drawLine(xOffset - left - tx, yOffset + itemRect.height / 2, xOffset, yOffset + itemRect.height / 2, 'svg-position', this._line1);
38
- this._line2 = this._drawLine(xOffset + itemRect.width / 2, yOffset - top - ty, xOffset + itemRect.width / 2, yOffset, 'svg-position', this._line2);
39
- this._line3 = this._drawLine(xOffset + itemRect.width, yOffset + itemRect.height / 2, xOffset + itemRect.width + right + -1 * tx, yOffset + itemRect.height / 2, 'svg-position', this._line3);
40
- this._line4 = this._drawLine(xOffset + itemRect.width / 2, yOffset + itemRect.height, xOffset + itemRect.width / 2, yOffset + itemRect.height + bottom + -1 * ty, 'svg-position', this._line4);
37
+ this._line1 = this._drawLine((xOffset / this.designerCanvas.scaleFactor - left - tx), (yOffset + itemRect.height / 2) / this.designerCanvas.scaleFactor, xOffset / this.designerCanvas.scaleFactor, (yOffset + itemRect.height / 2) / this.designerCanvas.scaleFactor, 'svg-position', this._line1);
38
+ this._line2 = this._drawLine((xOffset + itemRect.width / 2) / this.designerCanvas.scaleFactor, (yOffset / this.designerCanvas.scaleFactor) - top - ty, (xOffset + itemRect.width / 2) / this.designerCanvas.scaleFactor, yOffset / this.designerCanvas.scaleFactor, 'svg-position', this._line2);
39
+ this._line3 = this._drawLine((xOffset + itemRect.width) / this.designerCanvas.scaleFactor, (yOffset + itemRect.height / 2) / this.designerCanvas.scaleFactor, (xOffset + itemRect.width + right + -1 * tx) / this.designerCanvas.scaleFactor, (yOffset + itemRect.height / 2) / this.designerCanvas.scaleFactor, 'svg-position', this._line3);
40
+ this._line4 = this._drawLine((xOffset + itemRect.width / 2) / this.designerCanvas.scaleFactor, (yOffset + itemRect.height) / this.designerCanvas.scaleFactor, (xOffset + itemRect.width / 2) / this.designerCanvas.scaleFactor, (yOffset + itemRect.height + bottom + -1 * ty) / this.designerCanvas.scaleFactor, 'svg-position', this._line4);
41
41
  }
42
42
  dispose() {
43
43
  this._removeAllOverlays();
@@ -12,8 +12,8 @@ export class PrimarySelectionDefaultExtension extends AbstractExtension {
12
12
  }
13
13
  refresh() {
14
14
  const boundRect = this.extendedItem.element.getBoundingClientRect();
15
- this._rect = this._drawRect(boundRect.x - this.designerCanvas.containerBoundingRect.x, boundRect.y - this.designerCanvas.containerBoundingRect.y - 16, 60, 15, 'svg-primary-selection-move', this._rect);
16
- this._text = this._drawText(this.extendedItem.name.substring(0, 10) + '…', boundRect.x - this.designerCanvas.containerBoundingRect.x, boundRect.y - this.designerCanvas.containerBoundingRect.y - 5, 'svg-text-primary', this._text);
15
+ this._rect = this._drawRect((boundRect.x - this.designerCanvas.containerBoundingRect.x) / this.designerCanvas.scaleFactor, (boundRect.y - this.designerCanvas.containerBoundingRect.y) / this.designerCanvas.scaleFactor - 16, 60, 15, 'svg-primary-selection-move', this._rect);
16
+ this._text = this._drawText(this.extendedItem.name.substring(0, 10) + '…', (boundRect.x - this.designerCanvas.containerBoundingRect.x) / this.designerCanvas.scaleFactor, (boundRect.y - this.designerCanvas.containerBoundingRect.y) / this.designerCanvas.scaleFactor - 5, 'svg-text-primary', this._text);
17
17
  }
18
18
  dispose() {
19
19
  this._removeAllOverlays();
@@ -7,6 +7,7 @@ export declare class ResizeExtension extends AbstractExtension {
7
7
  private _initialSizes;
8
8
  private _actionModeStarted;
9
9
  private _initialPoint;
10
+ private _offsetPoint;
10
11
  private _circle1;
11
12
  private _circle2;
12
13
  private _circle3;
@@ -19,6 +20,6 @@ export declare class ResizeExtension extends AbstractExtension {
19
20
  extend(): void;
20
21
  refresh(): void;
21
22
  _drawResizerOverlay(x: number, y: number, cursor: string, oldCircle?: SVGCircleElement): SVGCircleElement;
22
- _pointerActionTypeResize(event: PointerEvent, actionMode?: string): void;
23
+ _pointerActionTypeResize(circle: SVGCircleElement, event: PointerEvent, actionMode?: string): void;
23
24
  dispose(): void;
24
25
  }
@@ -5,6 +5,7 @@ export class ResizeExtension extends AbstractExtension {
5
5
  _initialSizes;
6
6
  _actionModeStarted;
7
7
  _initialPoint;
8
+ _offsetPoint;
8
9
  _circle1;
9
10
  _circle2;
10
11
  _circle3;
@@ -21,14 +22,14 @@ export class ResizeExtension extends AbstractExtension {
21
22
  }
22
23
  refresh() {
23
24
  const rect = this.extendedItem.element.getBoundingClientRect();
24
- this._circle1 = this._drawResizerOverlay(rect.x - this.designerCanvas.containerBoundingRect.x, rect.y - this.designerCanvas.containerBoundingRect.y, 'nw-resize', this._circle1);
25
- this._circle2 = this._drawResizerOverlay(rect.x + (rect.width / 2) - this.designerCanvas.containerBoundingRect.x, rect.y - this.designerCanvas.containerBoundingRect.y, 'n-resize', this._circle2);
26
- this._circle3 = this._drawResizerOverlay(rect.x + rect.width - this.designerCanvas.containerBoundingRect.x, rect.y - this.designerCanvas.containerBoundingRect.y, 'ne-resize', this._circle3);
27
- this._circle4 = this._drawResizerOverlay(rect.x - this.designerCanvas.containerBoundingRect.x, rect.y + rect.height - this.designerCanvas.containerBoundingRect.y, 'sw-resize', this._circle4);
28
- this._circle5 = this._drawResizerOverlay(rect.x + (rect.width / 2) - this.designerCanvas.containerBoundingRect.x, rect.y + rect.height - this.designerCanvas.containerBoundingRect.y, 's-resize', this._circle5);
29
- this._circle6 = this._drawResizerOverlay(rect.x + rect.width - this.designerCanvas.containerBoundingRect.x, rect.y + rect.height - this.designerCanvas.containerBoundingRect.y, 'se-resize', this._circle6);
30
- this._circle7 = this._drawResizerOverlay(rect.x - this.designerCanvas.containerBoundingRect.x, rect.y + (rect.height / 2) - this.designerCanvas.containerBoundingRect.y, 'w-resize', this._circle7);
31
- this._circle8 = this._drawResizerOverlay(rect.x + rect.width - this.designerCanvas.containerBoundingRect.x, rect.y + (rect.height / 2) - this.designerCanvas.containerBoundingRect.y, 'e-resize', this._circle8);
25
+ this._circle1 = this._drawResizerOverlay((rect.x - this.designerCanvas.containerBoundingRect.x) / this.designerCanvas.scaleFactor, (rect.y - this.designerCanvas.containerBoundingRect.y) / this.designerCanvas.scaleFactor, 'nw-resize', this._circle1);
26
+ this._circle2 = this._drawResizerOverlay((rect.x + (rect.width / 2) - this.designerCanvas.containerBoundingRect.x) / this.designerCanvas.scaleFactor, (rect.y - this.designerCanvas.containerBoundingRect.y) / this.designerCanvas.scaleFactor, 'n-resize', this._circle2);
27
+ this._circle3 = this._drawResizerOverlay((rect.x + rect.width - this.designerCanvas.containerBoundingRect.x) / this.designerCanvas.scaleFactor, (rect.y - this.designerCanvas.containerBoundingRect.y) / this.designerCanvas.scaleFactor, 'ne-resize', this._circle3);
28
+ this._circle4 = this._drawResizerOverlay((rect.x - this.designerCanvas.containerBoundingRect.x) / this.designerCanvas.scaleFactor, (rect.y + rect.height - this.designerCanvas.containerBoundingRect.y) / this.designerCanvas.scaleFactor, 'sw-resize', this._circle4);
29
+ this._circle5 = this._drawResizerOverlay((rect.x + (rect.width / 2) - this.designerCanvas.containerBoundingRect.x) / this.designerCanvas.scaleFactor, (rect.y + rect.height - this.designerCanvas.containerBoundingRect.y) / this.designerCanvas.scaleFactor, 's-resize', this._circle5);
30
+ this._circle6 = this._drawResizerOverlay((rect.x + rect.width - this.designerCanvas.containerBoundingRect.x) / this.designerCanvas.scaleFactor, (rect.y + rect.height - this.designerCanvas.containerBoundingRect.y) / this.designerCanvas.scaleFactor, 'se-resize', this._circle6);
31
+ this._circle7 = this._drawResizerOverlay((rect.x - this.designerCanvas.containerBoundingRect.x) / this.designerCanvas.scaleFactor, (rect.y + (rect.height / 2) - this.designerCanvas.containerBoundingRect.y) / this.designerCanvas.scaleFactor, 'w-resize', this._circle7);
32
+ this._circle8 = this._drawResizerOverlay((rect.x + rect.width - this.designerCanvas.containerBoundingRect.x) / this.designerCanvas.scaleFactor, (rect.y + (rect.height / 2) - this.designerCanvas.containerBoundingRect.y) / this.designerCanvas.scaleFactor, 'e-resize', this._circle8);
32
33
  if (rect.width < 12) {
33
34
  this._circle2.style.display = 'none';
34
35
  this._circle5.style.display = 'none';
@@ -49,25 +50,28 @@ export class ResizeExtension extends AbstractExtension {
49
50
  _drawResizerOverlay(x, y, cursor, oldCircle) {
50
51
  let circle = this._drawCircle(x, y, 3, 'svg-primary-resizer', oldCircle);
51
52
  if (!oldCircle) {
52
- circle.addEventListener(EventNames.PointerDown, event => this._pointerActionTypeResize(event, cursor));
53
- circle.addEventListener(EventNames.PointerMove, event => this._pointerActionTypeResize(event, cursor));
54
- circle.addEventListener(EventNames.PointerUp, event => this._pointerActionTypeResize(event, cursor));
53
+ circle.addEventListener(EventNames.PointerDown, event => this._pointerActionTypeResize(circle, event, cursor));
54
+ circle.addEventListener(EventNames.PointerMove, event => this._pointerActionTypeResize(circle, event, cursor));
55
+ circle.addEventListener(EventNames.PointerUp, event => this._pointerActionTypeResize(circle, event, cursor));
55
56
  }
56
57
  circle.setAttribute('style', 'cursor: ' + cursor);
57
58
  return circle;
58
59
  }
59
- _pointerActionTypeResize(event, actionMode = 'se-resize') {
60
+ _pointerActionTypeResize(circle, event, actionMode = 'se-resize') {
60
61
  event.stopPropagation();
61
62
  const currentPoint = this.designerCanvas.getNormalizedEventCoordinates(event); //, this.extendedItem.element, event.type === 'pointerdown' ? null : this._initialPoint);
62
63
  switch (event.type) {
63
64
  case EventNames.PointerDown:
65
+ const cx = parseFloat(circle.getAttribute('cx'));
66
+ const cy = parseFloat(circle.getAttribute('cy'));
67
+ this._offsetPoint = { x: cx - currentPoint.x, y: cy - currentPoint.y };
64
68
  event.target.setPointerCapture(event.pointerId);
65
69
  this._initialPoint = currentPoint;
66
70
  this._initialSizes = [];
67
71
  this._actionModeStarted = actionMode;
68
72
  for (const designItem of this.designerCanvas.instanceServiceContainer.selectionService.selectedElements) {
69
73
  let rect = designItem.element.getBoundingClientRect();
70
- this._initialSizes.push({ width: rect.width, height: rect.height });
74
+ this._initialSizes.push({ width: rect.width / this.designerCanvas.scaleFactor, height: rect.height / this.designerCanvas.scaleFactor });
71
75
  }
72
76
  if (this.designerCanvas.alignOnSnap)
73
77
  this.designerCanvas.snapLines.calculateSnaplines(this.designerCanvas.instanceServiceContainer.selectionService.selectedElements);
@@ -77,8 +81,8 @@ export class ResizeExtension extends AbstractExtension {
77
81
  const containerStyle = getComputedStyle(this.extendedItem.parent.element);
78
82
  const containerService = this.designerCanvas.serviceContainer.getLastServiceWhere('containerService', x => x.serviceForContainer(this.extendedItem.parent, containerStyle));
79
83
  const diff = containerService.placePoint(event, this.designerCanvas, this.extendedItem.parent, this._initialPoint, { x: 0, y: 0 }, currentPoint, this.designerCanvas.instanceServiceContainer.selectionService.selectedElements);
80
- let trackX = diff.x - this._initialPoint.x;
81
- let trackY = diff.y - this._initialPoint.y;
84
+ let trackX = diff.x - this._initialPoint.x - this._offsetPoint.x;
85
+ let trackY = diff.y - this._initialPoint.y - this._offsetPoint.y;
82
86
  let i = 0;
83
87
  switch (this._actionModeStarted) {
84
88
  case 'se-resize':
@@ -26,7 +26,7 @@ export class RotateExtension extends AbstractExtension {
26
26
  g.addEventListener(EventNames.PointerMove, event => this._pointerActionTypeRotate(event));
27
27
  g.addEventListener(EventNames.PointerUp, event => this._pointerActionTypeRotate(event));
28
28
  g.setAttribute('class', 'svg-primary-rotate');
29
- g.setAttribute('transform', 'translate(' + (itemRect.x - this.designerCanvas.containerBoundingRect.x - 13) + ',' + (itemRect.y - this.designerCanvas.containerBoundingRect.y - 8.5) + ')');
29
+ g.setAttribute('transform', 'translate(' + ((itemRect.x - this.designerCanvas.containerBoundingRect.x) / this.designerCanvas.scaleFactor - 13) + ',' + ((itemRect.y - this.designerCanvas.containerBoundingRect.y) / this.designerCanvas.scaleFactor - 8.5) + ')');
30
30
  this.overlayLayerView.addOverlay(g);
31
31
  this.overlays.push(g);
32
32
  }
@@ -8,13 +8,13 @@ export class SelectionDefaultExtension extends AbstractExtension {
8
8
  this.refresh();
9
9
  }
10
10
  refresh() {
11
- const itemRect = this.extendedItem.element.getBoundingClientRect();
11
+ const itemRect = this.designerCanvas.getNormalizedElementCoordinates(this.extendedItem.element);
12
12
  const computedStyle = getComputedStyle(this.extendedItem.element);
13
13
  const left = Number.parseFloat(computedStyle.marginLeft.replace('px', ''));
14
14
  const top = Number.parseFloat(computedStyle.marginTop.replace('px', ''));
15
15
  const right = Number.parseFloat(computedStyle.marginRight.replace('px', ''));
16
16
  const bottom = Number.parseFloat(computedStyle.marginBottom.replace('px', ''));
17
- this._rect = this._drawRect(itemRect.x - this.designerCanvas.containerBoundingRect.x - left, itemRect.y - this.designerCanvas.containerBoundingRect.y - top, left + itemRect.width + right, top + itemRect.height + bottom, 'svg-selection', this._rect);
17
+ this._rect = this._drawRect(itemRect.x - left, itemRect.y - top, left + itemRect.width + right, top + itemRect.height + bottom, 'svg-selection', this._rect);
18
18
  }
19
19
  dispose() {
20
20
  this._removeAllOverlays();
@@ -11,9 +11,9 @@ export class TransformOriginExtension extends AbstractExtension {
11
11
  const rect = this.extendedItem.element.getBoundingClientRect();
12
12
  const computed = getComputedStyle(this.extendedItem.element);
13
13
  const to = computed.transformOrigin.split(' ');
14
- this._circle = this._drawCircle(rect.x - this.designerCanvas.containerBoundingRect.x + Number.parseFloat(to[0].replace('px', '')), rect.y - this.designerCanvas.containerBoundingRect.y + Number.parseFloat(to[1].replace('px', '')), 5, 'svg-transform-origin');
14
+ this._circle = this._drawCircle((rect.x - this.designerCanvas.containerBoundingRect.x) / this.designerCanvas.scaleFactor + Number.parseFloat(to[0].replace('px', '')), (rect.y - this.designerCanvas.containerBoundingRect.y) / this.designerCanvas.scaleFactor + Number.parseFloat(to[1].replace('px', '')), 5, 'svg-transform-origin');
15
15
  this._circle.setAttribute('style', 'cursor: pointer');
16
- this._circle2 = this._drawCircle(rect.x - this.designerCanvas.containerBoundingRect.x + Number.parseFloat(to[0].replace('px', '')), rect.y - this.designerCanvas.containerBoundingRect.y + Number.parseFloat(to[1].replace('px', '')), 1, 'svg-transform-origin');
16
+ this._circle2 = this._drawCircle((rect.x - this.designerCanvas.containerBoundingRect.x) / this.designerCanvas.scaleFactor + Number.parseFloat(to[0].replace('px', '')), (rect.y - this.designerCanvas.containerBoundingRect.y) / this.designerCanvas.scaleFactor + Number.parseFloat(to[1].replace('px', '')), 1, 'svg-transform-origin');
17
17
  this._circle2.setAttribute('style', 'pointer-events: none');
18
18
  this._circle.addEventListener(EventNames.PointerDown, event => this.pointerEvent(event));
19
19
  this._circle.addEventListener(EventNames.PointerMove, event => this.pointerEvent(event));
@@ -15,6 +15,7 @@ export declare class OverlayLayerView extends BaseCustomWebComponentConstructorA
15
15
  addOverlay(element: SVGGraphicsElement, overlayLayer?: OverlayLayer): void;
16
16
  removeOverlay(element: SVGGraphicsElement): void;
17
17
  removeAllNodesWithClass(className: string): void;
18
+ removeAllOverlays(): void;
18
19
  createPoint(): DOMPointInit;
19
20
  elementFromPoint(x: number, y: number): Element;
20
21
  drawLine(x1: number, y1: number, x2: number, y2: number, className?: string, line?: SVGLineElement, overlayLayer?: OverlayLayer): SVGLineElement;
@@ -80,6 +80,12 @@ export class OverlayLayerView extends BaseCustomWebComponentConstructorAppend {
80
80
  e.parentNode.removeChild(e);
81
81
  }
82
82
  }
83
+ removeAllOverlays() {
84
+ const nodes = this._svg.querySelectorAll('svg > g > *');
85
+ for (const e of nodes) {
86
+ e.parentNode.removeChild(e);
87
+ }
88
+ }
83
89
  createPoint() {
84
90
  //@ts-ignore
85
91
  return this._svg.createSVGPoint();
@@ -0,0 +1,15 @@
1
+ import { IDesignerCanvas } from '../IDesignerCanvas';
2
+ import { ITool } from './ITool';
3
+ import { ServiceContainer } from '../../../services/ServiceContainer.js';
4
+ export declare class DrawEllipsisTool implements ITool {
5
+ readonly cursor = "crosshair";
6
+ private _path;
7
+ private _startPoint;
8
+ private _radius;
9
+ private _cx;
10
+ private _cy;
11
+ constructor();
12
+ activated(serviceContainer: ServiceContainer): void;
13
+ dispose(): void;
14
+ pointerEventHandler(designerCanvas: IDesignerCanvas, event: PointerEvent, currentElement: Element): void;
15
+ }
@@ -0,0 +1,90 @@
1
+ import { EventNames } from '../../../../enums/EventNames';
2
+ import { OverlayLayer } from '../extensions/OverlayLayer.js';
3
+ import { calculateNormLegth } from '../../../helper/PathDataPolyfill';
4
+ import { DesignItem } from '../../../item/DesignItem';
5
+ import { InsertAction } from '../../../services/undoService/transactionItems/InsertAction';
6
+ export class DrawEllipsisTool {
7
+ cursor = 'crosshair';
8
+ _path;
9
+ _startPoint;
10
+ _radius;
11
+ _cx;
12
+ _cy;
13
+ constructor() {
14
+ }
15
+ activated(serviceContainer) {
16
+ }
17
+ dispose() {
18
+ }
19
+ pointerEventHandler(designerCanvas, event, currentElement) {
20
+ const currentPoint = designerCanvas.getNormalizedEventCoordinates(event);
21
+ const offset = 50;
22
+ switch (event.type) {
23
+ case EventNames.PointerDown:
24
+ this._startPoint = currentPoint;
25
+ event.target.setPointerCapture(event.pointerId);
26
+ this._path = document.createElementNS("http://www.w3.org/2000/svg", "ellipse");
27
+ this._path.setAttribute("stroke", designerCanvas.serviceContainer.globalContext.strokeColor);
28
+ this._path.setAttribute("fill", designerCanvas.serviceContainer.globalContext.fillBrush);
29
+ this._path.setAttribute("stroke-width", designerCanvas.serviceContainer.globalContext.strokeThickness);
30
+ this._path.setAttribute("cx", currentPoint.x.toString());
31
+ this._path.setAttribute("cy", currentPoint.y.toString());
32
+ this._path.setAttribute("rx", "0");
33
+ this._path.setAttribute("ry", "0");
34
+ designerCanvas.overlayLayer.addOverlay(this._path, OverlayLayer.Foregorund);
35
+ break;
36
+ case EventNames.PointerMove:
37
+ if (this._path) {
38
+ this._radius = { x: Math.abs(currentPoint.x - this._startPoint.x), y: Math.abs(currentPoint.y - this._startPoint.y) };
39
+ if (event.ctrlKey) {
40
+ this._path.setAttribute("cx", this._startPoint.x.toString());
41
+ this._path.setAttribute("cy", this._startPoint.y.toString());
42
+ this._cx = this._startPoint.x;
43
+ this._cy = this._startPoint.y;
44
+ if (event.shiftKey) {
45
+ const radius = calculateNormLegth(this._startPoint, currentPoint);
46
+ this._path.setAttribute("rx", radius.toString());
47
+ this._path.setAttribute("ry", radius.toString());
48
+ }
49
+ else {
50
+ this._path.setAttribute("rx", this._radius.x.toString());
51
+ this._path.setAttribute("ry", this._radius.y.toString());
52
+ }
53
+ }
54
+ else {
55
+ if (event.shiftKey) {
56
+ const radius = calculateNormLegth(this._startPoint, currentPoint);
57
+ this._radius = { x: radius, y: radius };
58
+ }
59
+ this._cx = currentPoint.x < this._startPoint.x ? this._startPoint.x - this._radius.x / 2 : this._startPoint.x + this._radius.x / 2;
60
+ this._cy = currentPoint.y < this._startPoint.y ? this._startPoint.y - this._radius.y / 2 : this._startPoint.y + this._radius.y / 2;
61
+ this._path.setAttribute("cx", this._cx.toString());
62
+ this._path.setAttribute("cy", this._cy.toString());
63
+ this._path.setAttribute("rx", (this._radius.x / 2).toString());
64
+ this._path.setAttribute("ry", (this._radius.y / 2).toString());
65
+ }
66
+ }
67
+ break;
68
+ case EventNames.PointerUp:
69
+ event.target.releasePointerCapture(event.pointerId);
70
+ const rect = this._path.getBoundingClientRect();
71
+ designerCanvas.overlayLayer.removeOverlay(this._path);
72
+ const svg = document.createElementNS("http://www.w3.org/2000/svg", "svg");
73
+ const mvX = rect.x - designerCanvas.containerBoundingRect.x - offset;
74
+ const mvY = rect.y - designerCanvas.containerBoundingRect.y - offset;
75
+ svg.appendChild(this._path);
76
+ this._path.setAttribute("cx", (this._cx - mvX).toString());
77
+ this._path.setAttribute("cy", (this._cy - mvY).toString());
78
+ svg.style.left = (mvX) + 'px';
79
+ svg.style.top = (mvY) + 'px';
80
+ svg.style.position = 'absolute';
81
+ svg.style.width = (rect.width + 2 * offset) + 'px';
82
+ svg.style.height = (rect.height + 2 * offset) + 'px';
83
+ this._path = null;
84
+ const di = DesignItem.createDesignItemFromInstance(svg, designerCanvas.serviceContainer, designerCanvas.instanceServiceContainer);
85
+ designerCanvas.instanceServiceContainer.undoService.execute(new InsertAction(designerCanvas.rootDesignItem, designerCanvas.rootDesignItem.childCount, di));
86
+ designerCanvas.serviceContainer.globalContext.finishedWithTool(this);
87
+ break;
88
+ }
89
+ }
90
+ }
@@ -0,0 +1,13 @@
1
+ import { IDesignerCanvas } from '../IDesignerCanvas';
2
+ import { ITool } from './ITool';
3
+ import { ServiceContainer } from '../../../services/ServiceContainer.js';
4
+ export declare class DrawLineTool implements ITool {
5
+ readonly cursor = "crosshair";
6
+ private _path;
7
+ private _startPoint;
8
+ private _endPoint;
9
+ constructor();
10
+ activated(serviceContainer: ServiceContainer): void;
11
+ dispose(): void;
12
+ pointerEventHandler(designerCanvas: IDesignerCanvas, event: PointerEvent, currentElement: Element): void;
13
+ }
@@ -0,0 +1,75 @@
1
+ import { EventNames } from '../../../../enums/EventNames';
2
+ import { OverlayLayer } from '../extensions/OverlayLayer.js';
3
+ import { straightenLine } from '../../../helper/PathDataPolyfill';
4
+ import { DesignItem } from '../../../item/DesignItem';
5
+ import { InsertAction } from '../../../services/undoService/transactionItems/InsertAction';
6
+ export class DrawLineTool {
7
+ cursor = 'crosshair';
8
+ _path;
9
+ _startPoint;
10
+ _endPoint;
11
+ constructor() {
12
+ }
13
+ activated(serviceContainer) {
14
+ }
15
+ dispose() {
16
+ }
17
+ pointerEventHandler(designerCanvas, event, currentElement) {
18
+ const currentPoint = designerCanvas.getNormalizedEventCoordinates(event);
19
+ const offset = 50;
20
+ switch (event.type) {
21
+ case EventNames.PointerDown:
22
+ this._startPoint = currentPoint;
23
+ event.target.setPointerCapture(event.pointerId);
24
+ this._path = document.createElementNS("http://www.w3.org/2000/svg", "line");
25
+ // this._pathD = "M" + currentPoint.x + " " + currentPoint.y;
26
+ // this._path.setAttribute("d", this._pathD);
27
+ this._path.setAttribute("stroke", designerCanvas.serviceContainer.globalContext.strokeColor);
28
+ this._path.setAttribute("stroke-width", designerCanvas.serviceContainer.globalContext.strokeThickness);
29
+ this._path.setAttribute("x1", currentPoint.x.toString());
30
+ this._path.setAttribute("y1", currentPoint.y.toString());
31
+ this._path.setAttribute("x2", currentPoint.x.toString());
32
+ this._path.setAttribute("y2", currentPoint.y.toString());
33
+ designerCanvas.overlayLayer.addOverlay(this._path, OverlayLayer.Foregorund);
34
+ break;
35
+ case EventNames.PointerMove:
36
+ if (this._path) {
37
+ if (event.shiftKey) {
38
+ let straightLine = straightenLine(this._startPoint, currentPoint);
39
+ this._path.setAttribute("x2", straightLine.x.toString());
40
+ this._path.setAttribute("y2", straightLine.y.toString());
41
+ this._endPoint = straightLine;
42
+ }
43
+ else {
44
+ //this._path.setAttribute("d", this._pathD + "L" + currentPoint.x + " " + currentPoint.y);
45
+ this._path.setAttribute("x2", currentPoint.x.toString());
46
+ this._path.setAttribute("y2", currentPoint.y.toString());
47
+ this._endPoint = currentPoint;
48
+ }
49
+ }
50
+ break;
51
+ case EventNames.PointerUp:
52
+ event.target.releasePointerCapture(event.pointerId);
53
+ const rect = this._path.getBoundingClientRect();
54
+ designerCanvas.overlayLayer.removeOverlay(this._path);
55
+ const svg = document.createElementNS("http://www.w3.org/2000/svg", "svg");
56
+ const mvX = rect.x - designerCanvas.containerBoundingRect.x - offset;
57
+ const mvY = rect.y - designerCanvas.containerBoundingRect.y - offset;
58
+ this._path.setAttribute("x1", (this._startPoint.x - mvX).toString());
59
+ this._path.setAttribute("y1", (this._startPoint.y - mvY).toString());
60
+ this._path.setAttribute("x2", (this._endPoint.x - mvX).toString());
61
+ this._path.setAttribute("y2", (this._endPoint.y - mvY).toString());
62
+ svg.appendChild(this._path);
63
+ svg.style.left = (mvX) + 'px';
64
+ svg.style.top = (mvY) + 'px';
65
+ svg.style.position = 'absolute';
66
+ svg.style.width = (rect.width + 2 * offset) + 'px';
67
+ svg.style.height = (rect.height + 2 * offset) + 'px';
68
+ this._path = null;
69
+ const di = DesignItem.createDesignItemFromInstance(svg, designerCanvas.serviceContainer, designerCanvas.instanceServiceContainer);
70
+ designerCanvas.instanceServiceContainer.undoService.execute(new InsertAction(designerCanvas.rootDesignItem, designerCanvas.rootDesignItem.childCount, di));
71
+ designerCanvas.serviceContainer.globalContext.finishedWithTool(this);
72
+ break;
73
+ }
74
+ }
75
+ }
@@ -1,7 +1,6 @@
1
1
  import { IDesignerCanvas } from '../IDesignerCanvas';
2
2
  import { ITool } from './ITool';
3
3
  import { ServiceContainer } from '../../../services/ServiceContainer.js';
4
- import { IPoint } from '../../../..';
5
4
  export declare class DrawPathTool implements ITool {
6
5
  readonly cursor = "crosshair";
7
6
  private _pathD;
@@ -17,5 +16,4 @@ export declare class DrawPathTool implements ITool {
17
16
  activated(serviceContainer: ServiceContainer): void;
18
17
  dispose(): void;
19
18
  pointerEventHandler(designerCanvas: IDesignerCanvas, event: PointerEvent, currentElement: Element): void;
20
- straightenLine(p1: IPoint, p2: IPoint): IPoint;
21
19
  }