@idraw/core 0.4.0-beta.31 → 0.4.0-beta.33
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/esm/middleware/info/index.js +4 -2
- package/dist/esm/middleware/info/types.d.ts +2 -2
- package/dist/esm/middleware/layout-selector/config.d.ts +2 -2
- package/dist/esm/middleware/layout-selector/config.js +3 -2
- package/dist/esm/middleware/layout-selector/index.d.ts +2 -2
- package/dist/esm/middleware/layout-selector/index.js +7 -4
- package/dist/esm/middleware/layout-selector/util.d.ts +3 -2
- package/dist/esm/middleware/layout-selector/util.js +19 -64
- package/dist/esm/middleware/selector/draw-wrapper.d.ts +3 -3
- package/dist/esm/middleware/selector/draw-wrapper.js +1 -1
- package/dist/esm/middleware/selector/index.js +60 -41
- package/dist/esm/middleware/selector/util.d.ts +2 -2
- package/dist/esm/middleware/selector/util.js +4 -4
- package/dist/index.global.js +102 -109
- package/dist/index.global.min.js +1 -1
- package/package.json +5 -5
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { formatNumber, getViewScaleInfoFromSnapshot, getViewSizeInfoFromSnapshot, createUUID, limitAngle, rotatePoint, parseAngleToRadian } from '@idraw/util';
|
|
2
|
-
import { keySelectedElementList, keyActionType, keyGroupQueue } from '../selector';
|
|
2
|
+
import { keySelectedElementList, keyHoverElement, keyActionType, keyGroupQueue } from '../selector';
|
|
3
3
|
import { drawSizeInfoText, drawPositionInfoText, drawAngleInfoText } from './draw-info';
|
|
4
4
|
import { defaltStyle } from './config';
|
|
5
5
|
const infoFontSize = 10;
|
|
@@ -16,11 +16,13 @@ export const MiddlewareInfo = (opts, config) => {
|
|
|
16
16
|
return {
|
|
17
17
|
name: '@middleware/info',
|
|
18
18
|
beforeDrawFrame({ snapshot }) {
|
|
19
|
+
var _a;
|
|
19
20
|
const { sharedStore } = snapshot;
|
|
20
21
|
const selectedElementList = sharedStore[keySelectedElementList];
|
|
22
|
+
const hoverElement = sharedStore[keyHoverElement];
|
|
21
23
|
const actionType = sharedStore[keyActionType];
|
|
22
24
|
const groupQueue = sharedStore[keyGroupQueue] || [];
|
|
23
|
-
if (selectedElementList.length === 1) {
|
|
25
|
+
if (selectedElementList.length === 1 && !((_a = hoverElement === null || hoverElement === void 0 ? void 0 : hoverElement.operations) === null || _a === void 0 ? void 0 : _a.locked)) {
|
|
24
26
|
const elem = selectedElementList[0];
|
|
25
27
|
if (elem && ['select', 'drag', 'resize'].includes(actionType)) {
|
|
26
28
|
const viewScaleInfo = getViewScaleInfoFromSnapshot(snapshot);
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { keySelectedElementList, keyActionType, keyGroupQueue } from '../selector';
|
|
1
|
+
import { keySelectedElementList, keyHoverElement, keyActionType, keyGroupQueue } from '../selector';
|
|
2
2
|
import type { DeepSelectorSharedStorage } from '../selector';
|
|
3
|
-
export type DeepInfoSharedStorage = Pick<DeepSelectorSharedStorage, typeof keySelectedElementList | typeof keyActionType | typeof keyGroupQueue>;
|
|
3
|
+
export type DeepInfoSharedStorage = Pick<DeepSelectorSharedStorage, typeof keySelectedElementList | typeof keyHoverElement | typeof keyActionType | typeof keyGroupQueue>;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
+
import type { MiddlewareLayoutSelectorStyle } from '@idraw/types';
|
|
1
2
|
export declare const key = "LAYOUT_SELECT";
|
|
2
3
|
export declare const keyLayoutActionType: unique symbol;
|
|
3
4
|
export declare const keyLayoutControlType: unique symbol;
|
|
4
5
|
export declare const keyLayoutController: unique symbol;
|
|
5
6
|
export declare const keyLayoutIsHover: unique symbol;
|
|
6
7
|
export declare const keyLayoutIsSelected: unique symbol;
|
|
7
|
-
export declare const selectColor = "#b331c9";
|
|
8
|
-
export declare const disableColor = "#5b5959b5";
|
|
9
8
|
export declare const controllerSize = 10;
|
|
9
|
+
export declare const defaultStyle: MiddlewareLayoutSelectorStyle;
|
|
@@ -4,6 +4,7 @@ export const keyLayoutControlType = Symbol(`${key}_layoutControlType`);
|
|
|
4
4
|
export const keyLayoutController = Symbol(`${key}_layoutController`);
|
|
5
5
|
export const keyLayoutIsHover = Symbol(`${key}_layoutIsHover`);
|
|
6
6
|
export const keyLayoutIsSelected = Symbol(`${key}_layoutIsSelected`);
|
|
7
|
-
export const selectColor = '#b331c9';
|
|
8
|
-
export const disableColor = '#5b5959b5';
|
|
9
7
|
export const controllerSize = 10;
|
|
8
|
+
export const defaultStyle = {
|
|
9
|
+
activeColor: '#b331c9'
|
|
10
|
+
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { BoardMiddleware } from '@idraw/types';
|
|
1
|
+
import type { BoardMiddleware, MiddlewareLayoutSelectorConfig } from '@idraw/types';
|
|
2
2
|
import type { LayoutSelectorSharedStorage } from './types';
|
|
3
3
|
import { keyLayoutIsSelected } from './config';
|
|
4
4
|
export { keyLayoutIsSelected };
|
|
5
|
-
export declare const MiddlewareLayoutSelector: BoardMiddleware<LayoutSelectorSharedStorage>;
|
|
5
|
+
export declare const MiddlewareLayoutSelector: BoardMiddleware<LayoutSelectorSharedStorage, any, MiddlewareLayoutSelectorConfig>;
|
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import { calcLayoutSizeController, isViewPointInVertexes, getViewScaleInfoFromSnapshot, isViewPointInElementSize, calcViewElementSize } from '@idraw/util';
|
|
2
|
-
import { keyLayoutActionType, keyLayoutController, keyLayoutControlType, keyLayoutIsHover, keyLayoutIsSelected, controllerSize } from './config';
|
|
2
|
+
import { keyLayoutActionType, keyLayoutController, keyLayoutControlType, keyLayoutIsHover, keyLayoutIsSelected, controllerSize, defaultStyle } from './config';
|
|
3
3
|
import { keyActionType as keyElementActionType, keyHoverElement, middlewareEventSelectClear } from '../selector';
|
|
4
4
|
import { drawLayoutController, drawLayoutHover } from './util';
|
|
5
5
|
import { eventChange } from '../../config';
|
|
6
6
|
export { keyLayoutIsSelected };
|
|
7
|
-
export const MiddlewareLayoutSelector = (opts) => {
|
|
7
|
+
export const MiddlewareLayoutSelector = (opts, config) => {
|
|
8
8
|
const { sharer, boardContent, calculator, viewer, eventHub } = opts;
|
|
9
9
|
const { overlayContext } = boardContent;
|
|
10
|
+
const innerConfig = Object.assign(Object.assign({}, defaultStyle), config);
|
|
11
|
+
const { activeColor } = innerConfig;
|
|
12
|
+
const style = { activeColor };
|
|
10
13
|
let prevPoint = null;
|
|
11
14
|
let prevIsHover = null;
|
|
12
15
|
let prevIsSelected = null;
|
|
@@ -312,10 +315,10 @@ export const MiddlewareLayoutSelector = (opts) => {
|
|
|
312
315
|
const controller = calcLayoutSizeController(size, { viewScaleInfo, controllerSize });
|
|
313
316
|
if (layoutIsHover === true) {
|
|
314
317
|
const viewSize = calcViewElementSize(size, { viewScaleInfo });
|
|
315
|
-
drawLayoutHover(overlayContext, { layoutSize: viewSize });
|
|
318
|
+
drawLayoutHover(overlayContext, { layoutSize: viewSize, style });
|
|
316
319
|
}
|
|
317
320
|
if ((layoutActionType && ['resize'].includes(layoutActionType)) || layoutIsSelected === true) {
|
|
318
|
-
drawLayoutController(overlayContext, { controller,
|
|
321
|
+
drawLayoutController(overlayContext, { controller, style });
|
|
319
322
|
}
|
|
320
323
|
}
|
|
321
324
|
},
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import type { ViewContext2D, LayoutSizeController,
|
|
1
|
+
import type { ViewContext2D, LayoutSizeController, ElementSize, MiddlewareLayoutSelectorStyle } from '@idraw/types';
|
|
2
2
|
export declare function drawLayoutController(ctx: ViewContext2D, opts: {
|
|
3
3
|
controller: LayoutSizeController;
|
|
4
|
-
|
|
4
|
+
style: MiddlewareLayoutSelectorStyle;
|
|
5
5
|
}): void;
|
|
6
6
|
export declare function drawLayoutHover(ctx: ViewContext2D, opts: {
|
|
7
7
|
layoutSize: ElementSize;
|
|
8
|
+
style: MiddlewareLayoutSelectorStyle;
|
|
8
9
|
}): void;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
function drawControllerBox(ctx, boxVertexes, style) {
|
|
2
|
+
const { activeColor } = style;
|
|
3
3
|
ctx.setLineDash([]);
|
|
4
4
|
ctx.fillStyle = '#FFFFFF';
|
|
5
5
|
ctx.beginPath();
|
|
@@ -9,7 +9,7 @@ function drawControllerBox(ctx, boxVertexes) {
|
|
|
9
9
|
ctx.lineTo(boxVertexes[3].x, boxVertexes[3].y);
|
|
10
10
|
ctx.closePath();
|
|
11
11
|
ctx.fill();
|
|
12
|
-
ctx.strokeStyle =
|
|
12
|
+
ctx.strokeStyle = activeColor;
|
|
13
13
|
ctx.lineWidth = 2;
|
|
14
14
|
ctx.beginPath();
|
|
15
15
|
ctx.moveTo(boxVertexes[0].x, boxVertexes[0].y);
|
|
@@ -19,26 +19,11 @@ function drawControllerBox(ctx, boxVertexes) {
|
|
|
19
19
|
ctx.closePath();
|
|
20
20
|
ctx.stroke();
|
|
21
21
|
}
|
|
22
|
-
function drawControllerCross(ctx, opts) {
|
|
23
|
-
const { vertexes, strokeStyle, lineWidth } = opts;
|
|
24
|
-
ctx.setLineDash([]);
|
|
25
|
-
ctx.strokeStyle = strokeStyle;
|
|
26
|
-
ctx.lineWidth = lineWidth;
|
|
27
|
-
ctx.beginPath();
|
|
28
|
-
ctx.moveTo(vertexes[0].x, vertexes[0].y);
|
|
29
|
-
ctx.lineTo(vertexes[2].x, vertexes[2].y);
|
|
30
|
-
ctx.closePath();
|
|
31
|
-
ctx.stroke();
|
|
32
|
-
ctx.beginPath();
|
|
33
|
-
ctx.moveTo(vertexes[1].x, vertexes[1].y);
|
|
34
|
-
ctx.lineTo(vertexes[3].x, vertexes[3].y);
|
|
35
|
-
ctx.closePath();
|
|
36
|
-
ctx.stroke();
|
|
37
|
-
}
|
|
38
22
|
function drawControllerLine(ctx, opts) {
|
|
39
|
-
const { start, end,
|
|
40
|
-
const
|
|
41
|
-
const
|
|
23
|
+
const { start, end, style } = opts;
|
|
24
|
+
const { activeColor } = style;
|
|
25
|
+
const lineWidth = 2;
|
|
26
|
+
const strokeStyle = activeColor;
|
|
42
27
|
ctx.setLineDash([]);
|
|
43
28
|
ctx.strokeStyle = strokeStyle;
|
|
44
29
|
ctx.lineWidth = lineWidth;
|
|
@@ -47,55 +32,25 @@ function drawControllerLine(ctx, opts) {
|
|
|
47
32
|
ctx.lineTo(end.x, end.y);
|
|
48
33
|
ctx.closePath();
|
|
49
34
|
ctx.stroke();
|
|
50
|
-
if (disabled === true) {
|
|
51
|
-
drawControllerCross(ctx, {
|
|
52
|
-
vertexes: centerVertexes,
|
|
53
|
-
lineWidth,
|
|
54
|
-
strokeStyle
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
35
|
}
|
|
58
36
|
export function drawLayoutController(ctx, opts) {
|
|
59
|
-
const { controller,
|
|
37
|
+
const { controller, style } = opts;
|
|
60
38
|
const { topLeft, topRight, bottomLeft, bottomRight, topMiddle, rightMiddle, bottomMiddle, leftMiddle } = controller;
|
|
61
|
-
drawControllerLine(ctx, { start: topLeft.center, end: topRight.center, centerVertexes: topMiddle.vertexes,
|
|
62
|
-
drawControllerLine(ctx, { start: topRight.center, end: bottomRight.center, centerVertexes: rightMiddle.vertexes,
|
|
63
|
-
drawControllerLine(ctx, { start: bottomRight.center, end: bottomLeft.center, centerVertexes: bottomMiddle.vertexes,
|
|
64
|
-
drawControllerLine(ctx, { start: bottomLeft.center, end: topLeft.center, centerVertexes: leftMiddle.vertexes,
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
if ((operations === null || operations === void 0 ? void 0 : operations.disabledTopLeft) === true) {
|
|
70
|
-
drawControllerCross(ctx, Object.assign({ vertexes: topLeft.vertexes }, disabledOpts));
|
|
71
|
-
}
|
|
72
|
-
else {
|
|
73
|
-
drawControllerBox(ctx, topLeft.vertexes);
|
|
74
|
-
}
|
|
75
|
-
if ((operations === null || operations === void 0 ? void 0 : operations.disabledTopRight) === true) {
|
|
76
|
-
drawControllerCross(ctx, Object.assign({ vertexes: topRight.vertexes }, disabledOpts));
|
|
77
|
-
}
|
|
78
|
-
else {
|
|
79
|
-
drawControllerBox(ctx, topRight.vertexes);
|
|
80
|
-
}
|
|
81
|
-
if ((operations === null || operations === void 0 ? void 0 : operations.disabledBottomRight) === true) {
|
|
82
|
-
drawControllerCross(ctx, Object.assign({ vertexes: bottomRight.vertexes }, disabledOpts));
|
|
83
|
-
}
|
|
84
|
-
else {
|
|
85
|
-
drawControllerBox(ctx, bottomRight.vertexes);
|
|
86
|
-
}
|
|
87
|
-
if ((operations === null || operations === void 0 ? void 0 : operations.disabledBottomLeft) === true) {
|
|
88
|
-
drawControllerCross(ctx, Object.assign({ vertexes: bottomLeft.vertexes }, disabledOpts));
|
|
89
|
-
}
|
|
90
|
-
else {
|
|
91
|
-
drawControllerBox(ctx, bottomLeft.vertexes);
|
|
92
|
-
}
|
|
39
|
+
drawControllerLine(ctx, { start: topLeft.center, end: topRight.center, centerVertexes: topMiddle.vertexes, style });
|
|
40
|
+
drawControllerLine(ctx, { start: topRight.center, end: bottomRight.center, centerVertexes: rightMiddle.vertexes, style });
|
|
41
|
+
drawControllerLine(ctx, { start: bottomRight.center, end: bottomLeft.center, centerVertexes: bottomMiddle.vertexes, style });
|
|
42
|
+
drawControllerLine(ctx, { start: bottomLeft.center, end: topLeft.center, centerVertexes: leftMiddle.vertexes, style });
|
|
43
|
+
drawControllerBox(ctx, topLeft.vertexes, style);
|
|
44
|
+
drawControllerBox(ctx, topRight.vertexes, style);
|
|
45
|
+
drawControllerBox(ctx, bottomRight.vertexes, style);
|
|
46
|
+
drawControllerBox(ctx, bottomLeft.vertexes, style);
|
|
93
47
|
}
|
|
94
48
|
export function drawLayoutHover(ctx, opts) {
|
|
95
|
-
const { layoutSize } = opts;
|
|
49
|
+
const { layoutSize, style } = opts;
|
|
50
|
+
const { activeColor } = style;
|
|
96
51
|
const { x, y, w, h } = layoutSize;
|
|
97
52
|
ctx.setLineDash([]);
|
|
98
|
-
ctx.strokeStyle =
|
|
53
|
+
ctx.strokeStyle = activeColor;
|
|
99
54
|
ctx.lineWidth = 1;
|
|
100
55
|
ctx.beginPath();
|
|
101
56
|
ctx.moveTo(x, y);
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import type { Element, ElementType, PointSize, RendererDrawElementOptions, ViewContext2D, ViewRectVertexes, ViewScaleInfo, ViewSizeInfo, ElementSizeController, ViewCalculator } from '@idraw/types';
|
|
2
|
-
import type { AreaSize
|
|
1
|
+
import type { Element, ElementType, PointSize, RendererDrawElementOptions, ViewContext2D, ViewRectVertexes, ViewScaleInfo, ViewSizeInfo, ElementSizeController, ViewCalculator, MiddlewareSelectorStyle } from '@idraw/types';
|
|
2
|
+
import type { AreaSize } from './types';
|
|
3
3
|
export declare function drawHoverVertexesWrapper(ctx: ViewContext2D, vertexes: ViewRectVertexes | null, opts: {
|
|
4
4
|
viewScaleInfo: ViewScaleInfo;
|
|
5
5
|
viewSizeInfo: ViewSizeInfo;
|
|
6
6
|
style: MiddlewareSelectorStyle;
|
|
7
7
|
}): void;
|
|
8
|
-
export declare function
|
|
8
|
+
export declare function drawLockedVertexesWrapper(ctx: ViewContext2D, vertexes: ViewRectVertexes | null, opts: {
|
|
9
9
|
viewScaleInfo: ViewScaleInfo;
|
|
10
10
|
viewSizeInfo: ViewSizeInfo;
|
|
11
11
|
controller?: ElementSizeController | null;
|
|
@@ -10,7 +10,7 @@ export function drawHoverVertexesWrapper(ctx, vertexes, opts) {
|
|
|
10
10
|
const wrapperOpts = { borderColor: activeColor, borderWidth: 1, background: 'transparent', lineDash: [] };
|
|
11
11
|
drawVertexes(ctx, calcViewVertexes(vertexes, opts), wrapperOpts);
|
|
12
12
|
}
|
|
13
|
-
export function
|
|
13
|
+
export function drawLockedVertexesWrapper(ctx, vertexes, opts) {
|
|
14
14
|
if (!vertexes) {
|
|
15
15
|
return;
|
|
16
16
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { is, calcElementsViewInfo, calcElementVertexesInGroup, calcElementQueueVertexesQueueInGroup, calcElementSizeController, calcElementCenterFromVertexes, rotatePointInGroup, getGroupQueueFromList, findElementsFromList, findElementsFromListByPositions, getElementPositionFromList, deepResizeGroupElement } from '@idraw/util';
|
|
2
|
-
import { drawHoverVertexesWrapper,
|
|
1
|
+
import { is, calcElementsViewInfo, calcElementVertexesInGroup, calcElementQueueVertexesQueueInGroup, calcElementSizeController, calcElementCenterFromVertexes, rotatePointInGroup, getGroupQueueFromList, findElementsFromList, findElementsFromListByPositions, getElementPositionFromList, deepResizeGroupElement, getElementSize } from '@idraw/util';
|
|
2
|
+
import { drawHoverVertexesWrapper, drawLockedVertexesWrapper, drawArea, drawListArea, drawGroupQueueVertexesWrappers, drawSelectedElementControllersVertexes } from './draw-wrapper';
|
|
3
3
|
import { drawReferenceLines } from './draw-reference';
|
|
4
4
|
import { getPointTarget, resizeElement, rotateElement, getSelectedListArea, calcSelectedElementsArea, isElementInGroup, isPointInViewActiveGroup, calcMoveInGroup } from './util';
|
|
5
5
|
import { middlewareEventSelect, middlewareEventSelectClear, middlewareEventSelectInGroup, middlewareEventSnapToGrid, keyActionType, keyResizeType, keyAreaStart, keyAreaEnd, keyGroupQueue, keyGroupQueueVertexesList, keyHoverElement, keyHoverElementVertexes, keySelectedElementList, keySelectedElementListVertexes, keySelectedElementController, keySelectedElementPosition, keyIsMoving, keyEnableSelectInGroup, keyEnableSnapToGrid, controllerSize, defaultStyle } from './config';
|
|
@@ -16,6 +16,8 @@ export const MiddlewareSelector = (opts, config) => {
|
|
|
16
16
|
const { viewer, sharer, boardContent, calculator, eventHub } = opts;
|
|
17
17
|
const { overlayContext } = boardContent;
|
|
18
18
|
let prevPoint = null;
|
|
19
|
+
let moveOriginalStartPoint = null;
|
|
20
|
+
let moveOriginalStartElementSize = null;
|
|
19
21
|
let inBusyMode = null;
|
|
20
22
|
sharer.setSharedStorage(keyActionType, null);
|
|
21
23
|
sharer.setSharedStorage(keyEnableSnapToGrid, true);
|
|
@@ -101,7 +103,6 @@ export const MiddlewareSelector = (opts, config) => {
|
|
|
101
103
|
sharer.setSharedStorage(keySelectedElementController, null);
|
|
102
104
|
sharer.setSharedStorage(keySelectedElementPosition, []);
|
|
103
105
|
sharer.setSharedStorage(keyIsMoving, null);
|
|
104
|
-
sharer.setSharedStorage(keyEnableSelectInGroup, null);
|
|
105
106
|
};
|
|
106
107
|
clear();
|
|
107
108
|
const selectCallback = ({ uuids, positions }) => {
|
|
@@ -250,8 +251,9 @@ export const MiddlewareSelector = (opts, config) => {
|
|
|
250
251
|
}
|
|
251
252
|
},
|
|
252
253
|
pointStart: (e) => {
|
|
253
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
254
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
|
|
254
255
|
prevPoint = e.point;
|
|
256
|
+
moveOriginalStartPoint = e.point;
|
|
255
257
|
const groupQueue = sharer.getSharedStorage(keyGroupQueue);
|
|
256
258
|
if ((groupQueue === null || groupQueue === void 0 ? void 0 : groupQueue.length) > 0) {
|
|
257
259
|
if (isPointInViewActiveGroup(e.point, {
|
|
@@ -261,17 +263,20 @@ export const MiddlewareSelector = (opts, config) => {
|
|
|
261
263
|
groupQueue
|
|
262
264
|
})) {
|
|
263
265
|
const target = getPointTarget(e.point, pointTargetBaseOptions());
|
|
264
|
-
if (((_a = target === null || target === void 0 ? void 0 : target.elements) === null || _a === void 0 ? void 0 : _a.length) === 1 && ((_c = (_b = target.elements[0]) === null || _b === void 0 ? void 0 : _b.operations) === null || _c === void 0 ? void 0 : _c.
|
|
266
|
+
if (((_a = target === null || target === void 0 ? void 0 : target.elements) === null || _a === void 0 ? void 0 : _a.length) === 1 && ((_c = (_b = target.elements[0]) === null || _b === void 0 ? void 0 : _b.operations) === null || _c === void 0 ? void 0 : _c.locked) === true) {
|
|
265
267
|
return;
|
|
266
268
|
}
|
|
267
269
|
else {
|
|
268
270
|
updateHoverElement(null);
|
|
269
271
|
}
|
|
270
|
-
if (
|
|
272
|
+
if (((_d = target === null || target === void 0 ? void 0 : target.elements) === null || _d === void 0 ? void 0 : _d.length) === 1) {
|
|
273
|
+
moveOriginalStartElementSize = getElementSize(target === null || target === void 0 ? void 0 : target.elements[0]);
|
|
274
|
+
}
|
|
275
|
+
if (target.type === 'over-element' && ((_e = target === null || target === void 0 ? void 0 : target.elements) === null || _e === void 0 ? void 0 : _e.length) === 1) {
|
|
271
276
|
updateSelectedElementList([target.elements[0]], { triggerEvent: true });
|
|
272
277
|
sharer.setSharedStorage(keyActionType, 'drag');
|
|
273
278
|
}
|
|
274
|
-
else if ((
|
|
279
|
+
else if ((_f = target.type) === null || _f === void 0 ? void 0 : _f.startsWith('resize-')) {
|
|
275
280
|
sharer.setSharedStorage(keyResizeType, target.type);
|
|
276
281
|
sharer.setSharedStorage(keyActionType, 'resize');
|
|
277
282
|
}
|
|
@@ -291,22 +296,31 @@ export const MiddlewareSelector = (opts, config) => {
|
|
|
291
296
|
calculator
|
|
292
297
|
});
|
|
293
298
|
const target = getPointTarget(e.point, Object.assign(Object.assign({}, pointTargetBaseOptions()), { areaSize: listAreaSize, groupQueue: [] }));
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
}
|
|
297
|
-
else {
|
|
299
|
+
const isLockedElement = ((_g = target === null || target === void 0 ? void 0 : target.elements) === null || _g === void 0 ? void 0 : _g.length) === 1 && ((_j = (_h = target.elements[0]) === null || _h === void 0 ? void 0 : _h.operations) === null || _j === void 0 ? void 0 : _j.locked) === true;
|
|
300
|
+
if (!isLockedElement) {
|
|
298
301
|
updateHoverElement(null);
|
|
299
302
|
}
|
|
300
|
-
if (target.
|
|
301
|
-
|
|
302
|
-
}
|
|
303
|
-
else if (target.type === 'over-element' && ((_j = target === null || target === void 0 ? void 0 : target.elements) === null || _j === void 0 ? void 0 : _j.length) === 1) {
|
|
304
|
-
updateSelectedElementList([target.elements[0]], { triggerEvent: true });
|
|
305
|
-
sharer.setSharedStorage(keyActionType, 'drag');
|
|
303
|
+
if (((_k = target === null || target === void 0 ? void 0 : target.elements) === null || _k === void 0 ? void 0 : _k.length) === 1) {
|
|
304
|
+
moveOriginalStartElementSize = getElementSize(target === null || target === void 0 ? void 0 : target.elements[0]);
|
|
306
305
|
}
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
306
|
+
if (!isLockedElement) {
|
|
307
|
+
if (target.type === 'list-area') {
|
|
308
|
+
sharer.setSharedStorage(keyActionType, 'drag-list');
|
|
309
|
+
}
|
|
310
|
+
else if (target.type === 'over-element' && ((_l = target === null || target === void 0 ? void 0 : target.elements) === null || _l === void 0 ? void 0 : _l.length) === 1) {
|
|
311
|
+
updateSelectedElementList([target.elements[0]], { triggerEvent: true });
|
|
312
|
+
sharer.setSharedStorage(keyActionType, 'drag');
|
|
313
|
+
}
|
|
314
|
+
else if ((_m = target.type) === null || _m === void 0 ? void 0 : _m.startsWith('resize-')) {
|
|
315
|
+
sharer.setSharedStorage(keyResizeType, target.type);
|
|
316
|
+
sharer.setSharedStorage(keyActionType, 'resize');
|
|
317
|
+
}
|
|
318
|
+
else {
|
|
319
|
+
clear();
|
|
320
|
+
sharer.setSharedStorage(keyActionType, 'area');
|
|
321
|
+
sharer.setSharedStorage(keyAreaStart, e.point);
|
|
322
|
+
updateSelectedElementList([], { triggerEvent: true });
|
|
323
|
+
}
|
|
310
324
|
}
|
|
311
325
|
else {
|
|
312
326
|
clear();
|
|
@@ -325,6 +339,7 @@ export const MiddlewareSelector = (opts, config) => {
|
|
|
325
339
|
const viewScaleInfo = sharer.getActiveViewScaleInfo();
|
|
326
340
|
const viewSizeInfo = sharer.getActiveViewSizeInfo();
|
|
327
341
|
const start = prevPoint;
|
|
342
|
+
const originalStart = moveOriginalStartPoint;
|
|
328
343
|
const end = e.point;
|
|
329
344
|
const resizeType = sharer.getSharedStorage(keyResizeType);
|
|
330
345
|
const actionType = sharer.getSharedStorage(keyActionType);
|
|
@@ -332,8 +347,8 @@ export const MiddlewareSelector = (opts, config) => {
|
|
|
332
347
|
const enableSnapToGrid = sharer.getSharedStorage(keyEnableSnapToGrid);
|
|
333
348
|
if (actionType === 'drag') {
|
|
334
349
|
inBusyMode = 'drag';
|
|
335
|
-
if (data && (elems === null || elems === void 0 ? void 0 : elems.length) === 1 &&
|
|
336
|
-
const { moveX, moveY } = calcMoveInGroup(
|
|
350
|
+
if (data && (elems === null || elems === void 0 ? void 0 : elems.length) === 1 && moveOriginalStartElementSize && originalStart && end && ((_b = (_a = elems[0]) === null || _a === void 0 ? void 0 : _a.operations) === null || _b === void 0 ? void 0 : _b.locked) !== true) {
|
|
351
|
+
const { moveX, moveY } = calcMoveInGroup(originalStart, end, groupQueue);
|
|
337
352
|
let totalMoveX = calculator.toGridNum(moveX / scale);
|
|
338
353
|
let totalMoveY = calculator.toGridNum(moveY / scale);
|
|
339
354
|
if (enableSnapToGrid === true) {
|
|
@@ -358,8 +373,8 @@ export const MiddlewareSelector = (opts, config) => {
|
|
|
358
373
|
console.error(err);
|
|
359
374
|
}
|
|
360
375
|
}
|
|
361
|
-
elems[0].x = calculator.toGridNum(
|
|
362
|
-
elems[0].y = calculator.toGridNum(
|
|
376
|
+
elems[0].x = calculator.toGridNum(moveOriginalStartElementSize.x + totalMoveX);
|
|
377
|
+
elems[0].y = calculator.toGridNum(moveOriginalStartElementSize.y + totalMoveY);
|
|
363
378
|
updateSelectedElementList([elems[0]]);
|
|
364
379
|
calculator.modifyViewVisibleInfoMap(data, {
|
|
365
380
|
modifyOptions: {
|
|
@@ -377,12 +392,12 @@ export const MiddlewareSelector = (opts, config) => {
|
|
|
377
392
|
}
|
|
378
393
|
else if (actionType === 'drag-list') {
|
|
379
394
|
inBusyMode = 'drag-list';
|
|
380
|
-
if (data && start && end && (elems === null || elems === void 0 ? void 0 : elems.length) > 1) {
|
|
395
|
+
if (data && originalStart && start && end && (elems === null || elems === void 0 ? void 0 : elems.length) > 1) {
|
|
381
396
|
const moveX = (end.x - start.x) / scale;
|
|
382
397
|
const moveY = (end.y - start.y) / scale;
|
|
383
398
|
elems.forEach((elem) => {
|
|
384
399
|
var _a;
|
|
385
|
-
if (elem && ((_a = elem === null || elem === void 0 ? void 0 : elem.operations) === null || _a === void 0 ? void 0 : _a.
|
|
400
|
+
if (elem && ((_a = elem === null || elem === void 0 ? void 0 : elem.operations) === null || _a === void 0 ? void 0 : _a.locked) !== true) {
|
|
386
401
|
elem.x = calculator.toGridNum(elem.x + moveX);
|
|
387
402
|
elem.y = calculator.toGridNum(elem.y + moveY);
|
|
388
403
|
calculator.modifyViewVisibleInfoMap(data, {
|
|
@@ -403,7 +418,7 @@ export const MiddlewareSelector = (opts, config) => {
|
|
|
403
418
|
viewer.drawFrame();
|
|
404
419
|
}
|
|
405
420
|
else if (actionType === 'resize') {
|
|
406
|
-
if (data && (elems === null || elems === void 0 ? void 0 : elems.length) === 1 &&
|
|
421
|
+
if (data && (elems === null || elems === void 0 ? void 0 : elems.length) === 1 && originalStart && moveOriginalStartElementSize && (resizeType === null || resizeType === void 0 ? void 0 : resizeType.startsWith('resize-'))) {
|
|
407
422
|
inBusyMode = 'resize';
|
|
408
423
|
const pointGroupQueue = [];
|
|
409
424
|
groupQueue.forEach((group) => {
|
|
@@ -416,10 +431,10 @@ export const MiddlewareSelector = (opts, config) => {
|
|
|
416
431
|
angle: 0 - angle
|
|
417
432
|
});
|
|
418
433
|
});
|
|
419
|
-
let resizeStart =
|
|
434
|
+
let resizeStart = originalStart;
|
|
420
435
|
let resizeEnd = end;
|
|
421
436
|
if (groupQueue.length > 0) {
|
|
422
|
-
resizeStart = rotatePointInGroup(
|
|
437
|
+
resizeStart = rotatePointInGroup(originalStart, pointGroupQueue);
|
|
423
438
|
resizeEnd = rotatePointInGroup(end, pointGroupQueue);
|
|
424
439
|
}
|
|
425
440
|
if (resizeType === 'resize-rotate') {
|
|
@@ -431,11 +446,11 @@ export const MiddlewareSelector = (opts, config) => {
|
|
|
431
446
|
controller.bottomRight.center
|
|
432
447
|
];
|
|
433
448
|
const viewCenter = calcElementCenterFromVertexes(viewVertexes);
|
|
434
|
-
const resizedElemSize = rotateElement(
|
|
449
|
+
const resizedElemSize = rotateElement(moveOriginalStartElementSize, {
|
|
435
450
|
center: viewCenter,
|
|
436
451
|
viewScaleInfo,
|
|
437
452
|
viewSizeInfo,
|
|
438
|
-
start,
|
|
453
|
+
start: originalStart,
|
|
439
454
|
end,
|
|
440
455
|
resizeType,
|
|
441
456
|
sharer
|
|
@@ -443,8 +458,8 @@ export const MiddlewareSelector = (opts, config) => {
|
|
|
443
458
|
elems[0].angle = calculator.toGridNum(resizedElemSize.angle || 0);
|
|
444
459
|
}
|
|
445
460
|
else {
|
|
446
|
-
const resizedElemSize = resizeElement(
|
|
447
|
-
const calcOpts = { ignore: !!
|
|
461
|
+
const resizedElemSize = resizeElement(moveOriginalStartElementSize, { scale, start: resizeStart, end: resizeEnd, resizeType, sharer });
|
|
462
|
+
const calcOpts = { ignore: !!moveOriginalStartElementSize.angle };
|
|
448
463
|
elems[0].x = calculator.toGridNum(resizedElemSize.x, calcOpts);
|
|
449
464
|
elems[0].y = calculator.toGridNum(resizedElemSize.y, calcOpts);
|
|
450
465
|
if (elems[0].type === 'group' && ((_c = elems[0].operations) === null || _c === void 0 ? void 0 : _c.deepResize) === true) {
|
|
@@ -491,6 +506,8 @@ export const MiddlewareSelector = (opts, config) => {
|
|
|
491
506
|
const viewSizeInfo = sharer.getActiveViewSizeInfo();
|
|
492
507
|
let needDrawFrame = false;
|
|
493
508
|
prevPoint = null;
|
|
509
|
+
moveOriginalStartPoint = null;
|
|
510
|
+
moveOriginalStartElementSize = null;
|
|
494
511
|
if (actionType === 'resize' && resizeType) {
|
|
495
512
|
sharer.setSharedStorage(keyResizeType, null);
|
|
496
513
|
needDrawFrame = true;
|
|
@@ -560,6 +577,8 @@ export const MiddlewareSelector = (opts, config) => {
|
|
|
560
577
|
},
|
|
561
578
|
pointLeave() {
|
|
562
579
|
prevPoint = null;
|
|
580
|
+
moveOriginalStartPoint = null;
|
|
581
|
+
moveOriginalStartElementSize = null;
|
|
563
582
|
clear();
|
|
564
583
|
viewer.drawFrame();
|
|
565
584
|
},
|
|
@@ -571,7 +590,7 @@ export const MiddlewareSelector = (opts, config) => {
|
|
|
571
590
|
const target = getPointTarget(e.point, pointTargetBaseOptions());
|
|
572
591
|
sharer.setSharedStorage(keySelectedElementController, null);
|
|
573
592
|
sharer.setSharedStorage(keySelectedElementList, []);
|
|
574
|
-
if (target.elements.length === 1 && ((_b = (_a = target.elements[0]) === null || _a === void 0 ? void 0 : _a.operations) === null || _b === void 0 ? void 0 : _b.
|
|
593
|
+
if (target.elements.length === 1 && ((_b = (_a = target.elements[0]) === null || _a === void 0 ? void 0 : _a.operations) === null || _b === void 0 ? void 0 : _b.locked) === true) {
|
|
575
594
|
return;
|
|
576
595
|
}
|
|
577
596
|
if (target.elements.length === 1 && ((_c = target.elements[0]) === null || _c === void 0 ? void 0 : _c.type) === 'group') {
|
|
@@ -618,12 +637,12 @@ export const MiddlewareSelector = (opts, config) => {
|
|
|
618
637
|
viewScaleInfo
|
|
619
638
|
})
|
|
620
639
|
: null;
|
|
621
|
-
const
|
|
640
|
+
const isLocked = !!((_a = hoverElement === null || hoverElement === void 0 ? void 0 : hoverElement.operations) === null || _a === void 0 ? void 0 : _a.locked);
|
|
622
641
|
if ((groupQueue === null || groupQueue === void 0 ? void 0 : groupQueue.length) > 0) {
|
|
623
642
|
drawGroupQueueVertexesWrappers(overlayContext, groupQueueVertexesList, drawBaseOpts);
|
|
624
643
|
if (hoverElement && actionType !== 'drag') {
|
|
625
|
-
if (
|
|
626
|
-
|
|
644
|
+
if (isLocked) {
|
|
645
|
+
drawLockedVertexesWrapper(overlayContext, hoverElementVertexes, Object.assign(Object.assign({}, drawBaseOpts), { controller: calcElementSizeController(hoverElement, {
|
|
627
646
|
groupQueue,
|
|
628
647
|
controllerSize: 10,
|
|
629
648
|
viewScaleInfo
|
|
@@ -633,7 +652,7 @@ export const MiddlewareSelector = (opts, config) => {
|
|
|
633
652
|
drawHoverVertexesWrapper(overlayContext, hoverElementVertexes, drawBaseOpts);
|
|
634
653
|
}
|
|
635
654
|
}
|
|
636
|
-
if (!
|
|
655
|
+
if (!isLocked && elem && ['select', 'drag', 'resize'].includes(actionType)) {
|
|
637
656
|
drawSelectedElementControllersVertexes(overlayContext, selectedElementController, Object.assign(Object.assign({}, drawBaseOpts), { element: elem, calculator, hideControllers: !!isMoving && actionType === 'drag', style }));
|
|
638
657
|
if (actionType === 'drag') {
|
|
639
658
|
if (enableSnapToGrid === true) {
|
|
@@ -660,8 +679,8 @@ export const MiddlewareSelector = (opts, config) => {
|
|
|
660
679
|
}
|
|
661
680
|
else {
|
|
662
681
|
if (hoverElement && actionType !== 'drag') {
|
|
663
|
-
if (
|
|
664
|
-
|
|
682
|
+
if (isLocked) {
|
|
683
|
+
drawLockedVertexesWrapper(overlayContext, hoverElementVertexes, Object.assign(Object.assign({}, drawBaseOpts), { controller: calcElementSizeController(hoverElement, {
|
|
665
684
|
groupQueue,
|
|
666
685
|
controllerSize: 10,
|
|
667
686
|
viewScaleInfo
|
|
@@ -671,7 +690,7 @@ export const MiddlewareSelector = (opts, config) => {
|
|
|
671
690
|
drawHoverVertexesWrapper(overlayContext, hoverElementVertexes, drawBaseOpts);
|
|
672
691
|
}
|
|
673
692
|
}
|
|
674
|
-
if (!
|
|
693
|
+
if (!isLocked && elem && ['select', 'drag', 'resize'].includes(actionType)) {
|
|
675
694
|
drawSelectedElementControllersVertexes(overlayContext, selectedElementController, Object.assign(Object.assign({}, drawBaseOpts), { element: elem, calculator, hideControllers: !!isMoving && actionType === 'drag', style }));
|
|
676
695
|
if (actionType === 'drag') {
|
|
677
696
|
if (enableSnapToGrid === true) {
|
|
@@ -23,14 +23,14 @@ export declare function getPointTarget(p: PointSize, opts: {
|
|
|
23
23
|
groupQueue: Element<'group'>[] | null;
|
|
24
24
|
selectedElementController: ElementSizeController | null;
|
|
25
25
|
}): PointTarget;
|
|
26
|
-
export declare function resizeElement(elem:
|
|
26
|
+
export declare function resizeElement(elem: ElementSize, opts: {
|
|
27
27
|
start: PointSize;
|
|
28
28
|
end: PointSize;
|
|
29
29
|
resizeType: ResizeType;
|
|
30
30
|
scale: number;
|
|
31
31
|
sharer: StoreSharer;
|
|
32
32
|
}): ElementSize;
|
|
33
|
-
export declare function rotateElement(elem:
|
|
33
|
+
export declare function rotateElement(elem: ElementSize, opts: {
|
|
34
34
|
center: PointSize;
|
|
35
35
|
start: PointSize;
|
|
36
36
|
end: PointSize;
|
|
@@ -703,10 +703,10 @@ export function getSelectedListArea(data, opts) {
|
|
|
703
703
|
const endY = Math.max(start.y, end.y);
|
|
704
704
|
for (let idx = 0; idx < data.elements.length; idx++) {
|
|
705
705
|
const elem = data.elements[idx];
|
|
706
|
-
if (((_a = elem === null || elem === void 0 ? void 0 : elem.operations) === null || _a === void 0 ? void 0 : _a.
|
|
706
|
+
if (((_a = elem === null || elem === void 0 ? void 0 : elem.operations) === null || _a === void 0 ? void 0 : _a.locked) === true) {
|
|
707
707
|
continue;
|
|
708
708
|
}
|
|
709
|
-
const elemSize = calcViewElementSize(elem, { viewScaleInfo
|
|
709
|
+
const elemSize = calcViewElementSize(elem, { viewScaleInfo });
|
|
710
710
|
const center = calcElementCenter(elemSize);
|
|
711
711
|
if (center.x >= startX && center.x <= endX && center.y >= startY && center.y <= endY) {
|
|
712
712
|
indexes.push(idx);
|
|
@@ -733,14 +733,14 @@ export function calcSelectedElementsArea(elements, opts) {
|
|
|
733
733
|
return null;
|
|
734
734
|
}
|
|
735
735
|
const area = { x: 0, y: 0, w: 0, h: 0 };
|
|
736
|
-
const { viewScaleInfo
|
|
736
|
+
const { viewScaleInfo } = opts;
|
|
737
737
|
let prevElemSize = null;
|
|
738
738
|
for (let i = 0; i < elements.length; i++) {
|
|
739
739
|
const elem = elements[i];
|
|
740
740
|
if ((_a = elem === null || elem === void 0 ? void 0 : elem.operations) === null || _a === void 0 ? void 0 : _a.invisible) {
|
|
741
741
|
continue;
|
|
742
742
|
}
|
|
743
|
-
const elemSize = calcViewElementSize(elem, { viewScaleInfo
|
|
743
|
+
const elemSize = calcViewElementSize(elem, { viewScaleInfo });
|
|
744
744
|
if (elemSize.angle && (elemSize.angle > 0 || elemSize.angle < 0)) {
|
|
745
745
|
const ves = rotateElementVertexes(elemSize);
|
|
746
746
|
if (ves.length === 4) {
|