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