@idraw/core 0.4.0-beta.3 → 0.4.0-beta.31
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/config.d.ts +1 -0
- package/dist/esm/config.js +1 -0
- package/dist/esm/index.d.ts +17 -7
- package/dist/esm/index.js +31 -10
- package/dist/esm/lib/cursor-image.d.ts +1 -0
- package/dist/esm/lib/cursor-image.js +1 -0
- package/dist/esm/lib/cursor.d.ts +3 -12
- package/dist/esm/lib/cursor.js +136 -112
- package/dist/esm/middleware/dragger/index.d.ts +2 -2
- package/dist/esm/middleware/dragger/index.js +1 -0
- package/dist/esm/middleware/info/config.d.ts +4 -0
- package/dist/esm/middleware/info/config.js +8 -0
- package/dist/esm/middleware/info/draw-info.d.ts +29 -0
- package/dist/esm/middleware/info/draw-info.js +113 -0
- package/dist/esm/middleware/info/index.d.ts +3 -0
- package/dist/esm/middleware/info/index.js +112 -0
- package/dist/esm/middleware/info/types.d.ts +3 -0
- package/dist/esm/middleware/info/types.js +1 -0
- package/dist/esm/middleware/layout-selector/config.d.ts +9 -0
- package/dist/esm/middleware/layout-selector/config.js +9 -0
- package/dist/esm/middleware/layout-selector/index.d.ts +5 -0
- package/dist/esm/middleware/layout-selector/index.js +332 -0
- package/dist/esm/middleware/layout-selector/types.d.ts +15 -0
- package/dist/esm/middleware/layout-selector/types.js +2 -0
- package/dist/esm/middleware/layout-selector/util.d.ts +8 -0
- package/dist/esm/middleware/layout-selector/util.js +108 -0
- package/dist/esm/middleware/ruler/config.d.ts +7 -0
- package/dist/esm/middleware/ruler/config.js +21 -0
- package/dist/esm/middleware/ruler/index.d.ts +3 -2
- package/dist/esm/middleware/ruler/index.js +27 -11
- package/dist/esm/middleware/ruler/types.d.ts +3 -0
- package/dist/esm/middleware/ruler/types.js +1 -0
- package/dist/esm/middleware/ruler/util.d.ts +20 -4
- package/dist/esm/middleware/ruler/util.js +92 -21
- package/dist/esm/middleware/scaler/index.d.ts +2 -2
- package/dist/esm/middleware/scaler/index.js +1 -0
- package/dist/esm/middleware/scroller/config.d.ts +4 -0
- package/dist/esm/middleware/scroller/config.js +10 -0
- package/dist/esm/middleware/scroller/index.d.ts +3 -2
- package/dist/esm/middleware/scroller/index.js +44 -6
- package/dist/esm/middleware/scroller/types.d.ts +11 -0
- package/dist/esm/middleware/scroller/types.js +1 -0
- package/dist/esm/middleware/scroller/util.d.ts +3 -2
- package/dist/esm/middleware/scroller/util.js +32 -44
- package/dist/esm/middleware/selector/config.d.ts +11 -1
- package/dist/esm/middleware/selector/config.js +19 -1
- package/dist/esm/middleware/selector/draw-auxiliary.d.ts +1 -0
- package/dist/esm/middleware/selector/draw-auxiliary.js +12 -0
- package/dist/esm/middleware/selector/draw-base.d.ts +30 -0
- package/dist/esm/middleware/selector/draw-base.js +100 -0
- package/dist/esm/middleware/selector/draw-reference.d.ts +7 -0
- package/dist/esm/middleware/selector/draw-reference.js +31 -0
- package/dist/esm/middleware/selector/draw-wrapper.d.ts +16 -2
- package/dist/esm/middleware/selector/draw-wrapper.js +52 -35
- package/dist/esm/middleware/selector/index.d.ts +7 -4
- package/dist/esm/middleware/selector/index.js +287 -47
- package/dist/esm/middleware/selector/reference.d.ts +13 -0
- package/dist/esm/middleware/selector/reference.js +267 -0
- package/dist/esm/middleware/selector/types.d.ts +9 -4
- package/dist/esm/middleware/selector/types.js +2 -1
- package/dist/esm/middleware/selector/util.d.ts +11 -2
- package/dist/esm/middleware/selector/util.js +36 -14
- package/dist/esm/middleware/text-editor/index.d.ts +20 -2
- package/dist/esm/middleware/text-editor/index.js +92 -16
- package/dist/index.global.js +3827 -1006
- package/dist/index.global.min.js +1 -1
- package/package.json +5 -5
|
@@ -1,15 +1,24 @@
|
|
|
1
|
-
import { calcElementsViewInfo, calcElementVertexesInGroup, calcElementQueueVertexesQueueInGroup, calcElementSizeController, rotatePointInGroup, getGroupQueueFromList, findElementsFromList, findElementsFromListByPositions } from '@idraw/util';
|
|
2
|
-
import { drawHoverVertexesWrapper, drawArea, drawListArea, drawGroupQueueVertexesWrappers, drawSelectedElementControllersVertexes } from './draw-wrapper';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
1
|
+
import { is, calcElementsViewInfo, calcElementVertexesInGroup, calcElementQueueVertexesQueueInGroup, calcElementSizeController, calcElementCenterFromVertexes, rotatePointInGroup, getGroupQueueFromList, findElementsFromList, findElementsFromListByPositions, getElementPositionFromList, deepResizeGroupElement } from '@idraw/util';
|
|
2
|
+
import { drawHoverVertexesWrapper, drawLockVertexesWrapper, drawArea, drawListArea, drawGroupQueueVertexesWrappers, drawSelectedElementControllersVertexes } from './draw-wrapper';
|
|
3
|
+
import { drawReferenceLines } from './draw-reference';
|
|
4
|
+
import { getPointTarget, resizeElement, rotateElement, getSelectedListArea, calcSelectedElementsArea, isElementInGroup, isPointInViewActiveGroup, calcMoveInGroup } from './util';
|
|
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';
|
|
6
|
+
import { calcReferenceInfo } from './reference';
|
|
5
7
|
import { middlewareEventTextEdit } from '../text-editor';
|
|
6
|
-
|
|
7
|
-
|
|
8
|
+
import { eventChange } from '../../config';
|
|
9
|
+
import { keyLayoutIsSelected } from '../layout-selector';
|
|
10
|
+
export { keySelectedElementList, keyHoverElement, keyActionType, keyResizeType, keyGroupQueue };
|
|
11
|
+
export { middlewareEventSelect, middlewareEventSelectClear, middlewareEventSelectInGroup, middlewareEventSnapToGrid };
|
|
12
|
+
export const MiddlewareSelector = (opts, config) => {
|
|
13
|
+
const innerConfig = Object.assign(Object.assign({}, defaultStyle), config);
|
|
14
|
+
const { activeColor, activeAreaColor, lockedColor, referenceColor } = innerConfig;
|
|
15
|
+
const style = { activeColor, activeAreaColor, lockedColor, referenceColor };
|
|
8
16
|
const { viewer, sharer, boardContent, calculator, eventHub } = opts;
|
|
9
|
-
const {
|
|
17
|
+
const { overlayContext } = boardContent;
|
|
10
18
|
let prevPoint = null;
|
|
11
19
|
let inBusyMode = null;
|
|
12
20
|
sharer.setSharedStorage(keyActionType, null);
|
|
21
|
+
sharer.setSharedStorage(keyEnableSnapToGrid, true);
|
|
13
22
|
const getActiveElements = () => {
|
|
14
23
|
return sharer.getSharedStorage(keySelectedElementList);
|
|
15
24
|
};
|
|
@@ -45,17 +54,20 @@ export const MiddlewareSelector = (opts) => {
|
|
|
45
54
|
sharer.setSharedStorage(keyHoverElementVertexes, vertexes);
|
|
46
55
|
};
|
|
47
56
|
const updateSelectedElementList = (list, opts) => {
|
|
57
|
+
var _a;
|
|
48
58
|
sharer.setSharedStorage(keySelectedElementList, list);
|
|
49
59
|
if (list.length === 1) {
|
|
50
60
|
const controller = calcElementSizeController(list[0], {
|
|
51
61
|
groupQueue: sharer.getSharedStorage(keyGroupQueue),
|
|
52
|
-
controllerSize
|
|
62
|
+
controllerSize,
|
|
53
63
|
viewScaleInfo: sharer.getActiveViewScaleInfo()
|
|
54
64
|
});
|
|
55
65
|
sharer.setSharedStorage(keySelectedElementController, controller);
|
|
66
|
+
sharer.setSharedStorage(keySelectedElementPosition, getElementPositionFromList(list[0].uuid, ((_a = sharer.getActiveStorage('data')) === null || _a === void 0 ? void 0 : _a.elements) || []));
|
|
56
67
|
}
|
|
57
68
|
else {
|
|
58
69
|
sharer.setSharedStorage(keySelectedElementController, null);
|
|
70
|
+
sharer.setSharedStorage(keySelectedElementPosition, []);
|
|
59
71
|
}
|
|
60
72
|
if ((opts === null || opts === void 0 ? void 0 : opts.triggerEvent) === true) {
|
|
61
73
|
eventHub.trigger(middlewareEventSelect, { uuids: list.map((elem) => elem.uuid) });
|
|
@@ -63,7 +75,7 @@ export const MiddlewareSelector = (opts) => {
|
|
|
63
75
|
};
|
|
64
76
|
const pointTargetBaseOptions = () => {
|
|
65
77
|
return {
|
|
66
|
-
ctx:
|
|
78
|
+
ctx: overlayContext,
|
|
67
79
|
calculator,
|
|
68
80
|
data: sharer.getActiveStorage('data'),
|
|
69
81
|
selectedElements: getActiveElements(),
|
|
@@ -71,7 +83,8 @@ export const MiddlewareSelector = (opts) => {
|
|
|
71
83
|
viewSizeInfo: sharer.getActiveViewSizeInfo(),
|
|
72
84
|
groupQueue: sharer.getSharedStorage(keyGroupQueue),
|
|
73
85
|
areaSize: null,
|
|
74
|
-
selectedElementController: sharer.getSharedStorage(keySelectedElementController)
|
|
86
|
+
selectedElementController: sharer.getSharedStorage(keySelectedElementController),
|
|
87
|
+
selectedElementPosition: sharer.getSharedStorage(keySelectedElementPosition)
|
|
75
88
|
};
|
|
76
89
|
};
|
|
77
90
|
const clear = () => {
|
|
@@ -86,6 +99,9 @@ export const MiddlewareSelector = (opts) => {
|
|
|
86
99
|
sharer.setSharedStorage(keySelectedElementList, []);
|
|
87
100
|
sharer.setSharedStorage(keySelectedElementListVertexes, null);
|
|
88
101
|
sharer.setSharedStorage(keySelectedElementController, null);
|
|
102
|
+
sharer.setSharedStorage(keySelectedElementPosition, []);
|
|
103
|
+
sharer.setSharedStorage(keyIsMoving, null);
|
|
104
|
+
sharer.setSharedStorage(keyEnableSelectInGroup, null);
|
|
89
105
|
};
|
|
90
106
|
clear();
|
|
91
107
|
const selectCallback = ({ uuids, positions }) => {
|
|
@@ -114,19 +130,40 @@ export const MiddlewareSelector = (opts) => {
|
|
|
114
130
|
viewer.drawFrame();
|
|
115
131
|
}
|
|
116
132
|
};
|
|
133
|
+
const selectClearCallback = () => {
|
|
134
|
+
clear();
|
|
135
|
+
viewer.drawFrame();
|
|
136
|
+
};
|
|
137
|
+
const setSnapToSnapCallback = (e) => {
|
|
138
|
+
sharer.setSharedStorage(keyEnableSnapToGrid, !!e.enable);
|
|
139
|
+
};
|
|
140
|
+
const selectInGroupCallback = (e) => {
|
|
141
|
+
sharer.setSharedStorage(keyEnableSelectInGroup, !!e.enable);
|
|
142
|
+
};
|
|
117
143
|
return {
|
|
144
|
+
name: '@middleware/selector',
|
|
118
145
|
use() {
|
|
119
146
|
eventHub.on(middlewareEventSelect, selectCallback);
|
|
147
|
+
eventHub.on(middlewareEventSelectClear, selectClearCallback);
|
|
148
|
+
eventHub.on(middlewareEventSelectInGroup, selectInGroupCallback);
|
|
149
|
+
eventHub.on(middlewareEventSnapToGrid, setSnapToSnapCallback);
|
|
120
150
|
},
|
|
121
151
|
disuse() {
|
|
122
152
|
eventHub.off(middlewareEventSelect, selectCallback);
|
|
153
|
+
eventHub.off(middlewareEventSelectClear, selectClearCallback);
|
|
154
|
+
eventHub.off(middlewareEventSelectInGroup, selectInGroupCallback);
|
|
155
|
+
eventHub.off(middlewareEventSnapToGrid, setSnapToSnapCallback);
|
|
123
156
|
},
|
|
124
157
|
hover: (e) => {
|
|
125
|
-
var _a, _b;
|
|
158
|
+
var _a, _b, _c, _d, _e;
|
|
159
|
+
const layoutIsSelected = sharer.getSharedStorage(keyLayoutIsSelected);
|
|
126
160
|
const resizeType = sharer.getSharedStorage(keyResizeType);
|
|
127
161
|
const actionType = sharer.getSharedStorage(keyActionType);
|
|
128
162
|
const groupQueue = sharer.getSharedStorage(keyGroupQueue);
|
|
129
163
|
const triggerCursor = (target) => {
|
|
164
|
+
if (layoutIsSelected === true) {
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
130
167
|
const cursor = target.type;
|
|
131
168
|
if (inBusyMode === null) {
|
|
132
169
|
eventHub.trigger('cursor', {
|
|
@@ -138,7 +175,7 @@ export const MiddlewareSelector = (opts) => {
|
|
|
138
175
|
};
|
|
139
176
|
if ((groupQueue === null || groupQueue === void 0 ? void 0 : groupQueue.length) > 0) {
|
|
140
177
|
const isInActiveGroup = isPointInViewActiveGroup(e.point, {
|
|
141
|
-
ctx:
|
|
178
|
+
ctx: overlayContext,
|
|
142
179
|
viewScaleInfo: sharer.getActiveViewScaleInfo(),
|
|
143
180
|
viewSizeInfo: sharer.getActiveViewSizeInfo(),
|
|
144
181
|
groupQueue: sharer.getSharedStorage(keyGroupQueue)
|
|
@@ -181,8 +218,27 @@ export const MiddlewareSelector = (opts) => {
|
|
|
181
218
|
calculator
|
|
182
219
|
}) }));
|
|
183
220
|
triggerCursor(target);
|
|
184
|
-
if (target.type ===
|
|
185
|
-
sharer.
|
|
221
|
+
if (target.type === null) {
|
|
222
|
+
if (sharer.getSharedStorage(keyHoverElement) || sharer.getSharedStorage(keyHoverElementVertexes)) {
|
|
223
|
+
sharer.setSharedStorage(keyHoverElement, null);
|
|
224
|
+
sharer.setSharedStorage(keyHoverElementVertexes, null);
|
|
225
|
+
viewer.drawFrame();
|
|
226
|
+
}
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
229
|
+
if (target.type === 'over-element' &&
|
|
230
|
+
sharer.getSharedStorage(keyActionType) === 'select' &&
|
|
231
|
+
target.elements.length === 1 &&
|
|
232
|
+
target.elements[0].uuid === ((_c = (_b = getActiveElements()) === null || _b === void 0 ? void 0 : _b[0]) === null || _c === void 0 ? void 0 : _c.uuid)) {
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
if (target.type === 'over-element' &&
|
|
236
|
+
sharer.getSharedStorage(keyActionType) === null &&
|
|
237
|
+
target.elements.length === 1 &&
|
|
238
|
+
target.elements[0].uuid === ((_d = sharer.getSharedStorage(keyHoverElement)) === null || _d === void 0 ? void 0 : _d.uuid)) {
|
|
239
|
+
return;
|
|
240
|
+
}
|
|
241
|
+
if (target.type === 'over-element' && ((_e = target === null || target === void 0 ? void 0 : target.elements) === null || _e === void 0 ? void 0 : _e.length) === 1) {
|
|
186
242
|
updateHoverElement(target.elements[0]);
|
|
187
243
|
viewer.drawFrame();
|
|
188
244
|
return;
|
|
@@ -194,24 +250,28 @@ export const MiddlewareSelector = (opts) => {
|
|
|
194
250
|
}
|
|
195
251
|
},
|
|
196
252
|
pointStart: (e) => {
|
|
197
|
-
var _a, _b, _c, _d;
|
|
253
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
198
254
|
prevPoint = e.point;
|
|
199
|
-
updateHoverElement(null);
|
|
200
255
|
const groupQueue = sharer.getSharedStorage(keyGroupQueue);
|
|
201
256
|
if ((groupQueue === null || groupQueue === void 0 ? void 0 : groupQueue.length) > 0) {
|
|
202
257
|
if (isPointInViewActiveGroup(e.point, {
|
|
203
|
-
ctx:
|
|
258
|
+
ctx: overlayContext,
|
|
204
259
|
viewScaleInfo: sharer.getActiveViewScaleInfo(),
|
|
205
260
|
viewSizeInfo: sharer.getActiveViewSizeInfo(),
|
|
206
261
|
groupQueue
|
|
207
262
|
})) {
|
|
208
263
|
const target = getPointTarget(e.point, pointTargetBaseOptions());
|
|
209
|
-
|
|
210
|
-
|
|
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.lock) === true) {
|
|
265
|
+
return;
|
|
266
|
+
}
|
|
267
|
+
else {
|
|
268
|
+
updateHoverElement(null);
|
|
269
|
+
}
|
|
270
|
+
if (target.type === 'over-element' && ((_d = target === null || target === void 0 ? void 0 : target.elements) === null || _d === void 0 ? void 0 : _d.length) === 1) {
|
|
211
271
|
updateSelectedElementList([target.elements[0]], { triggerEvent: true });
|
|
212
272
|
sharer.setSharedStorage(keyActionType, 'drag');
|
|
213
273
|
}
|
|
214
|
-
else if ((
|
|
274
|
+
else if ((_e = target.type) === null || _e === void 0 ? void 0 : _e.startsWith('resize-')) {
|
|
215
275
|
sharer.setSharedStorage(keyResizeType, target.type);
|
|
216
276
|
sharer.setSharedStorage(keyActionType, 'resize');
|
|
217
277
|
}
|
|
@@ -231,14 +291,20 @@ export const MiddlewareSelector = (opts) => {
|
|
|
231
291
|
calculator
|
|
232
292
|
});
|
|
233
293
|
const target = getPointTarget(e.point, Object.assign(Object.assign({}, pointTargetBaseOptions()), { areaSize: listAreaSize, groupQueue: [] }));
|
|
294
|
+
if (((_f = target === null || target === void 0 ? void 0 : target.elements) === null || _f === void 0 ? void 0 : _f.length) === 1 && ((_h = (_g = target.elements[0]) === null || _g === void 0 ? void 0 : _g.operations) === null || _h === void 0 ? void 0 : _h.lock) === true) {
|
|
295
|
+
return;
|
|
296
|
+
}
|
|
297
|
+
else {
|
|
298
|
+
updateHoverElement(null);
|
|
299
|
+
}
|
|
234
300
|
if (target.type === 'list-area') {
|
|
235
301
|
sharer.setSharedStorage(keyActionType, 'drag-list');
|
|
236
302
|
}
|
|
237
|
-
else if (target.type === 'over-element' && ((
|
|
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) {
|
|
238
304
|
updateSelectedElementList([target.elements[0]], { triggerEvent: true });
|
|
239
305
|
sharer.setSharedStorage(keyActionType, 'drag');
|
|
240
306
|
}
|
|
241
|
-
else if ((
|
|
307
|
+
else if ((_k = target.type) === null || _k === void 0 ? void 0 : _k.startsWith('resize-')) {
|
|
242
308
|
sharer.setSharedStorage(keyResizeType, target.type);
|
|
243
309
|
sharer.setSharedStorage(keyActionType, 'resize');
|
|
244
310
|
}
|
|
@@ -251,21 +317,61 @@ export const MiddlewareSelector = (opts) => {
|
|
|
251
317
|
viewer.drawFrame();
|
|
252
318
|
},
|
|
253
319
|
pointMove: (e) => {
|
|
320
|
+
var _a, _b, _c;
|
|
321
|
+
sharer.setSharedStorage(keyIsMoving, true);
|
|
254
322
|
const data = sharer.getActiveStorage('data');
|
|
255
323
|
const elems = getActiveElements();
|
|
256
324
|
const scale = sharer.getActiveStorage('scale') || 1;
|
|
325
|
+
const viewScaleInfo = sharer.getActiveViewScaleInfo();
|
|
326
|
+
const viewSizeInfo = sharer.getActiveViewSizeInfo();
|
|
257
327
|
const start = prevPoint;
|
|
258
328
|
const end = e.point;
|
|
259
329
|
const resizeType = sharer.getSharedStorage(keyResizeType);
|
|
260
330
|
const actionType = sharer.getSharedStorage(keyActionType);
|
|
261
331
|
const groupQueue = sharer.getSharedStorage(keyGroupQueue);
|
|
332
|
+
const enableSnapToGrid = sharer.getSharedStorage(keyEnableSnapToGrid);
|
|
262
333
|
if (actionType === 'drag') {
|
|
263
334
|
inBusyMode = 'drag';
|
|
264
|
-
if (data && (elems === null || elems === void 0 ? void 0 : elems.length) === 1 && start && end) {
|
|
335
|
+
if (data && (elems === null || elems === void 0 ? void 0 : elems.length) === 1 && start && end && ((_b = (_a = elems[0]) === null || _a === void 0 ? void 0 : _a.operations) === null || _b === void 0 ? void 0 : _b.lock) !== true) {
|
|
265
336
|
const { moveX, moveY } = calcMoveInGroup(start, end, groupQueue);
|
|
266
|
-
|
|
267
|
-
|
|
337
|
+
let totalMoveX = calculator.toGridNum(moveX / scale);
|
|
338
|
+
let totalMoveY = calculator.toGridNum(moveY / scale);
|
|
339
|
+
if (enableSnapToGrid === true) {
|
|
340
|
+
const referenceInfo = calcReferenceInfo(elems[0].uuid, {
|
|
341
|
+
calculator,
|
|
342
|
+
data,
|
|
343
|
+
groupQueue,
|
|
344
|
+
viewScaleInfo,
|
|
345
|
+
viewSizeInfo
|
|
346
|
+
});
|
|
347
|
+
try {
|
|
348
|
+
if (referenceInfo) {
|
|
349
|
+
if (is.x(referenceInfo.offsetX) && referenceInfo.offsetX !== null) {
|
|
350
|
+
totalMoveX = calculator.toGridNum(totalMoveX + referenceInfo.offsetX);
|
|
351
|
+
}
|
|
352
|
+
if (is.y(referenceInfo.offsetY) && referenceInfo.offsetY !== null) {
|
|
353
|
+
totalMoveY = calculator.toGridNum(totalMoveY + referenceInfo.offsetY);
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
catch (err) {
|
|
358
|
+
console.error(err);
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
elems[0].x = calculator.toGridNum(elems[0].x + totalMoveX);
|
|
362
|
+
elems[0].y = calculator.toGridNum(elems[0].y + totalMoveY);
|
|
268
363
|
updateSelectedElementList([elems[0]]);
|
|
364
|
+
calculator.modifyViewVisibleInfoMap(data, {
|
|
365
|
+
modifyOptions: {
|
|
366
|
+
type: 'updateElement',
|
|
367
|
+
content: {
|
|
368
|
+
element: elems[0],
|
|
369
|
+
position: sharer.getSharedStorage(keySelectedElementPosition) || []
|
|
370
|
+
}
|
|
371
|
+
},
|
|
372
|
+
viewSizeInfo,
|
|
373
|
+
viewScaleInfo
|
|
374
|
+
});
|
|
269
375
|
}
|
|
270
376
|
viewer.drawFrame();
|
|
271
377
|
}
|
|
@@ -275,9 +381,21 @@ export const MiddlewareSelector = (opts) => {
|
|
|
275
381
|
const moveX = (end.x - start.x) / scale;
|
|
276
382
|
const moveY = (end.y - start.y) / scale;
|
|
277
383
|
elems.forEach((elem) => {
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
elem.
|
|
384
|
+
var _a;
|
|
385
|
+
if (elem && ((_a = elem === null || elem === void 0 ? void 0 : elem.operations) === null || _a === void 0 ? void 0 : _a.lock) !== true) {
|
|
386
|
+
elem.x = calculator.toGridNum(elem.x + moveX);
|
|
387
|
+
elem.y = calculator.toGridNum(elem.y + moveY);
|
|
388
|
+
calculator.modifyViewVisibleInfoMap(data, {
|
|
389
|
+
modifyOptions: {
|
|
390
|
+
type: 'updateElement',
|
|
391
|
+
content: {
|
|
392
|
+
element: elem,
|
|
393
|
+
position: getElementPositionFromList(elem.uuid, data.elements) || []
|
|
394
|
+
}
|
|
395
|
+
},
|
|
396
|
+
viewSizeInfo,
|
|
397
|
+
viewScaleInfo
|
|
398
|
+
});
|
|
281
399
|
}
|
|
282
400
|
});
|
|
283
401
|
sharer.setActiveStorage('data', data);
|
|
@@ -304,12 +422,54 @@ export const MiddlewareSelector = (opts) => {
|
|
|
304
422
|
resizeStart = rotatePointInGroup(start, pointGroupQueue);
|
|
305
423
|
resizeEnd = rotatePointInGroup(end, pointGroupQueue);
|
|
306
424
|
}
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
425
|
+
if (resizeType === 'resize-rotate') {
|
|
426
|
+
const controller = sharer.getSharedStorage(keySelectedElementController);
|
|
427
|
+
const viewVertexes = [
|
|
428
|
+
controller.topLeft.center,
|
|
429
|
+
controller.topRight.center,
|
|
430
|
+
controller.bottomLeft.center,
|
|
431
|
+
controller.bottomRight.center
|
|
432
|
+
];
|
|
433
|
+
const viewCenter = calcElementCenterFromVertexes(viewVertexes);
|
|
434
|
+
const resizedElemSize = rotateElement(elems[0], {
|
|
435
|
+
center: viewCenter,
|
|
436
|
+
viewScaleInfo,
|
|
437
|
+
viewSizeInfo,
|
|
438
|
+
start,
|
|
439
|
+
end,
|
|
440
|
+
resizeType,
|
|
441
|
+
sharer
|
|
442
|
+
});
|
|
443
|
+
elems[0].angle = calculator.toGridNum(resizedElemSize.angle || 0);
|
|
444
|
+
}
|
|
445
|
+
else {
|
|
446
|
+
const resizedElemSize = resizeElement(elems[0], { scale, start: resizeStart, end: resizeEnd, resizeType, sharer });
|
|
447
|
+
const calcOpts = { ignore: !!elems[0].angle };
|
|
448
|
+
elems[0].x = calculator.toGridNum(resizedElemSize.x, calcOpts);
|
|
449
|
+
elems[0].y = calculator.toGridNum(resizedElemSize.y, calcOpts);
|
|
450
|
+
if (elems[0].type === 'group' && ((_c = elems[0].operations) === null || _c === void 0 ? void 0 : _c.deepResize) === true) {
|
|
451
|
+
deepResizeGroupElement(elems[0], {
|
|
452
|
+
w: calculator.toGridNum(resizedElemSize.w, calcOpts),
|
|
453
|
+
h: calculator.toGridNum(resizedElemSize.h, calcOpts)
|
|
454
|
+
});
|
|
455
|
+
}
|
|
456
|
+
else {
|
|
457
|
+
elems[0].w = calculator.toGridNum(resizedElemSize.w, calcOpts);
|
|
458
|
+
elems[0].h = calculator.toGridNum(resizedElemSize.h, calcOpts);
|
|
459
|
+
}
|
|
460
|
+
}
|
|
312
461
|
updateSelectedElementList([elems[0]]);
|
|
462
|
+
calculator.modifyViewVisibleInfoMap(data, {
|
|
463
|
+
modifyOptions: {
|
|
464
|
+
type: 'updateElement',
|
|
465
|
+
content: {
|
|
466
|
+
element: elems[0],
|
|
467
|
+
position: sharer.getSharedStorage(keySelectedElementPosition) || []
|
|
468
|
+
}
|
|
469
|
+
},
|
|
470
|
+
viewSizeInfo,
|
|
471
|
+
viewScaleInfo
|
|
472
|
+
});
|
|
313
473
|
viewer.drawFrame();
|
|
314
474
|
}
|
|
315
475
|
}
|
|
@@ -322,7 +482,10 @@ export const MiddlewareSelector = (opts) => {
|
|
|
322
482
|
},
|
|
323
483
|
pointEnd(e) {
|
|
324
484
|
inBusyMode = null;
|
|
485
|
+
sharer.setSharedStorage(keyIsMoving, false);
|
|
325
486
|
const data = sharer.getActiveStorage('data');
|
|
487
|
+
const selectedElements = sharer.getSharedStorage(keySelectedElementList);
|
|
488
|
+
const hoverElement = sharer.getSharedStorage(keyHoverElement);
|
|
326
489
|
const resizeType = sharer.getSharedStorage(keyResizeType);
|
|
327
490
|
const actionType = sharer.getSharedStorage(keyActionType);
|
|
328
491
|
const viewSizeInfo = sharer.getActiveViewSizeInfo();
|
|
@@ -385,7 +548,11 @@ export const MiddlewareSelector = (opts) => {
|
|
|
385
548
|
sharer.setActiveStorage('contextWidth', viewInfo.contextSize.contextWidth);
|
|
386
549
|
}
|
|
387
550
|
if (data && ['drag', 'drag-list', 'drag-list-end', 'resize'].includes(actionType)) {
|
|
388
|
-
|
|
551
|
+
let type = 'dragElement';
|
|
552
|
+
if (type === 'resize') {
|
|
553
|
+
type = 'resizeElement';
|
|
554
|
+
}
|
|
555
|
+
eventHub.trigger(eventChange, { data, type, selectedElements, hoverElement });
|
|
389
556
|
}
|
|
390
557
|
viewer.drawFrame();
|
|
391
558
|
};
|
|
@@ -397,9 +564,17 @@ export const MiddlewareSelector = (opts) => {
|
|
|
397
564
|
viewer.drawFrame();
|
|
398
565
|
},
|
|
399
566
|
doubleClick(e) {
|
|
400
|
-
var _a, _b;
|
|
567
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
568
|
+
if (sharer.getSharedStorage(keyEnableSelectInGroup) === false) {
|
|
569
|
+
return;
|
|
570
|
+
}
|
|
401
571
|
const target = getPointTarget(e.point, pointTargetBaseOptions());
|
|
402
|
-
|
|
572
|
+
sharer.setSharedStorage(keySelectedElementController, null);
|
|
573
|
+
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.lock) === true) {
|
|
575
|
+
return;
|
|
576
|
+
}
|
|
577
|
+
if (target.elements.length === 1 && ((_c = target.elements[0]) === null || _c === void 0 ? void 0 : _c.type) === 'group') {
|
|
403
578
|
const pushResult = pushGroupQueue(target.elements[0]);
|
|
404
579
|
if (pushResult === true) {
|
|
405
580
|
sharer.setSharedStorage(keyActionType, null);
|
|
@@ -407,16 +582,18 @@ export const MiddlewareSelector = (opts) => {
|
|
|
407
582
|
return;
|
|
408
583
|
}
|
|
409
584
|
}
|
|
410
|
-
else if (target.elements.length === 1 && ((
|
|
585
|
+
else if (target.elements.length === 1 && ((_d = target.elements[0]) === null || _d === void 0 ? void 0 : _d.type) === 'text' && !((_f = (_e = target.elements[0]) === null || _e === void 0 ? void 0 : _e.operations) === null || _f === void 0 ? void 0 : _f.invisible)) {
|
|
411
586
|
eventHub.trigger(middlewareEventTextEdit, {
|
|
412
587
|
element: target.elements[0],
|
|
413
588
|
groupQueue: sharer.getSharedStorage(keyGroupQueue) || [],
|
|
589
|
+
position: getElementPositionFromList((_g = target.elements[0]) === null || _g === void 0 ? void 0 : _g.uuid, ((_h = sharer.getActiveStorage('data')) === null || _h === void 0 ? void 0 : _h.elements) || []),
|
|
414
590
|
viewScaleInfo: sharer.getActiveViewScaleInfo()
|
|
415
591
|
});
|
|
416
592
|
}
|
|
417
593
|
sharer.setSharedStorage(keyActionType, null);
|
|
418
594
|
},
|
|
419
595
|
beforeDrawFrame({ snapshot }) {
|
|
596
|
+
var _a;
|
|
420
597
|
const { activeStore, sharedStore } = snapshot;
|
|
421
598
|
const { scale, offsetLeft, offsetTop, offsetRight, offsetBottom, width, height, contextHeight, contextWidth, devicePixelRatio } = activeStore;
|
|
422
599
|
const sharer = opts.sharer;
|
|
@@ -431,7 +608,9 @@ export const MiddlewareSelector = (opts) => {
|
|
|
431
608
|
const areaEnd = sharedStore[keyAreaEnd];
|
|
432
609
|
const groupQueue = sharedStore[keyGroupQueue];
|
|
433
610
|
const groupQueueVertexesList = sharedStore[keyGroupQueueVertexesList];
|
|
434
|
-
const
|
|
611
|
+
const isMoving = sharedStore[keyIsMoving];
|
|
612
|
+
const enableSnapToGrid = sharedStore[keyEnableSnapToGrid];
|
|
613
|
+
const drawBaseOpts = { calculator, viewScaleInfo, viewSizeInfo, style };
|
|
435
614
|
const selectedElementController = elem
|
|
436
615
|
? calcElementSizeController(elem, {
|
|
437
616
|
groupQueue,
|
|
@@ -439,24 +618,85 @@ export const MiddlewareSelector = (opts) => {
|
|
|
439
618
|
viewScaleInfo
|
|
440
619
|
})
|
|
441
620
|
: null;
|
|
621
|
+
const isLock = !!((_a = hoverElement === null || hoverElement === void 0 ? void 0 : hoverElement.operations) === null || _a === void 0 ? void 0 : _a.lock);
|
|
442
622
|
if ((groupQueue === null || groupQueue === void 0 ? void 0 : groupQueue.length) > 0) {
|
|
443
|
-
drawGroupQueueVertexesWrappers(
|
|
623
|
+
drawGroupQueueVertexesWrappers(overlayContext, groupQueueVertexesList, drawBaseOpts);
|
|
444
624
|
if (hoverElement && actionType !== 'drag') {
|
|
445
|
-
|
|
625
|
+
if (isLock) {
|
|
626
|
+
drawLockVertexesWrapper(overlayContext, hoverElementVertexes, Object.assign(Object.assign({}, drawBaseOpts), { controller: calcElementSizeController(hoverElement, {
|
|
627
|
+
groupQueue,
|
|
628
|
+
controllerSize: 10,
|
|
629
|
+
viewScaleInfo
|
|
630
|
+
}), style }));
|
|
631
|
+
}
|
|
632
|
+
else {
|
|
633
|
+
drawHoverVertexesWrapper(overlayContext, hoverElementVertexes, drawBaseOpts);
|
|
634
|
+
}
|
|
446
635
|
}
|
|
447
|
-
if (elem && ['select', 'drag', 'resize'].includes(actionType)) {
|
|
448
|
-
drawSelectedElementControllersVertexes(
|
|
636
|
+
if (!isLock && elem && ['select', 'drag', 'resize'].includes(actionType)) {
|
|
637
|
+
drawSelectedElementControllersVertexes(overlayContext, selectedElementController, Object.assign(Object.assign({}, drawBaseOpts), { element: elem, calculator, hideControllers: !!isMoving && actionType === 'drag', style }));
|
|
638
|
+
if (actionType === 'drag') {
|
|
639
|
+
if (enableSnapToGrid === true) {
|
|
640
|
+
const referenceInfo = calcReferenceInfo(elem.uuid, {
|
|
641
|
+
calculator,
|
|
642
|
+
data: activeStore.data,
|
|
643
|
+
groupQueue,
|
|
644
|
+
viewScaleInfo,
|
|
645
|
+
viewSizeInfo
|
|
646
|
+
});
|
|
647
|
+
if (referenceInfo) {
|
|
648
|
+
const { offsetX, offsetY, xLines, yLines } = referenceInfo;
|
|
649
|
+
if (offsetX === 0 || offsetY === 0) {
|
|
650
|
+
drawReferenceLines(overlayContext, {
|
|
651
|
+
xLines,
|
|
652
|
+
yLines,
|
|
653
|
+
style
|
|
654
|
+
});
|
|
655
|
+
}
|
|
656
|
+
}
|
|
657
|
+
}
|
|
658
|
+
}
|
|
449
659
|
}
|
|
450
660
|
}
|
|
451
661
|
else {
|
|
452
662
|
if (hoverElement && actionType !== 'drag') {
|
|
453
|
-
|
|
663
|
+
if (isLock) {
|
|
664
|
+
drawLockVertexesWrapper(overlayContext, hoverElementVertexes, Object.assign(Object.assign({}, drawBaseOpts), { controller: calcElementSizeController(hoverElement, {
|
|
665
|
+
groupQueue,
|
|
666
|
+
controllerSize: 10,
|
|
667
|
+
viewScaleInfo
|
|
668
|
+
}), style }));
|
|
669
|
+
}
|
|
670
|
+
else {
|
|
671
|
+
drawHoverVertexesWrapper(overlayContext, hoverElementVertexes, drawBaseOpts);
|
|
672
|
+
}
|
|
454
673
|
}
|
|
455
|
-
if (elem && ['select', 'drag', 'resize'].includes(actionType)) {
|
|
456
|
-
drawSelectedElementControllersVertexes(
|
|
674
|
+
if (!isLock && elem && ['select', 'drag', 'resize'].includes(actionType)) {
|
|
675
|
+
drawSelectedElementControllersVertexes(overlayContext, selectedElementController, Object.assign(Object.assign({}, drawBaseOpts), { element: elem, calculator, hideControllers: !!isMoving && actionType === 'drag', style }));
|
|
676
|
+
if (actionType === 'drag') {
|
|
677
|
+
if (enableSnapToGrid === true) {
|
|
678
|
+
const referenceInfo = calcReferenceInfo(elem.uuid, {
|
|
679
|
+
calculator,
|
|
680
|
+
data: activeStore.data,
|
|
681
|
+
groupQueue,
|
|
682
|
+
viewScaleInfo,
|
|
683
|
+
viewSizeInfo
|
|
684
|
+
});
|
|
685
|
+
if (referenceInfo) {
|
|
686
|
+
const { offsetX, offsetY, xLines, yLines } = referenceInfo;
|
|
687
|
+
if (offsetX === 0 || offsetY === 0) {
|
|
688
|
+
drawReferenceLines(overlayContext, {
|
|
689
|
+
xLines,
|
|
690
|
+
yLines,
|
|
691
|
+
style
|
|
692
|
+
});
|
|
693
|
+
}
|
|
694
|
+
}
|
|
695
|
+
}
|
|
696
|
+
}
|
|
457
697
|
}
|
|
458
698
|
else if (actionType === 'area' && areaStart && areaEnd) {
|
|
459
|
-
drawArea(
|
|
699
|
+
drawArea(overlayContext, { start: areaStart, end: areaEnd, style });
|
|
460
700
|
}
|
|
461
701
|
else if (['drag-list', 'drag-list-end'].includes(actionType)) {
|
|
462
702
|
const listAreaSize = calcSelectedElementsArea(getActiveElements(), {
|
|
@@ -465,7 +705,7 @@ export const MiddlewareSelector = (opts) => {
|
|
|
465
705
|
calculator
|
|
466
706
|
});
|
|
467
707
|
if (listAreaSize) {
|
|
468
|
-
drawListArea(
|
|
708
|
+
drawListArea(overlayContext, { areaSize: listAreaSize, style });
|
|
469
709
|
}
|
|
470
710
|
}
|
|
471
711
|
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Data, Element, PointSize, ViewScaleInfo, ViewSizeInfo, ViewCalculator } from '@idraw/types';
|
|
2
|
+
export declare function calcReferenceInfo(uuid: string, opts: {
|
|
3
|
+
data: Data;
|
|
4
|
+
groupQueue: Element<'group'>[];
|
|
5
|
+
calculator: ViewCalculator;
|
|
6
|
+
viewScaleInfo: ViewScaleInfo;
|
|
7
|
+
viewSizeInfo: ViewSizeInfo;
|
|
8
|
+
}): {
|
|
9
|
+
offsetX: number | null;
|
|
10
|
+
offsetY: number | null;
|
|
11
|
+
yLines: PointSize[][];
|
|
12
|
+
xLines: PointSize[][];
|
|
13
|
+
} | null;
|