@node-projects/web-component-designer 0.0.150 → 0.0.152
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/elements/helper/ElementHelper.d.ts +5 -0
- package/dist/elements/helper/ElementHelper.js +20 -0
- package/dist/elements/helper/GridHelper.js +2 -2
- package/dist/elements/helper/LayoutHelper.js +8 -2
- package/dist/elements/helper/TransformHelper.d.ts +17 -3
- package/dist/elements/helper/TransformHelper.js +204 -13
- package/dist/elements/services/DefaultServiceBootstrap.js +10 -2
- package/dist/elements/services/placementService/DefaultPlacementService.d.ts +1 -0
- package/dist/elements/services/placementService/DefaultPlacementService.js +24 -8
- package/dist/elements/services/placementService/FlexBoxPlacementService.d.ts +1 -0
- package/dist/elements/services/placementService/FlexBoxPlacementService.js +2 -0
- package/dist/elements/services/placementService/GridPlacementService.d.ts +1 -0
- package/dist/elements/services/placementService/GridPlacementService.js +2 -0
- package/dist/elements/services/placementService/IPlacementService.d.ts +1 -0
- package/dist/elements/widgets/designerView/IDesignerCanvas.d.ts +4 -0
- package/dist/elements/widgets/designerView/IPlacementView.d.ts +0 -1
- package/dist/elements/widgets/designerView/designerCanvas.d.ts +2 -2
- package/dist/elements/widgets/designerView/designerCanvas.js +10 -8
- package/dist/elements/widgets/designerView/extensions/AbstractExtensionBase.d.ts +2 -0
- package/dist/elements/widgets/designerView/extensions/AbstractExtensionBase.js +8 -0
- package/dist/elements/widgets/designerView/extensions/ExtensionManager.js +1 -0
- package/dist/elements/widgets/designerView/extensions/ExtensionType.d.ts +2 -1
- package/dist/elements/widgets/designerView/extensions/ExtensionType.js +1 -0
- package/dist/elements/widgets/designerView/extensions/FlexboxExtension.d.ts +11 -0
- package/dist/elements/widgets/designerView/extensions/FlexboxExtension.js +20 -0
- package/dist/elements/widgets/designerView/extensions/FlexboxExtensionDesignViewConfigButtons.d.ts +6 -0
- package/dist/elements/widgets/designerView/extensions/FlexboxExtensionDesignViewConfigButtons.js +21 -0
- package/dist/elements/widgets/designerView/extensions/FlexboxExtensionProvider.d.ts +11 -0
- package/dist/elements/widgets/designerView/extensions/FlexboxExtensionProvider.js +17 -0
- package/dist/elements/widgets/designerView/extensions/GrayOutDragOverContainerExtension.js +3 -2
- package/dist/elements/widgets/designerView/extensions/GridExtension copy.d.ts +10 -0
- package/dist/elements/widgets/designerView/extensions/GridExtension copy.js +30 -0
- package/dist/elements/widgets/designerView/extensions/GridExtensionDesignViewConfigButtons copy.d.ts +6 -0
- package/dist/elements/widgets/designerView/extensions/GridExtensionDesignViewConfigButtons copy.js +21 -0
- package/dist/elements/widgets/designerView/extensions/GridExtensionProvider copy.d.ts +11 -0
- package/dist/elements/widgets/designerView/extensions/GridExtensionProvider copy.js +18 -0
- package/dist/elements/widgets/designerView/extensions/GridExtensionProvider.js +2 -1
- package/dist/elements/widgets/designerView/extensions/InvisibleDivExtension.js +3 -2
- package/dist/elements/widgets/designerView/extensions/MouseOverExtension.js +3 -4
- package/dist/elements/widgets/designerView/extensions/PlacementExtension.d.ts +11 -0
- package/dist/elements/widgets/designerView/extensions/PlacementExtension.js +22 -0
- package/dist/elements/widgets/designerView/extensions/PlacementExtensionProvider.d.ts +10 -0
- package/dist/elements/widgets/designerView/extensions/PlacementExtensionProvider.js +13 -0
- package/dist/elements/widgets/designerView/extensions/ResizeExtension.d.ts +3 -1
- package/dist/elements/widgets/designerView/extensions/ResizeExtension.js +201 -41
- package/dist/elements/widgets/designerView/extensions/RotateExtension.d.ts +8 -2
- package/dist/elements/widgets/designerView/extensions/RotateExtension.js +77 -43
- package/dist/elements/widgets/designerView/extensions/RotateExtensionProvider.js +1 -0
- package/dist/elements/widgets/designerView/extensions/SelectionDefaultExtension.d.ts +4 -1
- package/dist/elements/widgets/designerView/extensions/SelectionDefaultExtension.js +14 -9
- package/dist/elements/widgets/designerView/extensions/TransformOriginExtension.js +30 -20
- package/dist/elements/widgets/designerView/overlayLayerView.d.ts +1 -0
- package/dist/elements/widgets/designerView/overlayLayerView.js +10 -0
- package/dist/elements/widgets/designerView/tools/PointerTool.d.ts +1 -0
- package/dist/elements/widgets/designerView/tools/PointerTool.js +16 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +3 -0
- package/dist/interfaces/IPoint3D.d.ts +5 -0
- package/dist/interfaces/IPoint3D.js +1 -0
- package/package.json +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { EventNames } from "../../../../enums/EventNames";
|
|
2
|
-
import { convertCoordinates, getDomMatrix } from "../../../helper/TransformHelper.js";
|
|
2
|
+
import { convertCoordinates, getDomMatrix, getDesignerCanvasNormalizedTransformedCornerDOMPoints, normalizeToAbsolutePosition } from "../../../helper/TransformHelper.js";
|
|
3
3
|
import { AbstractExtension } from './AbstractExtension';
|
|
4
4
|
export class ResizeExtension extends AbstractExtension {
|
|
5
5
|
resizeAllSelected;
|
|
@@ -15,6 +15,8 @@ export class ResizeExtension extends AbstractExtension {
|
|
|
15
15
|
_circle6;
|
|
16
16
|
_circle7;
|
|
17
17
|
_circle8;
|
|
18
|
+
_initialComputedTransformOrigins;
|
|
19
|
+
_initialTransformOrigins;
|
|
18
20
|
constructor(extensionManager, designerCanvas, extendedItem, resizeAllSelected) {
|
|
19
21
|
super(extensionManager, designerCanvas, extendedItem);
|
|
20
22
|
this.resizeAllSelected = resizeAllSelected;
|
|
@@ -23,31 +25,17 @@ export class ResizeExtension extends AbstractExtension {
|
|
|
23
25
|
this.refresh();
|
|
24
26
|
}
|
|
25
27
|
refresh() {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
this.
|
|
29
|
-
this.
|
|
30
|
-
this.
|
|
31
|
-
this.
|
|
32
|
-
this.
|
|
33
|
-
this.
|
|
34
|
-
this._circle8 = this._drawResizerOverlay((
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
this._circle5.style.display = 'none';
|
|
38
|
-
}
|
|
39
|
-
else {
|
|
40
|
-
this._circle2.style.display = '';
|
|
41
|
-
this._circle5.style.display = '';
|
|
42
|
-
}
|
|
43
|
-
if (rect.height < 12) {
|
|
44
|
-
this._circle7.style.display = 'none';
|
|
45
|
-
this._circle8.style.display = 'none';
|
|
46
|
-
}
|
|
47
|
-
else {
|
|
48
|
-
this._circle8.style.display = '';
|
|
49
|
-
this._circle8.style.display = '';
|
|
50
|
-
}
|
|
28
|
+
//#region Resizer circles
|
|
29
|
+
let transformedCornerPoints = getDesignerCanvasNormalizedTransformedCornerDOMPoints(this.extendedItem.element, 0, this.designerCanvas);
|
|
30
|
+
this._circle1 = this._drawResizerOverlay(transformedCornerPoints[0].x, transformedCornerPoints[0].y, 'nw-resize', this._circle1);
|
|
31
|
+
this._circle2 = this._drawResizerOverlay((transformedCornerPoints[0].x + (transformedCornerPoints[1].x - transformedCornerPoints[0].x) / 2), (transformedCornerPoints[0].y + (transformedCornerPoints[1].y - transformedCornerPoints[0].y) / 2), 'n-resize', this._circle2);
|
|
32
|
+
this._circle3 = this._drawResizerOverlay(transformedCornerPoints[1].x, transformedCornerPoints[1].y, 'ne-resize', this._circle3);
|
|
33
|
+
this._circle4 = this._drawResizerOverlay((transformedCornerPoints[0].x + (transformedCornerPoints[2].x - transformedCornerPoints[0].x) / 2), (transformedCornerPoints[0].y + (transformedCornerPoints[2].y - transformedCornerPoints[0].y) / 2), 'w-resize', this._circle4);
|
|
34
|
+
this._circle5 = this._drawResizerOverlay(transformedCornerPoints[2].x, transformedCornerPoints[2].y, 'sw-resize', this._circle5);
|
|
35
|
+
this._circle6 = this._drawResizerOverlay((transformedCornerPoints[2].x + (transformedCornerPoints[3].x - transformedCornerPoints[2].x) / 2), (transformedCornerPoints[2].y + (transformedCornerPoints[3].y - transformedCornerPoints[2].y) / 2), 's-resize', this._circle6);
|
|
36
|
+
this._circle8 = this._drawResizerOverlay((transformedCornerPoints[1].x + (transformedCornerPoints[3].x - transformedCornerPoints[1].x) / 2), (transformedCornerPoints[1].y + (transformedCornerPoints[3].y - transformedCornerPoints[1].y) / 2), 'e-resize', this._circle8);
|
|
37
|
+
this._circle7 = this._drawResizerOverlay(transformedCornerPoints[3].x, transformedCornerPoints[3].y, 'se-resize', this._circle7);
|
|
38
|
+
//#endregion Circles
|
|
51
39
|
}
|
|
52
40
|
_drawResizerOverlay(x, y, cursor, oldCircle) {
|
|
53
41
|
let circle = this._drawCircle(x, y, 3 / this.designerCanvas.zoomFactor, 'svg-primary-resizer', oldCircle);
|
|
@@ -60,7 +48,7 @@ export class ResizeExtension extends AbstractExtension {
|
|
|
60
48
|
circle.style.cursor = cursor;
|
|
61
49
|
return circle;
|
|
62
50
|
}
|
|
63
|
-
_pointerActionTypeResize(circle, event, actionMode
|
|
51
|
+
_pointerActionTypeResize(circle, event, actionMode) {
|
|
64
52
|
event.stopPropagation();
|
|
65
53
|
const currentPoint = this.designerCanvas.getNormalizedEventCoordinates(event);
|
|
66
54
|
switch (event.type) {
|
|
@@ -72,34 +60,130 @@ export class ResizeExtension extends AbstractExtension {
|
|
|
72
60
|
this._initialPoint = currentPoint;
|
|
73
61
|
this._initialSizes = [];
|
|
74
62
|
this._actionModeStarted = actionMode;
|
|
75
|
-
|
|
76
|
-
this.
|
|
63
|
+
this._initialComputedTransformOrigins = [];
|
|
64
|
+
this._initialTransformOrigins = [];
|
|
65
|
+
//#region Calc elements' dimension
|
|
66
|
+
const transformBackup = this.extendedItem.element.style.transform;
|
|
67
|
+
this.extendedItem.element.style.transform = '';
|
|
68
|
+
let rect = this.extendedItem.element.getBoundingClientRect();
|
|
69
|
+
this.extendedItem.element.style.transform = transformBackup;
|
|
70
|
+
//#endregion Calc element's dimension
|
|
71
|
+
this._initialSizes.push({ width: rect.width / this.designerCanvas.scaleFactor, height: rect.height / this.designerCanvas.scaleFactor });
|
|
72
|
+
this.extendedItem.element.style.width = this._initialSizes[0].width + 'px';
|
|
73
|
+
const toArr = getComputedStyle(this.extendedItem.element).transformOrigin.split(' ').map(x => parseInt(x.replace('px', '')));
|
|
74
|
+
const transformOrigin = new DOMPoint(toArr[0], toArr[1]);
|
|
75
|
+
this._initialComputedTransformOrigins.push(transformOrigin);
|
|
76
|
+
this._initialTransformOrigins.push(this.extendedItem.element.style.transformOrigin);
|
|
77
77
|
if (this.resizeAllSelected) {
|
|
78
78
|
for (const designItem of this.designerCanvas.instanceServiceContainer.selectionService.selectedElements) {
|
|
79
|
-
rect =
|
|
80
|
-
this._initialSizes.push({ width: rect.
|
|
79
|
+
rect = designItem.element.getBoundingClientRect();
|
|
80
|
+
this._initialSizes.push({ width: rect.width / this.designerCanvas.scaleFactor, height: rect.height / this.designerCanvas.scaleFactor });
|
|
81
81
|
}
|
|
82
82
|
}
|
|
83
83
|
if (this.designerCanvas.alignOnSnap)
|
|
84
84
|
this.designerCanvas.snapLines.calculateSnaplines(this.designerCanvas.instanceServiceContainer.selectionService.selectedElements);
|
|
85
|
+
let i = 0;
|
|
86
|
+
let top = null;
|
|
87
|
+
let bottom = null;
|
|
88
|
+
let left = null;
|
|
89
|
+
let right = null;
|
|
90
|
+
switch (this._actionModeStarted) {
|
|
91
|
+
case 'e-resize':
|
|
92
|
+
left = getComputedStyle(this.extendedItem.element).left;
|
|
93
|
+
this.extendedItem.element.style.removeProperty('right');
|
|
94
|
+
this.extendedItem.element.style.left = left;
|
|
95
|
+
this.extendedItem.element.style.transformOrigin = this._initialComputedTransformOrigins[i].x + 'px ' + this._initialComputedTransformOrigins[i].y + 'px';
|
|
96
|
+
break;
|
|
97
|
+
case 'se-resize':
|
|
98
|
+
top = getComputedStyle(this.extendedItem.element).top;
|
|
99
|
+
this.extendedItem.element.style.removeProperty('bottom');
|
|
100
|
+
this.extendedItem.element.style.top = top;
|
|
101
|
+
left = getComputedStyle(this.extendedItem.element).left;
|
|
102
|
+
this.extendedItem.element.style.removeProperty('right');
|
|
103
|
+
this.extendedItem.element.style.left = left;
|
|
104
|
+
this.extendedItem.element.style.transformOrigin = this._initialComputedTransformOrigins[i].x + 'px ' + this._initialComputedTransformOrigins[i].y + 'px';
|
|
105
|
+
break;
|
|
106
|
+
case 's-resize':
|
|
107
|
+
top = getComputedStyle(this.extendedItem.element).top;
|
|
108
|
+
this.extendedItem.element.style.removeProperty('bottom');
|
|
109
|
+
this.extendedItem.element.style.top = top;
|
|
110
|
+
this.extendedItem.element.style.transformOrigin = this._initialComputedTransformOrigins[i].x + 'px ' + this._initialComputedTransformOrigins[i].y + 'px';
|
|
111
|
+
break;
|
|
112
|
+
case 'sw-resize':
|
|
113
|
+
top = getComputedStyle(this.extendedItem.element).top;
|
|
114
|
+
this.extendedItem.element.style.removeProperty('bottom');
|
|
115
|
+
this.extendedItem.element.style.top = top;
|
|
116
|
+
right = getComputedStyle(this.extendedItem.element).right;
|
|
117
|
+
this.extendedItem.element.style.removeProperty('left');
|
|
118
|
+
this.extendedItem.element.style.right = right;
|
|
119
|
+
this.extendedItem.element.style.transformOrigin = 'calc(100% - ' + this._initialComputedTransformOrigins[i].x + 'px) ' + this._initialComputedTransformOrigins[i].y + 'px';
|
|
120
|
+
break;
|
|
121
|
+
case 'w-resize':
|
|
122
|
+
right = getComputedStyle(this.extendedItem.element).right;
|
|
123
|
+
this.extendedItem.element.style.removeProperty('left');
|
|
124
|
+
this.extendedItem.element.style.right = right;
|
|
125
|
+
this.extendedItem.element.style.transformOrigin = 'calc(100% - ' + this._initialComputedTransformOrigins[i].x + 'px) ' + this._initialComputedTransformOrigins[i].y + 'px';
|
|
126
|
+
break;
|
|
127
|
+
case 'nw-resize':
|
|
128
|
+
bottom = getComputedStyle(this.extendedItem.element).bottom;
|
|
129
|
+
this.extendedItem.element.style.removeProperty('top');
|
|
130
|
+
this.extendedItem.element.style.bottom = bottom;
|
|
131
|
+
right = getComputedStyle(this.extendedItem.element).right;
|
|
132
|
+
this.extendedItem.element.style.removeProperty('left');
|
|
133
|
+
this.extendedItem.element.style.right = right;
|
|
134
|
+
this.extendedItem.element.style.transformOrigin = 'calc(100% - ' + this._initialComputedTransformOrigins[i].x + 'px) ' + 'calc(100% - ' + this._initialComputedTransformOrigins[i].y + 'px)';
|
|
135
|
+
break;
|
|
136
|
+
case 'n-resize':
|
|
137
|
+
bottom = getComputedStyle(this.extendedItem.element).bottom;
|
|
138
|
+
this.extendedItem.element.style.removeProperty('top');
|
|
139
|
+
this.extendedItem.element.style.bottom = bottom;
|
|
140
|
+
this.extendedItem.element.style.transformOrigin = 'calc(100% - ' + this._initialComputedTransformOrigins[i].x + 'px) ' + 'calc(100% - ' + this._initialComputedTransformOrigins[i].y + 'px)';
|
|
141
|
+
break;
|
|
142
|
+
case 'ne-resize':
|
|
143
|
+
bottom = getComputedStyle(this.extendedItem.element).bottom;
|
|
144
|
+
this.extendedItem.element.style.removeProperty('top');
|
|
145
|
+
this.extendedItem.element.style.bottom = bottom;
|
|
146
|
+
left = getComputedStyle(this.extendedItem.element).left;
|
|
147
|
+
this.extendedItem.element.style.removeProperty('right');
|
|
148
|
+
this.extendedItem.element.style.left = left;
|
|
149
|
+
this.extendedItem.element.style.transformOrigin = this._initialComputedTransformOrigins[i].x + 'px ' + 'calc(100% - ' + this._initialComputedTransformOrigins[i].y + 'px)';
|
|
150
|
+
break;
|
|
151
|
+
}
|
|
85
152
|
break;
|
|
86
153
|
case EventNames.PointerMove:
|
|
87
154
|
if (this._initialPoint) {
|
|
88
155
|
const containerStyle = getComputedStyle(this.extendedItem.parent.element);
|
|
89
156
|
const containerService = this.designerCanvas.serviceContainer.getLastServiceWhere('containerService', x => x.serviceForContainer(this.extendedItem.parent, containerStyle));
|
|
90
157
|
const diff = containerService.placePoint(event, this.designerCanvas, this.extendedItem.parent, this._initialPoint, { x: 0, y: 0 }, currentPoint, this.designerCanvas.instanceServiceContainer.selectionService.selectedElements);
|
|
91
|
-
let trackX = diff.x - this._initialPoint.x - this._offsetPoint.x;
|
|
92
|
-
let trackY = diff.y - this._initialPoint.y - this._offsetPoint.y;
|
|
158
|
+
let trackX = Math.round(diff.x - this._initialPoint.x - this._offsetPoint.x);
|
|
159
|
+
let trackY = Math.round(diff.y - this._initialPoint.y - this._offsetPoint.y);
|
|
93
160
|
let matrix = getDomMatrix(this.extendedItem.element);
|
|
94
|
-
let transformedTrack = convertCoordinates(
|
|
161
|
+
let transformedTrack = convertCoordinates(new DOMPoint(trackX, trackY, 0, 0), matrix);
|
|
95
162
|
let i = 0;
|
|
163
|
+
let width = null;
|
|
164
|
+
let height = null;
|
|
96
165
|
switch (this._actionModeStarted) {
|
|
166
|
+
case 'e-resize':
|
|
167
|
+
width = (this._initialSizes[i].width + transformedTrack.x);
|
|
168
|
+
this.extendedItem.element.style.width = width + 'px';
|
|
169
|
+
if (this.resizeAllSelected) {
|
|
170
|
+
i++;
|
|
171
|
+
for (const designItem of this.designerCanvas.instanceServiceContainer.selectionService.selectedElements) {
|
|
172
|
+
if (designItem !== this.extendedItem) {
|
|
173
|
+
designItem.element.style.width = this._initialSizes[i].width + transformedTrack.x + 'px';
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
break;
|
|
97
178
|
case 'se-resize':
|
|
98
|
-
|
|
99
|
-
this.extendedItem.element.style.
|
|
179
|
+
width = (this._initialSizes[i].width + transformedTrack.x);
|
|
180
|
+
this.extendedItem.element.style.width = width + 'px';
|
|
181
|
+
height = (this._initialSizes[i].height + transformedTrack.y);
|
|
182
|
+
this.extendedItem.element.style.height = height + 'px';
|
|
183
|
+
console.log(this.extendedItem.element.style.transformOrigin);
|
|
100
184
|
if (this.resizeAllSelected) {
|
|
185
|
+
i++;
|
|
101
186
|
for (const designItem of this.designerCanvas.instanceServiceContainer.selectionService.selectedElements) {
|
|
102
|
-
i++;
|
|
103
187
|
if (designItem !== this.extendedItem) {
|
|
104
188
|
designItem.element.style.width = this._initialSizes[i].width + transformedTrack.x + 'px';
|
|
105
189
|
designItem.element.style.height = this._initialSizes[i].height + transformedTrack.y + 'px';
|
|
@@ -108,7 +192,8 @@ export class ResizeExtension extends AbstractExtension {
|
|
|
108
192
|
}
|
|
109
193
|
break;
|
|
110
194
|
case 's-resize':
|
|
111
|
-
|
|
195
|
+
height = (this._initialSizes[i].height + transformedTrack.y);
|
|
196
|
+
this.extendedItem.element.style.height = height + 'px';
|
|
112
197
|
if (this.resizeAllSelected) {
|
|
113
198
|
i++;
|
|
114
199
|
for (const designItem of this.designerCanvas.instanceServiceContainer.selectionService.selectedElements) {
|
|
@@ -118,18 +203,75 @@ export class ResizeExtension extends AbstractExtension {
|
|
|
118
203
|
}
|
|
119
204
|
}
|
|
120
205
|
break;
|
|
121
|
-
case '
|
|
122
|
-
|
|
206
|
+
case 'sw-resize':
|
|
207
|
+
width = (this._initialSizes[i].width - transformedTrack.x);
|
|
208
|
+
this.extendedItem.element.style.width = width + 'px';
|
|
209
|
+
height = (this._initialSizes[i].height + transformedTrack.y);
|
|
210
|
+
this.extendedItem.element.style.height = height + 'px';
|
|
211
|
+
if (this.resizeAllSelected) {
|
|
212
|
+
i++;
|
|
213
|
+
for (const designItem of this.designerCanvas.instanceServiceContainer.selectionService.selectedElements) {
|
|
214
|
+
if (designItem !== this.extendedItem) {
|
|
215
|
+
designItem.element.style.width = this._initialSizes[i].width + transformedTrack.x + 'px';
|
|
216
|
+
designItem.element.style.height = this._initialSizes[i].height + transformedTrack.y + 'px';
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
break;
|
|
221
|
+
case 'w-resize':
|
|
222
|
+
width = (this._initialSizes[i].width - transformedTrack.x);
|
|
223
|
+
this.extendedItem.element.style.width = width + 'px';
|
|
224
|
+
if (this.resizeAllSelected) {
|
|
225
|
+
i++;
|
|
226
|
+
for (const designItem of this.designerCanvas.instanceServiceContainer.selectionService.selectedElements) {
|
|
227
|
+
if (designItem !== this.extendedItem) {
|
|
228
|
+
designItem.element.style.width = this._initialSizes[i].width + transformedTrack.x + 'px';
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
break;
|
|
233
|
+
case 'nw-resize':
|
|
234
|
+
width = (this._initialSizes[i].width - transformedTrack.x);
|
|
235
|
+
this.extendedItem.element.style.width = width + 'px';
|
|
236
|
+
height = (this._initialSizes[i].height - transformedTrack.y);
|
|
237
|
+
this.extendedItem.element.style.height = height + 'px';
|
|
238
|
+
if (this.resizeAllSelected) {
|
|
239
|
+
i++;
|
|
240
|
+
for (const designItem of this.designerCanvas.instanceServiceContainer.selectionService.selectedElements) {
|
|
241
|
+
if (designItem !== this.extendedItem) {
|
|
242
|
+
designItem.element.style.width = this._initialSizes[i].width + transformedTrack.x + 'px';
|
|
243
|
+
designItem.element.style.height = this._initialSizes[i].height + transformedTrack.y + 'px';
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
break;
|
|
248
|
+
case 'n-resize':
|
|
249
|
+
height = (this._initialSizes[i].height - transformedTrack.y);
|
|
250
|
+
this.extendedItem.element.style.height = height + 'px';
|
|
251
|
+
if (this.resizeAllSelected) {
|
|
252
|
+
i++;
|
|
253
|
+
for (const designItem of this.designerCanvas.instanceServiceContainer.selectionService.selectedElements) {
|
|
254
|
+
if (designItem !== this.extendedItem) {
|
|
255
|
+
designItem.element.style.height = this._initialSizes[i].height + transformedTrack.y + 'px';
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
break;
|
|
260
|
+
case 'ne-resize':
|
|
261
|
+
width = (this._initialSizes[i].width + transformedTrack.x);
|
|
262
|
+
this.extendedItem.element.style.width = width + 'px';
|
|
263
|
+
height = (this._initialSizes[i].height - transformedTrack.y);
|
|
264
|
+
this.extendedItem.element.style.height = height + 'px';
|
|
123
265
|
if (this.resizeAllSelected) {
|
|
124
266
|
i++;
|
|
125
267
|
for (const designItem of this.designerCanvas.instanceServiceContainer.selectionService.selectedElements) {
|
|
126
268
|
if (designItem !== this.extendedItem) {
|
|
127
269
|
designItem.element.style.width = this._initialSizes[i].width + transformedTrack.x + 'px';
|
|
270
|
+
designItem.element.style.height = this._initialSizes[i].height + transformedTrack.y + 'px';
|
|
128
271
|
}
|
|
129
272
|
}
|
|
130
273
|
}
|
|
131
274
|
break;
|
|
132
|
-
//for other resize modes we need a replacement
|
|
133
275
|
}
|
|
134
276
|
const resizedElements = [this.extendedItem, this.extendedItem.parent];
|
|
135
277
|
if (this.resizeAllSelected)
|
|
@@ -142,6 +284,24 @@ export class ResizeExtension extends AbstractExtension {
|
|
|
142
284
|
let cg = this.extendedItem.openGroup((this.resizeAllSelected && this.designerCanvas.instanceServiceContainer.selectionService.selectedElements.length > 1) ? "Resize Elements" : "Resize <" + this.extendedItem.name + ">");
|
|
143
285
|
this.extendedItem.setStyle('width', this.extendedItem.element.style.width);
|
|
144
286
|
this.extendedItem.setStyle('height', this.extendedItem.element.style.height);
|
|
287
|
+
this.extendedItem.setStyle('left', normalizeToAbsolutePosition(this.extendedItem.element, 'left'));
|
|
288
|
+
this.extendedItem.setStyle('top', normalizeToAbsolutePosition(this.extendedItem.element, 'top'));
|
|
289
|
+
let p3Abs = new DOMPoint(this.extendedItem.element.offsetLeft + parseInt(getComputedStyle(this.extendedItem.element).transformOrigin.split(' ')[0].replace('px', '')), this.extendedItem.element.offsetTop + parseInt(getComputedStyle(this.extendedItem.element).transformOrigin.split(' ')[1].replace('px', '')));
|
|
290
|
+
this.extendedItem.element.style.transformOrigin = this._initialTransformOrigins[0];
|
|
291
|
+
let p1Abs = new DOMPoint(this.extendedItem.element.offsetLeft + parseInt(getComputedStyle(this.extendedItem.element).transformOrigin.split(' ')[0].replace('px', '')), this.extendedItem.element.offsetTop + parseInt(getComputedStyle(this.extendedItem.element).transformOrigin.split(' ')[1].replace('px', '')));
|
|
292
|
+
let p1 = new DOMPoint(p1Abs.x - p3Abs.x, -(p1Abs.y - p3Abs.y));
|
|
293
|
+
let matrix = new DOMMatrix(getComputedStyle(this.extendedItem.element).transform);
|
|
294
|
+
let deltaX = 0;
|
|
295
|
+
let deltaY = 0;
|
|
296
|
+
let p1transformed = p1.matrixTransform(matrix.inverse());
|
|
297
|
+
let p2Abs = new DOMPoint(p3Abs.x + p1transformed.x, p3Abs.y - p1transformed.y);
|
|
298
|
+
let p1p2 = new DOMPoint(p2Abs.x - p1Abs.x, -(p2Abs.y - p1Abs.y));
|
|
299
|
+
let p1p2transformed = p1p2.matrixTransform(matrix);
|
|
300
|
+
let p4Abs = new DOMPoint(p1Abs.x + p1p2transformed.x, p1Abs.y - p1p2transformed.y);
|
|
301
|
+
deltaX = p4Abs.x - p1Abs.x;
|
|
302
|
+
deltaY = p4Abs.y - p1Abs.y;
|
|
303
|
+
this.extendedItem.element.style.transform = matrix.translate(deltaX, deltaY).toString();
|
|
304
|
+
this.extendedItem.setStyle('transform', this.extendedItem.element.style.transform);
|
|
145
305
|
if (this.resizeAllSelected) {
|
|
146
306
|
for (const designItem of this.designerCanvas.instanceServiceContainer.selectionService.selectedElements) {
|
|
147
307
|
if (designItem !== this.extendedItem) {
|
|
@@ -3,10 +3,16 @@ import { IDesignerCanvas } from "../IDesignerCanvas";
|
|
|
3
3
|
import { AbstractExtension } from './AbstractExtension';
|
|
4
4
|
import { IExtensionManager } from "./IExtensionManger";
|
|
5
5
|
export declare class RotateExtension extends AbstractExtension {
|
|
6
|
+
private _initialPoint;
|
|
7
|
+
private _rotateIcon;
|
|
8
|
+
private _initialElementAngle;
|
|
9
|
+
private _initialOverlayAngle;
|
|
10
|
+
private _textAngle;
|
|
11
|
+
private _actualRotationAngle;
|
|
6
12
|
constructor(extensionManager: IExtensionManager, designerView: IDesignerCanvas, extendedItem: IDesignItem);
|
|
7
13
|
extend(): void;
|
|
8
|
-
_drawRotateOverlay(itemRect: DOMRect): void;
|
|
9
|
-
_pointerActionTypeRotate(event: PointerEvent): void;
|
|
10
14
|
refresh(): void;
|
|
15
|
+
_drawRotateOverlay(itemRect: DOMRect, oldRotateIcon: any): any;
|
|
16
|
+
_pointerActionTypeRotate(event: PointerEvent): void;
|
|
11
17
|
dispose(): void;
|
|
12
18
|
}
|
|
@@ -1,70 +1,104 @@
|
|
|
1
1
|
import { EventNames } from "../../../../enums/EventNames";
|
|
2
|
+
import { cssMatrixToMatrixArray, extractRotationAngleFromDOMMatrix, getDesignerCanvasNormalizedTransformedCornerDOMPoints, getRotationAngleFromMatrix, getRotationMatrix3d, rotateElementByMatrix3d } from "../../../helper/TransformHelper";
|
|
2
3
|
import { AbstractExtension } from './AbstractExtension';
|
|
3
4
|
export class RotateExtension extends AbstractExtension {
|
|
5
|
+
_initialPoint;
|
|
6
|
+
_rotateIcon;
|
|
7
|
+
_initialElementAngle;
|
|
8
|
+
_initialOverlayAngle;
|
|
9
|
+
_textAngle;
|
|
10
|
+
_actualRotationAngle;
|
|
4
11
|
constructor(extensionManager, designerView, extendedItem) {
|
|
5
12
|
super(extensionManager, designerView, extendedItem);
|
|
6
13
|
}
|
|
7
14
|
extend() {
|
|
15
|
+
this.refresh();
|
|
16
|
+
}
|
|
17
|
+
refresh() {
|
|
8
18
|
const rect = this.extendedItem.element.getBoundingClientRect();
|
|
9
|
-
this.
|
|
19
|
+
this._actualRotationAngle = getRotationAngleFromMatrix(null, new DOMMatrix(this.extendedItem.element.style.transform));
|
|
20
|
+
this._rotateIcon = this._drawRotateOverlay(rect, this._rotateIcon);
|
|
10
21
|
}
|
|
11
|
-
_drawRotateOverlay(itemRect) {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
22
|
+
_drawRotateOverlay(itemRect, oldRotateIcon) {
|
|
23
|
+
let transformedCornerPoints = getDesignerCanvasNormalizedTransformedCornerDOMPoints(this.extendedItem.element, 10, this.designerCanvas);
|
|
24
|
+
let rotateIconPosition = transformedCornerPoints[0];
|
|
25
|
+
if (!oldRotateIcon) {
|
|
26
|
+
const g = document.createElementNS("http://www.w3.org/2000/svg", "g");
|
|
27
|
+
const line = document.createElementNS("http://www.w3.org/2000/svg", "circle");
|
|
28
|
+
line.setAttribute('r', (7.5));
|
|
29
|
+
line.setAttribute('class', 'svg-primary-rotate');
|
|
30
|
+
line.setAttribute('style', 'cursor: grabbing');
|
|
31
|
+
g.appendChild(line);
|
|
32
|
+
const g2 = document.createElementNS("http://www.w3.org/2000/svg", "g");
|
|
33
|
+
g2.setAttribute('transform', 'translate(-8,0) scale(0.0015,-0.0015)');
|
|
34
|
+
const path = document.createElementNS("http://www.w3.org/2000/svg", "path");
|
|
35
|
+
path.setAttribute('style', 'fill: white');
|
|
36
|
+
path.setAttribute('d', 'M5260,4367.9c-1803.6-157-3329.6-1457-3771.9-3212.8c-34.5-135.9-72.7-331.2-86.2-430.8c-11.5-99.6-24.9-201-30.6-224l-7.7-44H731.8c-528.4,0-631.8-3.8-631.8-26.8c0-42.1,2029.5-2042.9,2104.2-2073.6c36.4-15.3,86.2-21.1,118.7-15.3c40.2,9.6,346.6,300.6,1089.4,1037.7C3981-58.8,4446.3,414.2,4446.3,429.5c0,23-103.4,26.8-620.3,26.8c-342.7,0-626.1,5.7-629.9,15.3c-13.4,21.1,38.3,245.1,93.8,415.5c114.9,348.5,319.7,681.6,582.1,947.8c478.7,484.4,1062.6,731.4,1742.3,735.2c317.8,0,482.5-23,765.9-114.9c402.1-128.3,725.7-331.2,1022.4-641.4c455.7-474.8,687.4-1047.3,687.4-1702.1c-1.9-693.1-254.6-1284.7-754.4-1771c-396.3-384.9-882.7-614.6-1430.3-679.7c-141.7-17.2-195.3-32.6-227.9-63.2l-44-38.3v-811.8v-811.8l49.8-49.8c49.8-47.9,53.6-49.8,243.2-36.4c1606.4,105.3,3048.1,1146.9,3658.9,2646c453.8,1112.4,415.5,2379.9-105.3,3463.6c-360,752.5-953.5,1397.7-1677.3,1828.5c-515,308.3-1139.2,513.1-1746.2,574.4C5872.7,4379.4,5438.1,4383.3,5260,4367.9z');
|
|
37
|
+
g2.appendChild(path);
|
|
38
|
+
g.appendChild(g2);
|
|
39
|
+
g.addEventListener(EventNames.PointerDown, event => this._pointerActionTypeRotate(event));
|
|
40
|
+
g.addEventListener(EventNames.PointerMove, event => this._pointerActionTypeRotate(event));
|
|
41
|
+
g.addEventListener(EventNames.PointerUp, event => this._pointerActionTypeRotate(event));
|
|
42
|
+
g.setAttribute('class', 'svg-primary-rotate');
|
|
43
|
+
g.setAttribute('transform', 'translate(' + rotateIconPosition.x + ',' + rotateIconPosition.y + ')');
|
|
44
|
+
this.overlayLayerView.addOverlay(g);
|
|
45
|
+
this.overlays.push(g);
|
|
46
|
+
return g;
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
oldRotateIcon.setAttribute('transform', 'translate(' + rotateIconPosition.x + ',' + rotateIconPosition.y + ')');
|
|
50
|
+
return oldRotateIcon;
|
|
51
|
+
}
|
|
32
52
|
}
|
|
33
53
|
_pointerActionTypeRotate(event) {
|
|
34
54
|
event.stopPropagation();
|
|
55
|
+
const currentPoint = this.designerCanvas.getNormalizedEventCoordinates(event);
|
|
35
56
|
switch (event.type) {
|
|
36
57
|
case EventNames.PointerDown:
|
|
37
|
-
|
|
58
|
+
const el = this.designerCanvas.getNormalizedElementCoordinates(this.extendedItem.element);
|
|
59
|
+
let transformOriginInPx = {
|
|
60
|
+
x: el.x + parseInt(getComputedStyle(this.extendedItem.element).transformOrigin.split(' ')[0].replace('px', '')),
|
|
61
|
+
y: el.y + parseInt(getComputedStyle(this.extendedItem.element).transformOrigin.split(' ')[1].replace('px', ''))
|
|
62
|
+
};
|
|
63
|
+
this._initialPoint = currentPoint;
|
|
64
|
+
this._initialElementAngle = getRotationAngleFromMatrix(cssMatrixToMatrixArray(getComputedStyle(this.extendedItem.element).transform), null);
|
|
65
|
+
this._initialOverlayAngle = Math.atan2(currentPoint.y - transformOriginInPx.y, currentPoint.x - transformOriginInPx.x) * (180 / Math.PI);
|
|
66
|
+
event.target.setPointerCapture(event.pointerId);
|
|
38
67
|
break;
|
|
39
68
|
case EventNames.PointerMove:
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
69
|
+
if (this._initialPoint) {
|
|
70
|
+
const el = this.designerCanvas.getNormalizedElementCoordinates(this.extendedItem.element);
|
|
71
|
+
let transformOriginInPx = {
|
|
72
|
+
x: el.x + parseInt(getComputedStyle(this.extendedItem.element).transformOrigin.split(' ')[0].replace('px', '')),
|
|
73
|
+
y: el.y + parseInt(getComputedStyle(this.extendedItem.element).transformOrigin.split(' ')[1].replace('px', ''))
|
|
74
|
+
};
|
|
75
|
+
let angle = Math.atan2(currentPoint.y - transformOriginInPx.y, currentPoint.x - transformOriginInPx.x) * (180 / Math.PI);
|
|
76
|
+
angle = angle - this._initialOverlayAngle + this._initialElementAngle;
|
|
77
|
+
angle *= -1;
|
|
78
|
+
const rotationMatrix3d = getRotationMatrix3d('z', angle);
|
|
79
|
+
rotateElementByMatrix3d(this.extendedItem.element, rotationMatrix3d);
|
|
80
|
+
let transformedCornerPoints = getDesignerCanvasNormalizedTransformedCornerDOMPoints(this.extendedItem.element, 30, this.designerCanvas);
|
|
81
|
+
let angleTextPosition = transformedCornerPoints[0];
|
|
82
|
+
this._textAngle = this._drawTextWithBackground(this._actualRotationAngle + '°', angleTextPosition.x, angleTextPosition.y, 'white', 'svg-rotate-text', this._textAngle);
|
|
83
|
+
this._textAngle[2].style.fontSize = (12 / this.designerCanvas.scaleFactor) + 'px';
|
|
84
|
+
this._textAngle[3].style.fontSize = (12 / this.designerCanvas.scaleFactor) + 'px';
|
|
85
|
+
}
|
|
51
86
|
this.extensionManager.refreshExtensions(this.designerCanvas.instanceServiceContainer.selectionService.selectedElements);
|
|
52
87
|
break;
|
|
53
88
|
case EventNames.PointerUp:
|
|
54
89
|
let cg = this.extendedItem.openGroup("Rotate Elements");
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
}*/
|
|
90
|
+
event.target.releasePointerCapture(event.pointerId);
|
|
91
|
+
this.extendedItem.element.style.transform = 'rotate(' + extractRotationAngleFromDOMMatrix(new DOMMatrix(this.extendedItem.element.style.transform)) + 'deg)';
|
|
92
|
+
this.extendedItem.setStyle('transform', this.extendedItem.element.style.transform);
|
|
59
93
|
cg.commit();
|
|
60
|
-
|
|
94
|
+
this._textAngle.forEach(x => {
|
|
95
|
+
this.designerCanvas.overlayLayer.removeOverlay(x);
|
|
96
|
+
});
|
|
97
|
+
this._textAngle = null;
|
|
98
|
+
this._initialPoint = null;
|
|
61
99
|
break;
|
|
62
100
|
}
|
|
63
101
|
}
|
|
64
|
-
refresh() {
|
|
65
|
-
this._removeAllOverlays();
|
|
66
|
-
this.extend();
|
|
67
|
-
}
|
|
68
102
|
dispose() {
|
|
69
103
|
this._removeAllOverlays();
|
|
70
104
|
}
|
|
@@ -3,7 +3,10 @@ import { IDesignerCanvas } from "../IDesignerCanvas";
|
|
|
3
3
|
import { AbstractExtension } from './AbstractExtension';
|
|
4
4
|
import { IExtensionManager } from "./IExtensionManger";
|
|
5
5
|
export declare class SelectionDefaultExtension extends AbstractExtension {
|
|
6
|
-
private
|
|
6
|
+
private _line1;
|
|
7
|
+
private _line2;
|
|
8
|
+
private _line3;
|
|
9
|
+
private _line4;
|
|
7
10
|
constructor(extensionManager: IExtensionManager, designerView: IDesignerCanvas, extendedItem: IDesignItem);
|
|
8
11
|
extend(): void;
|
|
9
12
|
refresh(): void;
|
|
@@ -1,6 +1,10 @@
|
|
|
1
|
+
import { getDesignerCanvasNormalizedTransformedCornerDOMPoints } from "../../../helper/TransformHelper";
|
|
1
2
|
import { AbstractExtension } from './AbstractExtension';
|
|
2
3
|
export class SelectionDefaultExtension extends AbstractExtension {
|
|
3
|
-
|
|
4
|
+
_line1;
|
|
5
|
+
_line2;
|
|
6
|
+
_line3;
|
|
7
|
+
_line4;
|
|
4
8
|
constructor(extensionManager, designerView, extendedItem) {
|
|
5
9
|
super(extensionManager, designerView, extendedItem);
|
|
6
10
|
}
|
|
@@ -8,14 +12,15 @@ export class SelectionDefaultExtension extends AbstractExtension {
|
|
|
8
12
|
this.refresh();
|
|
9
13
|
}
|
|
10
14
|
refresh() {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
this.
|
|
18
|
-
this.
|
|
15
|
+
let transformedCornerPoints = getDesignerCanvasNormalizedTransformedCornerDOMPoints(this.extendedItem.element, 0, this.designerCanvas);
|
|
16
|
+
this._line1 = this._drawLine(transformedCornerPoints[0].x, transformedCornerPoints[0].y, transformedCornerPoints[1].x, transformedCornerPoints[1].y, 'svg-selection', this._line1);
|
|
17
|
+
this._line2 = this._drawLine(transformedCornerPoints[0].x, transformedCornerPoints[0].y, transformedCornerPoints[2].x, transformedCornerPoints[2].y, 'svg-selection', this._line2);
|
|
18
|
+
this._line3 = this._drawLine(transformedCornerPoints[1].x, transformedCornerPoints[1].y, transformedCornerPoints[3].x, transformedCornerPoints[3].y, 'svg-selection', this._line3);
|
|
19
|
+
this._line4 = this._drawLine(transformedCornerPoints[2].x, transformedCornerPoints[2].y, transformedCornerPoints[3].x, transformedCornerPoints[3].y, 'svg-selection', this._line4);
|
|
20
|
+
this._line1.style.strokeWidth = (2 / this.designerCanvas.zoomFactor).toString();
|
|
21
|
+
this._line2.style.strokeWidth = (2 / this.designerCanvas.zoomFactor).toString();
|
|
22
|
+
this._line3.style.strokeWidth = (2 / this.designerCanvas.zoomFactor).toString();
|
|
23
|
+
this._line4.style.strokeWidth = (2 / this.designerCanvas.zoomFactor).toString();
|
|
19
24
|
}
|
|
20
25
|
dispose() {
|
|
21
26
|
this._removeAllOverlays();
|