@node-projects/web-component-designer 0.0.150 → 0.0.151
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 +8 -1
- 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 +9 -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/FlexboxExtensionProvider.d.ts +10 -0
- package/dist/elements/widgets/designerView/extensions/FlexboxExtensionProvider.js +16 -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/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/MouseOverExtension.d.ts +4 -1
- package/dist/elements/widgets/designerView/extensions/MouseOverExtension.js +14 -6
- 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 +2 -0
- package/dist/index.js +2 -0
- package/dist/interfaces/IPoint3D.d.ts +5 -0
- package/dist/interfaces/IPoint3D.js +1 -0
- package/package.json +1 -1
|
@@ -9,3 +9,8 @@ export declare function isInlineAfter(element: HTMLElement): boolean;
|
|
|
9
9
|
export declare function getElementDisplaytype(element: HTMLElement): ElementDisplayType;
|
|
10
10
|
export declare function isEmptyTextNode(node: Node): boolean;
|
|
11
11
|
export declare function getActiveElement(): Element;
|
|
12
|
+
export declare function getParentElementIncludingSlots(element: Element): Element;
|
|
13
|
+
export declare function getElementsWindowOffsetWithoutSelfAndParentTransformations(element: any): {
|
|
14
|
+
offsetLeft: number;
|
|
15
|
+
offsetTop: number;
|
|
16
|
+
};
|
|
@@ -33,3 +33,23 @@ export function getActiveElement() {
|
|
|
33
33
|
}
|
|
34
34
|
return activeElement;
|
|
35
35
|
}
|
|
36
|
+
export function getParentElementIncludingSlots(element) {
|
|
37
|
+
if (element.assignedSlot)
|
|
38
|
+
return element.assignedSlot;
|
|
39
|
+
if (element.parentElement == null) {
|
|
40
|
+
if (element.parentNode instanceof ShadowRoot) {
|
|
41
|
+
return element.parentNode.host;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return element.parentElement;
|
|
45
|
+
}
|
|
46
|
+
export function getElementsWindowOffsetWithoutSelfAndParentTransformations(element) {
|
|
47
|
+
var offsetLeft = 0;
|
|
48
|
+
var offsetTop = 0;
|
|
49
|
+
while (element) {
|
|
50
|
+
offsetLeft += element.offsetLeft;
|
|
51
|
+
offsetTop += element.offsetTop;
|
|
52
|
+
element = element.offsetParent;
|
|
53
|
+
}
|
|
54
|
+
return { offsetLeft: offsetLeft, offsetTop: offsetTop };
|
|
55
|
+
}
|
|
@@ -75,7 +75,7 @@ export function CalculateGridInformation(designItem) {
|
|
|
75
75
|
for (let xIdx = 0; xIdx < rows.length; xIdx++) {
|
|
76
76
|
const r = rows[xIdx];
|
|
77
77
|
let areas = null;
|
|
78
|
-
if (gridA) {
|
|
78
|
+
if (gridA && gridA[rw + 1]) {
|
|
79
79
|
areas = gridA[rw + 1].split(' ');
|
|
80
80
|
}
|
|
81
81
|
let x = 0;
|
|
@@ -94,7 +94,7 @@ export function CalculateGridInformation(designItem) {
|
|
|
94
94
|
retVal.gaps.push({ x: x + xOffset + paddingLeft, y: y + yOffset - yGap + paddingTop, width: currX, height: yGap });
|
|
95
95
|
}
|
|
96
96
|
let name = null;
|
|
97
|
-
if (areas) {
|
|
97
|
+
if (areas && areas[cl]) {
|
|
98
98
|
const nm = areas[cl].trim();
|
|
99
99
|
if (nm != '.') {
|
|
100
100
|
name = nm;
|
|
@@ -58,8 +58,14 @@ export function placeDesignItem(container, designItem, offset, mode) {
|
|
|
58
58
|
}
|
|
59
59
|
if (!hasPositionedLayout)
|
|
60
60
|
designItem.setStyle('position', 'absolute');
|
|
61
|
-
|
|
62
|
-
|
|
61
|
+
if (oldLeft)
|
|
62
|
+
designItem.setStyle('left', (offset.x + (oldLeft ?? 0) + containerLeft) + "px");
|
|
63
|
+
if (oldTop)
|
|
64
|
+
designItem.setStyle('top', (offset.y + (oldTop ?? 0) + containerTop) + "px");
|
|
65
|
+
if (oldRight)
|
|
66
|
+
designItem.setStyle('right', ((oldRight ?? 0) - offset.x + containerRight) + "px");
|
|
67
|
+
if (oldBottom)
|
|
68
|
+
designItem.setStyle('bottom', ((oldBottom ?? 0) - offset.y + containerBottom) + "px");
|
|
63
69
|
}
|
|
64
70
|
}
|
|
65
71
|
/*function placeViaPosition(container: IDesignItem, designItem: IDesignItem, offset: IPoint, mode: 'position' | 'transform' | 'margin' | 'padding') {
|
|
@@ -1,4 +1,18 @@
|
|
|
1
|
-
import { IPoint } from "../../
|
|
2
|
-
|
|
1
|
+
import { IPoint } from "../../interfaces/IPoint.js";
|
|
2
|
+
import { IDesignerCanvas } from "../widgets/designerView/IDesignerCanvas.js";
|
|
3
|
+
export declare function combineTransforms(element: HTMLElement, actualTransforms: string, requestedTransformation: string): void;
|
|
3
4
|
export declare function getDomMatrix(element: HTMLElement): DOMMatrix;
|
|
4
|
-
export declare function convertCoordinates(point:
|
|
5
|
+
export declare function convertCoordinates(point: DOMPoint, matrix: DOMMatrix): DOMPoint;
|
|
6
|
+
export declare function getRotationMatrix3d(axisOfRotation: 'x' | 'y' | 'z' | 'X' | 'Y' | 'Z', angle: number): any[];
|
|
7
|
+
export declare function rotateElementByMatrix3d(element: HTMLElement, matrix: number[]): void;
|
|
8
|
+
export declare function matrixArrayToCssMatrix(matrixArray: number[]): string;
|
|
9
|
+
export declare function cssMatrixToMatrixArray(cssMatrix: string): number[];
|
|
10
|
+
export declare function getRotationAngleFromMatrix(matrixArray: number[], domMatrix: DOMMatrix): any;
|
|
11
|
+
export declare function addVectors(vectorA: [number, number], vectorB: [number, number]): [number, number];
|
|
12
|
+
export declare function getDesignerCanvasNormalizedTransformedOriginWithoutParentTransformation(element: HTMLElement, designerCanvas: IDesignerCanvas): DOMPoint;
|
|
13
|
+
export declare function getResultingTransformationBetweenElementAndAllAncestors(element: HTMLElement, ancestor: HTMLElement, excludeAncestor?: boolean): DOMMatrix;
|
|
14
|
+
export declare function getByParentsTransformedPointRelatedToCanvas(element: HTMLElement, point: DOMPoint, designerCanvas: IDesignerCanvas): IPoint;
|
|
15
|
+
export declare function getDesignerCanvasNormalizedTransformedCornerDOMPoints(element: HTMLElement, untransformedCornerPointsOffset: number, designerCanvas: IDesignerCanvas): [DOMPoint, DOMPoint, DOMPoint, DOMPoint];
|
|
16
|
+
export declare function extractTranslationFromDOMMatrix(matrix: DOMMatrix): DOMPoint;
|
|
17
|
+
export declare function extractRotationAngleFromDOMMatrix(matrix: DOMMatrix): number;
|
|
18
|
+
export declare function normalizeToAbsolutePosition(element: HTMLElement, normalizeProperty: "left" | "top"): string;
|
|
@@ -1,21 +1,212 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import { getElementsWindowOffsetWithoutSelfAndParentTransformations, getParentElementIncludingSlots } from "./ElementHelper.js";
|
|
2
|
+
let identityMatrix = [
|
|
3
|
+
1, 0, 0, 0,
|
|
4
|
+
0, 1, 0, 0,
|
|
5
|
+
0, 0, 1, 0,
|
|
6
|
+
0, 0, 0, 1
|
|
7
|
+
];
|
|
8
|
+
export function combineTransforms(element, actualTransforms, requestedTransformation) {
|
|
9
|
+
if (actualTransforms == null || actualTransforms == '') {
|
|
10
|
+
element.style.transform = requestedTransformation;
|
|
4
11
|
return;
|
|
5
12
|
}
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
helperElement.style.transform = transform2;
|
|
11
|
-
const matrix2 = new DOMMatrix(window.getComputedStyle(helperElement).transform);
|
|
12
|
-
const result = matrix2.multiply(matrix1);
|
|
13
|
-
element.style.transform = result.toString();
|
|
13
|
+
const actualTransformationMatrix = new DOMMatrix(actualTransforms);
|
|
14
|
+
const requestedTransformationMatrix = new DOMMatrix(requestedTransformation);
|
|
15
|
+
const newTransformationMatrix = requestedTransformationMatrix.multiply(actualTransformationMatrix);
|
|
16
|
+
element.style.transform = newTransformationMatrix.toString();
|
|
14
17
|
}
|
|
15
18
|
export function getDomMatrix(element) {
|
|
16
19
|
return new DOMMatrix(window.getComputedStyle(element).transform);
|
|
17
20
|
}
|
|
18
21
|
export function convertCoordinates(point, matrix) {
|
|
19
|
-
|
|
20
|
-
|
|
22
|
+
return point.matrixTransform(matrix.inverse());
|
|
23
|
+
}
|
|
24
|
+
export function getRotationMatrix3d(axisOfRotation, angle) {
|
|
25
|
+
const angleInRadians = angle / 180 * Math.PI;
|
|
26
|
+
const sin = Math.sin;
|
|
27
|
+
const cos = Math.cos;
|
|
28
|
+
let rotationMatrix3d = [];
|
|
29
|
+
switch (axisOfRotation.toLowerCase()) {
|
|
30
|
+
case 'x':
|
|
31
|
+
rotationMatrix3d = [
|
|
32
|
+
1, 0, 0, 0,
|
|
33
|
+
0, cos(angleInRadians), -sin(angleInRadians), 0,
|
|
34
|
+
0, sin(angleInRadians), cos(angleInRadians), 0,
|
|
35
|
+
0, 0, 0, 1
|
|
36
|
+
];
|
|
37
|
+
break;
|
|
38
|
+
case 'y':
|
|
39
|
+
rotationMatrix3d = [
|
|
40
|
+
cos(angleInRadians), 0, sin(angleInRadians), 0,
|
|
41
|
+
0, 1, 0, 0,
|
|
42
|
+
-sin(angleInRadians), 0, cos(angleInRadians), 0,
|
|
43
|
+
0, 0, 0, 1
|
|
44
|
+
];
|
|
45
|
+
break;
|
|
46
|
+
case 'z':
|
|
47
|
+
rotationMatrix3d = [
|
|
48
|
+
cos(angleInRadians), -sin(angleInRadians), 0, 0,
|
|
49
|
+
sin(angleInRadians), cos(angleInRadians), 0, 0,
|
|
50
|
+
0, 0, 1, 0,
|
|
51
|
+
0, 0, 0, 1
|
|
52
|
+
];
|
|
53
|
+
break;
|
|
54
|
+
default:
|
|
55
|
+
rotationMatrix3d = null;
|
|
56
|
+
break;
|
|
57
|
+
}
|
|
58
|
+
return rotationMatrix3d;
|
|
59
|
+
}
|
|
60
|
+
export function rotateElementByMatrix3d(element, matrix) {
|
|
61
|
+
element.style.transform = matrixArrayToCssMatrix(matrix);
|
|
62
|
+
}
|
|
63
|
+
export function matrixArrayToCssMatrix(matrixArray) {
|
|
64
|
+
return "matrix3d(" + matrixArray.join(',') + ")";
|
|
65
|
+
}
|
|
66
|
+
export function cssMatrixToMatrixArray(cssMatrix) {
|
|
67
|
+
if (!cssMatrix.includes('matrix')) {
|
|
68
|
+
if (cssMatrix != 'none')
|
|
69
|
+
console.error('cssMatrixToMatrixArray: no css matrix passed');
|
|
70
|
+
return identityMatrix;
|
|
71
|
+
}
|
|
72
|
+
let matrixArray = cssMatrix.match(/^matrix.*\((.*)\)/)[1].split(',').map(Number);
|
|
73
|
+
return matrixArray;
|
|
74
|
+
}
|
|
75
|
+
export function getRotationAngleFromMatrix(matrixArray, domMatrix) {
|
|
76
|
+
let angle = null;
|
|
77
|
+
const a = domMatrix != null ? domMatrix.a : matrixArray[0];
|
|
78
|
+
const b = domMatrix != null ? domMatrix.b : matrixArray[1];
|
|
79
|
+
angle = Math.round(Math.atan2(b, a) * (180 / Math.PI));
|
|
80
|
+
return angle;
|
|
81
|
+
}
|
|
82
|
+
export function addVectors(vectorA, vectorB) {
|
|
83
|
+
return [vectorA[0] + vectorB[0], vectorA[1] + vectorB[1]];
|
|
84
|
+
}
|
|
85
|
+
export function getDesignerCanvasNormalizedTransformedOriginWithoutParentTransformation(element, designerCanvas) {
|
|
86
|
+
const top0 = new DOMPointReadOnly(-parseInt(getComputedStyle(element).transformOrigin.split(' ')[0]), -parseInt(getComputedStyle(element).transformOrigin.split(' ')[1]), 0, 0);
|
|
87
|
+
const p0Offsets = getElementsWindowOffsetWithoutSelfAndParentTransformations(element);
|
|
88
|
+
const transformOriginAbsolutRelatedToWindowWithoutAnyTransformation = new DOMPoint(p0Offsets.offsetLeft - top0.x, p0Offsets.offsetTop - top0.y);
|
|
89
|
+
const designerCanvasNormalizedTransformedOrigin = new DOMPoint(transformOriginAbsolutRelatedToWindowWithoutAnyTransformation.x - designerCanvas.containerBoundingRect.x, transformOriginAbsolutRelatedToWindowWithoutAnyTransformation.y - designerCanvas.containerBoundingRect.y);
|
|
90
|
+
return designerCanvasNormalizedTransformedOrigin;
|
|
91
|
+
}
|
|
92
|
+
export function getResultingTransformationBetweenElementAndAllAncestors(element, ancestor, excludeAncestor) {
|
|
93
|
+
let actualElement = element;
|
|
94
|
+
let actualElementMatrix;
|
|
95
|
+
let originalElementAndAllParentsMultipliedMatrix;
|
|
96
|
+
while (actualElement != ancestor) {
|
|
97
|
+
const newElement = getParentElementIncludingSlots(actualElement);
|
|
98
|
+
actualElementMatrix = new DOMMatrix(getComputedStyle(actualElement).transform);
|
|
99
|
+
if (actualElement == element) {
|
|
100
|
+
originalElementAndAllParentsMultipliedMatrix = actualElementMatrix.multiply(new DOMMatrix(getComputedStyle(newElement).transform));
|
|
101
|
+
}
|
|
102
|
+
else if (newElement != ancestor || !excludeAncestor) {
|
|
103
|
+
originalElementAndAllParentsMultipliedMatrix = originalElementAndAllParentsMultipliedMatrix.multiply(new DOMMatrix(getComputedStyle(newElement).transform));
|
|
104
|
+
}
|
|
105
|
+
actualElement = newElement;
|
|
106
|
+
}
|
|
107
|
+
return originalElementAndAllParentsMultipliedMatrix;
|
|
108
|
+
}
|
|
109
|
+
export function getByParentsTransformedPointRelatedToCanvas(element, point, designerCanvas) {
|
|
110
|
+
const canvas = element.closest('#node-projects-designer-canvas-canvas');
|
|
111
|
+
let actualElement = element;
|
|
112
|
+
let parentElementTransformOriginToPointVectorTransformed;
|
|
113
|
+
let byParentTransformedPointRelatedToCanvas = { x: 0, y: 0 };
|
|
114
|
+
while (actualElement != canvas) {
|
|
115
|
+
const parentElement = getParentElementIncludingSlots(actualElement);
|
|
116
|
+
const parentElementTransformOrigin = new DOMPoint(getElementsWindowOffsetWithoutSelfAndParentTransformations(parentElement).offsetLeft - designerCanvas.outerRect.x + parseInt(getComputedStyle(parentElement).transformOrigin.split(' ')[0]), getElementsWindowOffsetWithoutSelfAndParentTransformations(parentElement).offsetTop - designerCanvas.outerRect.y + parseInt(getComputedStyle(parentElement).transformOrigin.split(' ')[1]));
|
|
117
|
+
parentElementTransformOrigin.x -= extractTranslationFromDOMMatrix(new DOMMatrix(element.style.transform)).x;
|
|
118
|
+
parentElementTransformOrigin.y -= extractTranslationFromDOMMatrix(new DOMMatrix(element.style.transform)).y;
|
|
119
|
+
const parentElementTransformOriginToPointVector = new DOMPointReadOnly(-parentElementTransformOrigin.x + (element == actualElement ? point.x : byParentTransformedPointRelatedToCanvas.x), -parentElementTransformOrigin.y + (element == actualElement ? point.y : byParentTransformedPointRelatedToCanvas.y));
|
|
120
|
+
parentElementTransformOriginToPointVectorTransformed = parentElementTransformOriginToPointVector.matrixTransform(new DOMMatrix(getComputedStyle(parentElement).transform));
|
|
121
|
+
byParentTransformedPointRelatedToCanvas = new DOMPoint(parentElementTransformOrigin.x + parentElementTransformOriginToPointVectorTransformed.x, parentElementTransformOrigin.y + parentElementTransformOriginToPointVectorTransformed.y);
|
|
122
|
+
actualElement = parentElement;
|
|
123
|
+
}
|
|
124
|
+
return byParentTransformedPointRelatedToCanvas;
|
|
125
|
+
}
|
|
126
|
+
export function getDesignerCanvasNormalizedTransformedCornerDOMPoints(element, untransformedCornerPointsOffset, designerCanvas) {
|
|
127
|
+
const topleft = 0;
|
|
128
|
+
const topright = 1;
|
|
129
|
+
const bottomleft = 2;
|
|
130
|
+
const bottomright = 3;
|
|
131
|
+
const p0Offsets = getElementsWindowOffsetWithoutSelfAndParentTransformations(element);
|
|
132
|
+
const p0OffsetsRelatedToCanvas = DOMPoint.fromPoint({
|
|
133
|
+
x: p0Offsets.offsetLeft - designerCanvas.containerBoundingRect.left,
|
|
134
|
+
y: p0Offsets.offsetTop - designerCanvas.containerBoundingRect.top
|
|
135
|
+
});
|
|
136
|
+
let width = parseInt(getComputedStyle(element).width.replace('px', ''));
|
|
137
|
+
let height = parseInt(getComputedStyle(element).height.replace('px', ''));
|
|
138
|
+
if (getComputedStyle(element).boxSizing == 'content-box') {
|
|
139
|
+
width += parseInt(getComputedStyle(element).paddingLeft.replace('px', ''))
|
|
140
|
+
+ parseInt(getComputedStyle(element).marginLeft.replace('px', ''))
|
|
141
|
+
+ parseInt(getComputedStyle(element).borderLeft.replace('px', ''))
|
|
142
|
+
+ parseInt(getComputedStyle(element).paddingRight.replace('px', ''))
|
|
143
|
+
+ parseInt(getComputedStyle(element).marginRight.replace('px', ''))
|
|
144
|
+
+ parseInt(getComputedStyle(element).borderRight.replace('px', ''));
|
|
145
|
+
height += parseInt(getComputedStyle(element).paddingTop.replace('px', ''))
|
|
146
|
+
+ parseInt(getComputedStyle(element).marginTop.replace('px', ''))
|
|
147
|
+
+ parseInt(getComputedStyle(element).borderTop.replace('px', ''))
|
|
148
|
+
+ parseInt(getComputedStyle(element).paddingBottom.replace('px', ''))
|
|
149
|
+
+ parseInt(getComputedStyle(element).marginBottom.replace('px', ''))
|
|
150
|
+
+ parseInt(getComputedStyle(element).borderBottom.replace('px', ''));
|
|
151
|
+
}
|
|
152
|
+
const elementWithoutTransformCornerDOMPoints = [];
|
|
153
|
+
elementWithoutTransformCornerDOMPoints[topleft] = DOMPoint.fromPoint({
|
|
154
|
+
x: p0OffsetsRelatedToCanvas.x - untransformedCornerPointsOffset,
|
|
155
|
+
y: p0OffsetsRelatedToCanvas.y - untransformedCornerPointsOffset
|
|
156
|
+
});
|
|
157
|
+
elementWithoutTransformCornerDOMPoints[topright] = DOMPoint.fromPoint({
|
|
158
|
+
x: p0OffsetsRelatedToCanvas.x + width + untransformedCornerPointsOffset,
|
|
159
|
+
y: p0OffsetsRelatedToCanvas.y - untransformedCornerPointsOffset
|
|
160
|
+
});
|
|
161
|
+
elementWithoutTransformCornerDOMPoints[bottomleft] = DOMPoint.fromPoint({
|
|
162
|
+
x: p0OffsetsRelatedToCanvas.x - untransformedCornerPointsOffset,
|
|
163
|
+
y: p0OffsetsRelatedToCanvas.y + height + untransformedCornerPointsOffset
|
|
164
|
+
});
|
|
165
|
+
elementWithoutTransformCornerDOMPoints[bottomright] = DOMPoint.fromPoint({
|
|
166
|
+
x: p0OffsetsRelatedToCanvas.x + width + untransformedCornerPointsOffset,
|
|
167
|
+
y: p0OffsetsRelatedToCanvas.y + height + untransformedCornerPointsOffset
|
|
168
|
+
});
|
|
169
|
+
const transformOriginWithoutTransformRelatedToCanvas = DOMPointReadOnly.fromPoint({
|
|
170
|
+
x: p0OffsetsRelatedToCanvas.x + parseInt(getComputedStyle(element).transformOrigin.split(' ')[0]),
|
|
171
|
+
y: p0OffsetsRelatedToCanvas.y + parseInt(getComputedStyle(element).transformOrigin.split(' ')[1]),
|
|
172
|
+
z: 0,
|
|
173
|
+
w: 0
|
|
174
|
+
});
|
|
175
|
+
const designerCanvasNormalizedTransformOrigin = getByParentsTransformedPointRelatedToCanvas(element, new DOMPoint(getElementsWindowOffsetWithoutSelfAndParentTransformations(element).offsetLeft - designerCanvas.outerRect.left + parseInt(getComputedStyle(element).transformOrigin.split(' ')[0]), getElementsWindowOffsetWithoutSelfAndParentTransformations(element).offsetTop - designerCanvas.outerRect.top + parseInt(getComputedStyle(element).transformOrigin.split(' ')[1])), designerCanvas);
|
|
176
|
+
let top0 = new DOMPoint(-(transformOriginWithoutTransformRelatedToCanvas.x - elementWithoutTransformCornerDOMPoints[topleft].x), -(transformOriginWithoutTransformRelatedToCanvas.y - elementWithoutTransformCornerDOMPoints[topleft].y));
|
|
177
|
+
let top1 = new DOMPoint(-(transformOriginWithoutTransformRelatedToCanvas.x - elementWithoutTransformCornerDOMPoints[topright].x), -(transformOriginWithoutTransformRelatedToCanvas.y - elementWithoutTransformCornerDOMPoints[topright].y));
|
|
178
|
+
let top2 = new DOMPoint(-(transformOriginWithoutTransformRelatedToCanvas.x - elementWithoutTransformCornerDOMPoints[bottomleft].x), -(transformOriginWithoutTransformRelatedToCanvas.y - elementWithoutTransformCornerDOMPoints[bottomleft].y));
|
|
179
|
+
let top3 = new DOMPoint(-(transformOriginWithoutTransformRelatedToCanvas.x - elementWithoutTransformCornerDOMPoints[bottomright].x), -(transformOriginWithoutTransformRelatedToCanvas.y - elementWithoutTransformCornerDOMPoints[bottomright].y));
|
|
180
|
+
let originalElementAndAllParentsMultipliedMatrix = getResultingTransformationBetweenElementAndAllAncestors(element, designerCanvas.canvas, true);
|
|
181
|
+
let top0Transformed = top0.matrixTransform(originalElementAndAllParentsMultipliedMatrix);
|
|
182
|
+
let top1Transformed = top1.matrixTransform(originalElementAndAllParentsMultipliedMatrix);
|
|
183
|
+
let top2Transformed = top2.matrixTransform(originalElementAndAllParentsMultipliedMatrix);
|
|
184
|
+
let top3Transformed = top3.matrixTransform(originalElementAndAllParentsMultipliedMatrix);
|
|
185
|
+
let transformedCornerPoints = [];
|
|
186
|
+
transformedCornerPoints[0] = new DOMPoint(designerCanvasNormalizedTransformOrigin.x + top0Transformed.x, designerCanvasNormalizedTransformOrigin.y + top0Transformed.y);
|
|
187
|
+
transformedCornerPoints[1] = new DOMPoint(designerCanvasNormalizedTransformOrigin.x + top1Transformed.x, designerCanvasNormalizedTransformOrigin.y + top1Transformed.y);
|
|
188
|
+
transformedCornerPoints[2] = new DOMPoint(designerCanvasNormalizedTransformOrigin.x + top2Transformed.x, designerCanvasNormalizedTransformOrigin.y + top2Transformed.y);
|
|
189
|
+
transformedCornerPoints[3] = new DOMPoint(designerCanvasNormalizedTransformOrigin.x + top3Transformed.x, designerCanvasNormalizedTransformOrigin.y + top3Transformed.y);
|
|
190
|
+
return transformedCornerPoints;
|
|
191
|
+
}
|
|
192
|
+
export function extractTranslationFromDOMMatrix(matrix) {
|
|
193
|
+
return new DOMPoint(matrix.m41, matrix.m42, 0, 0);
|
|
194
|
+
}
|
|
195
|
+
export function extractRotationAngleFromDOMMatrix(matrix) {
|
|
196
|
+
return getRotationAngleFromMatrix(null, matrix);
|
|
197
|
+
}
|
|
198
|
+
export function normalizeToAbsolutePosition(element, normalizeProperty) {
|
|
199
|
+
switch (normalizeProperty) {
|
|
200
|
+
case "left":
|
|
201
|
+
let left = getComputedStyle(element).left;
|
|
202
|
+
element.style.removeProperty('right');
|
|
203
|
+
element.style.left = left;
|
|
204
|
+
return left;
|
|
205
|
+
case "top":
|
|
206
|
+
let top = getComputedStyle(element).top;
|
|
207
|
+
element.style.removeProperty('bottom');
|
|
208
|
+
element.style.top = top;
|
|
209
|
+
return top;
|
|
210
|
+
}
|
|
211
|
+
return null;
|
|
21
212
|
}
|
|
@@ -69,6 +69,8 @@ import { LineExtensionProvider } from '../widgets/designerView/extensions/svg/Li
|
|
|
69
69
|
import { RectExtentionProvider } from '../widgets/designerView/extensions/svg/RectExtensionProvider.js';
|
|
70
70
|
import { EllipsisExtensionProvider } from '../widgets/designerView/extensions/svg/EllipsisExtensionProvider.js';
|
|
71
71
|
import { PropertyGroupsService } from './propertiesService/PropertyGroupsService.js';
|
|
72
|
+
import { PlacementExtensionProvider } from '../widgets/designerView/extensions/PlacementExtensionProvider.js';
|
|
73
|
+
import { FlexboxExtensionProvider } from '../widgets/designerView/extensions/FlexboxExtensionProvider.js';
|
|
72
74
|
export function createDefaultServiceContainer() {
|
|
73
75
|
let serviceContainer = new ServiceContainer();
|
|
74
76
|
serviceContainer.register("propertyService", new PolymerPropertiesService());
|
|
@@ -99,6 +101,7 @@ export function createDefaultServiceContainer() {
|
|
|
99
101
|
serviceContainer.designerExtensions.set(ExtensionType.PrimarySelection, [
|
|
100
102
|
new ElementDragTitleExtensionProvider(),
|
|
101
103
|
new GridExtensionProvider(),
|
|
104
|
+
new FlexboxExtensionProvider(),
|
|
102
105
|
new TransformOriginExtensionProvider(),
|
|
103
106
|
new CanvasExtensionProvider(),
|
|
104
107
|
new PositionExtensionProvider(),
|
|
@@ -113,11 +116,15 @@ export function createDefaultServiceContainer() {
|
|
|
113
116
|
new SelectionDefaultExtensionProvider()
|
|
114
117
|
]);
|
|
115
118
|
serviceContainer.designerExtensions.set(ExtensionType.PrimarySelectionContainer, [
|
|
116
|
-
new GridExtensionProvider()
|
|
119
|
+
new GridExtensionProvider(),
|
|
120
|
+
new FlexboxExtensionProvider()
|
|
117
121
|
]);
|
|
118
122
|
serviceContainer.designerExtensions.set(ExtensionType.MouseOver, [
|
|
119
123
|
new MouseOverExtensionProvider()
|
|
120
124
|
]);
|
|
125
|
+
serviceContainer.designerExtensions.set(ExtensionType.Placement, [
|
|
126
|
+
new PlacementExtensionProvider()
|
|
127
|
+
]);
|
|
121
128
|
serviceContainer.designerExtensions.set(ExtensionType.ContainerDrag, [
|
|
122
129
|
new GrayOutExtensionProvider()
|
|
123
130
|
]);
|
|
@@ -10,6 +10,7 @@ export declare class DefaultPlacementService implements IPlacementService {
|
|
|
10
10
|
getElementOffset(container: IDesignItem, designItem?: IDesignItem): IPoint;
|
|
11
11
|
private calculateTrack;
|
|
12
12
|
placePoint(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): IPoint;
|
|
13
|
+
startPlace(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): void;
|
|
13
14
|
place(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): void;
|
|
14
15
|
enterContainer(container: IDesignItem, items: IDesignItem[]): void;
|
|
15
16
|
leaveContainer(container: IDesignItem, items: IDesignItem[]): void;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { DomConverter } from '../../widgets/designerView/DomConverter.js';
|
|
2
|
-
import { combineTransforms } from '../../helper/TransformHelper.js';
|
|
2
|
+
import { combineTransforms, extractTranslationFromDOMMatrix, getResultingTransformationBetweenElementAndAllAncestors } from '../../helper/TransformHelper.js';
|
|
3
3
|
import { filterChildPlaceItems, placeDesignItem } from '../../helper/LayoutHelper.js';
|
|
4
|
+
import { ExtensionType } from '../../widgets/designerView/extensions/ExtensionType.js';
|
|
4
5
|
export class DefaultPlacementService {
|
|
5
6
|
serviceForContainer(container, containerStyle) {
|
|
6
7
|
if (containerStyle.display === 'grid' || containerStyle.display === 'inline-grid' ||
|
|
@@ -83,15 +84,25 @@ export class DefaultPlacementService {
|
|
|
83
84
|
}
|
|
84
85
|
return { x: trackX, y: trackY };
|
|
85
86
|
}
|
|
87
|
+
startPlace(event, placementView, container, startPoint, offsetInControl, newPoint, items) {
|
|
88
|
+
}
|
|
86
89
|
place(event, placementView, container, startPoint, offsetInControl, newPoint, items) {
|
|
87
90
|
//TODO:, this should revert all undo actions while active
|
|
88
91
|
//maybe a undo actions returns itself or an id so it could be changed?
|
|
89
92
|
let track = this.calculateTrack(event, placementView, startPoint, offsetInControl, newPoint, items[0]);
|
|
90
|
-
let
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
93
|
+
let filteredItems = filterChildPlaceItems(items);
|
|
94
|
+
for (const designItem of filteredItems) {
|
|
95
|
+
const canvas = designItem.element.closest('#node-projects-designer-canvas-canvas');
|
|
96
|
+
let originalElementAndAllAncestorsMultipliedMatrix = getResultingTransformationBetweenElementAndAllAncestors(designItem.element.parentElement, canvas, true);
|
|
97
|
+
let transformMatrixParentTransformsCompensated = null;
|
|
98
|
+
if (originalElementAndAllAncestorsMultipliedMatrix) {
|
|
99
|
+
transformMatrixParentTransformsCompensated = new DOMPoint(track.x, track.y, 0, 0).matrixTransform(originalElementAndAllAncestorsMultipliedMatrix.inverse());
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
transformMatrixParentTransformsCompensated = new DOMPoint(track.x, track.y, 0, 0);
|
|
103
|
+
}
|
|
104
|
+
const translationMatrix = new DOMMatrix().translate(transformMatrixParentTransformsCompensated.x, transformMatrixParentTransformsCompensated.y);
|
|
105
|
+
combineTransforms(designItem.element, designItem.styles.get('transform'), translationMatrix.toString());
|
|
95
106
|
}
|
|
96
107
|
}
|
|
97
108
|
enterContainer(container, items) {
|
|
@@ -108,11 +119,16 @@ export class DefaultPlacementService {
|
|
|
108
119
|
leaveContainer(container, items) {
|
|
109
120
|
}
|
|
110
121
|
finishPlace(event, placementView, container, startPoint, offsetInControl, newPoint, items) {
|
|
111
|
-
let track = this.calculateTrack(event, placementView, startPoint, offsetInControl, newPoint, items[0]);
|
|
112
122
|
let filterdItems = filterChildPlaceItems(items);
|
|
113
123
|
for (const designItem of filterdItems) {
|
|
124
|
+
let translation = extractTranslationFromDOMMatrix(new DOMMatrix(designItem.element.style.transform));
|
|
125
|
+
const stylesMapOffset = extractTranslationFromDOMMatrix(new DOMMatrix(designItem.styles.get('transform') ?? ''));
|
|
114
126
|
designItem.element.style.transform = designItem.styles.get('transform') ?? '';
|
|
115
|
-
|
|
127
|
+
let track = { x: translation.x, y: translation.y };
|
|
128
|
+
placeDesignItem(container, designItem, { x: track.x - stylesMapOffset.x, y: track.y - stylesMapOffset.y }, 'position');
|
|
129
|
+
}
|
|
130
|
+
for (const item of items) {
|
|
131
|
+
placementView.extensionManager.removeExtension(item, ExtensionType.Placement);
|
|
116
132
|
}
|
|
117
133
|
}
|
|
118
134
|
}
|
|
@@ -11,6 +11,7 @@ export declare class FlexBoxPlacementService implements IPlacementService {
|
|
|
11
11
|
canLeave(container: IDesignItem, items: IDesignItem[]): boolean;
|
|
12
12
|
getElementOffset(container: IDesignItem, designItem?: IDesignItem): IPoint;
|
|
13
13
|
placePoint(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): IPoint;
|
|
14
|
+
startPlace(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): void;
|
|
14
15
|
place(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): void;
|
|
15
16
|
finishPlace(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): void;
|
|
16
17
|
}
|
|
@@ -38,6 +38,8 @@ export class FlexBoxPlacementService {
|
|
|
38
38
|
const defaultPlacementService = container.serviceContainer.getLastServiceWhere('containerService', x => x instanceof DefaultPlacementService);
|
|
39
39
|
return defaultPlacementService.placePoint(event, placementView, container, startPoint, offsetInControl, newPoint, items);
|
|
40
40
|
}
|
|
41
|
+
startPlace(event, placementView, container, startPoint, offsetInControl, newPoint, items) {
|
|
42
|
+
}
|
|
41
43
|
place(event, placementView, container, startPoint, offsetInControl, newPoint, items) {
|
|
42
44
|
const pos = placementView.getNormalizedEventCoordinates(event);
|
|
43
45
|
const style = getComputedStyle(container.element);
|
|
@@ -11,6 +11,7 @@ export declare class GridPlacementService implements IPlacementService {
|
|
|
11
11
|
canLeave(container: IDesignItem, items: IDesignItem[]): boolean;
|
|
12
12
|
getElementOffset(container: IDesignItem, designItem?: IDesignItem): IPoint;
|
|
13
13
|
placePoint(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): IPoint;
|
|
14
|
+
startPlace(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): void;
|
|
14
15
|
place(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): void;
|
|
15
16
|
finishPlace(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): void;
|
|
16
17
|
}
|
|
@@ -42,6 +42,8 @@ export class GridPlacementService {
|
|
|
42
42
|
const defaultPlacementService = container.serviceContainer.getLastServiceWhere('containerService', x => x instanceof DefaultPlacementService);
|
|
43
43
|
return defaultPlacementService.placePoint(event, placementView, container, startPoint, offsetInControl, newPoint, items);
|
|
44
44
|
}
|
|
45
|
+
startPlace(event, placementView, container, startPoint, offsetInControl, newPoint, items) {
|
|
46
|
+
}
|
|
45
47
|
place(event, placementView, container, startPoint, offsetInControl, newPoint, items) {
|
|
46
48
|
const gridInformation = CalculateGridInformation(container);
|
|
47
49
|
const pos = placementView.getNormalizedEventCoordinates(event);
|
|
@@ -11,6 +11,7 @@ export interface IPlacementService extends IService {
|
|
|
11
11
|
leaveContainer(container: IDesignItem, items: IDesignItem[]): any;
|
|
12
12
|
getElementOffset(container: IDesignItem, designItem?: IDesignItem): IPoint;
|
|
13
13
|
placePoint(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): IPoint;
|
|
14
|
+
startPlace(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): any;
|
|
14
15
|
place(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): any;
|
|
15
16
|
finishPlace(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): any;
|
|
16
17
|
}
|
|
@@ -26,8 +26,11 @@ export interface IDesignerCanvas extends IPlacementView, IUiCommandHandler {
|
|
|
26
26
|
readonly alignOnSnap: boolean;
|
|
27
27
|
readonly onContentChanged: TypedEvent<void>;
|
|
28
28
|
zoomFactor: number;
|
|
29
|
+
designerOffsetWidth: number;
|
|
30
|
+
designerOffsetHeight: number;
|
|
29
31
|
readonly scaleFactor: number;
|
|
30
32
|
canvasOffset: IPoint;
|
|
33
|
+
canvas: HTMLElement;
|
|
31
34
|
eatEvents: Element;
|
|
32
35
|
initialize(serviceContainer: ServiceContainer): any;
|
|
33
36
|
getNormalizedEventCoordinates(event: MouseEvent): IPoint;
|
|
@@ -37,6 +40,7 @@ export interface IDesignerCanvas extends IPlacementView, IUiCommandHandler {
|
|
|
37
40
|
realWidth: number;
|
|
38
41
|
realHeight: number;
|
|
39
42
|
};
|
|
43
|
+
getNormalizedElementCoordinates(element: Element, ignoreScalefactor?: boolean): IRect;
|
|
40
44
|
captureActiveTool(tool: ITool): any;
|
|
41
45
|
releaseActiveTool(): any;
|
|
42
46
|
getDesignSurfaceDimensions(): ISize;
|
|
@@ -29,7 +29,6 @@ export declare class DesignerCanvas extends BaseCustomWebComponentLazyAppend imp
|
|
|
29
29
|
overlayLayer: OverlayLayerView;
|
|
30
30
|
rootDesignItem: IDesignItem;
|
|
31
31
|
eatEvents: Element;
|
|
32
|
-
transformHelperElement: HTMLDivElement;
|
|
33
32
|
private _zoomFactor;
|
|
34
33
|
private _scaleFactor;
|
|
35
34
|
private _canvasOffset;
|
|
@@ -44,6 +43,7 @@ export declare class DesignerCanvas extends BaseCustomWebComponentLazyAppend imp
|
|
|
44
43
|
set canvasOffsetUnzoomed(value: IPoint);
|
|
45
44
|
onContentChanged: TypedEvent<void>;
|
|
46
45
|
onZoomFactorChanged: TypedEvent<number>;
|
|
46
|
+
get canvas(): HTMLElement;
|
|
47
47
|
private _canvas;
|
|
48
48
|
private _canvasContainer;
|
|
49
49
|
private _outercanvas2;
|
|
@@ -100,7 +100,7 @@ export declare class DesignerCanvas extends BaseCustomWebComponentLazyAppend imp
|
|
|
100
100
|
* Converts the Event x/y coordinates, to the mouse position in the viewport
|
|
101
101
|
*/
|
|
102
102
|
getViewportCoordinates(event: MouseEvent): IPoint;
|
|
103
|
-
getNormalizedElementCoordinates(element: Element): IRect;
|
|
103
|
+
getNormalizedElementCoordinates(element: Element, ignoreScalefactor?: boolean): IRect;
|
|
104
104
|
getNormalizedElementCoordinatesAndRealSizes(element: Element): IRect & {
|
|
105
105
|
realWidth: number;
|
|
106
106
|
realHeight: number;
|
|
@@ -36,7 +36,6 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
|
|
|
36
36
|
overlayLayer;
|
|
37
37
|
rootDesignItem;
|
|
38
38
|
eatEvents;
|
|
39
|
-
transformHelperElement;
|
|
40
39
|
_zoomFactor = 1; //if scale or zoom css property is used this needs to be the value
|
|
41
40
|
_scaleFactor = 1; //if scale css property is used this need to be the scale value
|
|
42
41
|
_canvasOffset = { x: 0, y: 0 };
|
|
@@ -67,6 +66,9 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
|
|
|
67
66
|
}
|
|
68
67
|
onContentChanged = new TypedEvent();
|
|
69
68
|
onZoomFactorChanged = new TypedEvent();
|
|
69
|
+
get canvas() {
|
|
70
|
+
return this._canvas;
|
|
71
|
+
}
|
|
70
72
|
// Private Variables
|
|
71
73
|
_canvas;
|
|
72
74
|
_canvasContainer;
|
|
@@ -136,11 +138,12 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
|
|
|
136
138
|
height: 100%;
|
|
137
139
|
top: 0;
|
|
138
140
|
}
|
|
139
|
-
|
|
140
|
-
#node-projects-designer-canvas-
|
|
141
|
+
|
|
142
|
+
#node-projects-designer-canvas-helper-element {
|
|
141
143
|
height: 0;
|
|
142
144
|
width: 0;
|
|
143
|
-
}
|
|
145
|
+
}
|
|
146
|
+
`;
|
|
144
147
|
static template = html `
|
|
145
148
|
<div style="display: flex;flex-direction: column;width: 100%;height: 100%;">
|
|
146
149
|
<div style="width: 100%;height: 100%;">
|
|
@@ -152,7 +155,6 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
|
|
|
152
155
|
</div>
|
|
153
156
|
<div id="node-projects-designer-canvas-clickOverlay" tabindex="0" style="pointer-events: auto;"></div>
|
|
154
157
|
</div>
|
|
155
|
-
<div id="node-projects-designer-canvas-transformHelper"></div>
|
|
156
158
|
</div>`;
|
|
157
159
|
extensionManager;
|
|
158
160
|
_pointerextensions;
|
|
@@ -164,7 +166,6 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
|
|
|
164
166
|
this._canvasContainer = this._getDomElement('node-projects-designer-canvas-canvasContainer');
|
|
165
167
|
this._outercanvas2 = this._getDomElement('node-projects-designer-canvas-outercanvas2');
|
|
166
168
|
this.clickOverlay = this._getDomElement('node-projects-designer-canvas-clickOverlay');
|
|
167
|
-
this.transformHelperElement = this._getDomElement('node-projects-designer-canvas-transformHelper');
|
|
168
169
|
this._onKeyDownBound = this.onKeyDown.bind(this);
|
|
169
170
|
this._onKeyUpBound = this.onKeyUp.bind(this);
|
|
170
171
|
this._onDblClickBound = this._onDblClick.bind(this);
|
|
@@ -768,9 +769,9 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
|
|
|
768
769
|
y: (event.clientY - this.outerRect.y)
|
|
769
770
|
};
|
|
770
771
|
}
|
|
771
|
-
getNormalizedElementCoordinates(element) {
|
|
772
|
+
getNormalizedElementCoordinates(element, ignoreScalefactor) {
|
|
772
773
|
const targetRect = element.getBoundingClientRect();
|
|
773
|
-
return { x: (targetRect.x - this.containerBoundingRect.x) / this.scaleFactor, y: (targetRect.y - this.containerBoundingRect.y) / this.scaleFactor, width: targetRect.width / this.scaleFactor, height: targetRect.height / this.scaleFactor };
|
|
774
|
+
return { x: (targetRect.x - this.containerBoundingRect.x) / (ignoreScalefactor ? 1 : this.scaleFactor), y: (targetRect.y - this.containerBoundingRect.y) / (ignoreScalefactor ? 1 : this.scaleFactor), width: targetRect.width / (ignoreScalefactor ? 1 : this.scaleFactor), height: targetRect.height / (ignoreScalefactor ? 1 : this.scaleFactor) };
|
|
774
775
|
}
|
|
775
776
|
getNormalizedElementCoordinatesAndRealSizes(element) {
|
|
776
777
|
let ret = this.getNormalizedElementCoordinates(element);
|
|
@@ -2,6 +2,7 @@ import { IDesignerCanvas } from "../IDesignerCanvas";
|
|
|
2
2
|
import { IExtensionManager } from "./IExtensionManger";
|
|
3
3
|
import { OverlayLayerView } from '../overlayLayerView';
|
|
4
4
|
import { OverlayLayer } from './OverlayLayer';
|
|
5
|
+
import { IPoint } from "../../../../interfaces/IPoint";
|
|
5
6
|
export declare abstract class AbstractExtensionBase {
|
|
6
7
|
protected overlays: SVGElement[];
|
|
7
8
|
protected overlayLayerView: OverlayLayerView;
|
|
@@ -14,4 +15,5 @@ export declare abstract class AbstractExtensionBase {
|
|
|
14
15
|
protected _drawRect(x: number, y: number, w: number, h: number, className?: string, rect?: SVGRectElement, overlayLayer?: OverlayLayer): SVGRectElement;
|
|
15
16
|
protected _drawText(text: string, x: number, y: number, className?: string, textEl?: SVGTextElement, overlayLayer?: OverlayLayer): SVGTextElement;
|
|
16
17
|
protected _drawTextWithBackground(text: string, x: number, y: number, backgroundColor: string, className?: string, existingEls?: [SVGFilterElement, SVGFEFloodElement, SVGTextElement, SVGTextElement], overlayLayer?: OverlayLayer): [SVGFilterElement, SVGFEFloodElement, SVGTextElement, SVGTextElement];
|
|
18
|
+
protected _drawTransformedRect(points: [IPoint, IPoint, IPoint, IPoint], className?: string, path?: SVGPathElement, overlayLayer?: OverlayLayer): SVGPathElement;
|
|
17
19
|
}
|
|
@@ -54,4 +54,12 @@ export class AbstractExtensionBase {
|
|
|
54
54
|
}
|
|
55
55
|
return newEls;
|
|
56
56
|
}
|
|
57
|
+
_drawTransformedRect(points, className, path, overlayLayer) {
|
|
58
|
+
let data = "M" + points[0].x + " " + points[0].y + " L" + points[1].x + " " + points[1].y + " L" + points[3].x + " " + points[3].y + " L" + points[2].x + " " + points[2].y + "Z";
|
|
59
|
+
const newPath = this.overlayLayerView.drawPath(data, className, path, overlayLayer);
|
|
60
|
+
if (!path) {
|
|
61
|
+
this.overlays.push(newPath);
|
|
62
|
+
}
|
|
63
|
+
return newPath;
|
|
64
|
+
}
|
|
57
65
|
}
|
|
@@ -256,6 +256,7 @@ export class ExtensionManager {
|
|
|
256
256
|
this.refreshExtensions(designItems, ExtensionType.ContainerDragOver, ignoredExtension);
|
|
257
257
|
this.refreshExtensions(designItems, ExtensionType.ContainerDrag, ignoredExtension);
|
|
258
258
|
this.refreshExtensions(designItems, ExtensionType.Doubleclick, ignoredExtension);
|
|
259
|
+
this.refreshExtensions(designItems, ExtensionType.Placement, ignoredExtension);
|
|
259
260
|
}
|
|
260
261
|
}
|
|
261
262
|
refreshAllAppliedExtentions() {
|