@univerjs/drawing-ui 1.0.0-alpha.1 → 1.0.0-alpha.3
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/lib/cjs/index.js +2483 -1884
- package/lib/cjs/locale/ar-SA.js +45 -0
- package/lib/cjs/locale/ca-ES.js +45 -0
- package/lib/cjs/locale/de-DE.js +45 -0
- package/lib/cjs/locale/en-US.js +45 -0
- package/lib/cjs/locale/es-ES.js +45 -0
- package/lib/cjs/locale/fa-IR.js +45 -0
- package/lib/cjs/locale/fr-FR.js +45 -0
- package/lib/cjs/locale/id-ID.js +45 -0
- package/lib/cjs/locale/it-IT.js +45 -0
- package/lib/cjs/locale/ja-JP.js +45 -0
- package/lib/cjs/locale/ko-KR.js +45 -0
- package/lib/cjs/locale/pl-PL.js +45 -0
- package/lib/cjs/locale/pt-BR.js +45 -0
- package/lib/cjs/locale/ru-RU.js +45 -0
- package/lib/cjs/locale/sk-SK.js +45 -0
- package/lib/cjs/locale/vi-VN.js +45 -0
- package/lib/cjs/locale/zh-CN.js +45 -0
- package/lib/cjs/locale/zh-HK.js +45 -0
- package/lib/cjs/locale/zh-TW.js +45 -0
- package/lib/es/index.js +2477 -1888
- package/lib/es/locale/ar-SA.js +45 -0
- package/lib/es/locale/ca-ES.js +45 -0
- package/lib/es/locale/de-DE.js +45 -0
- package/lib/es/locale/en-US.js +45 -0
- package/lib/es/locale/es-ES.js +45 -0
- package/lib/es/locale/fa-IR.js +45 -0
- package/lib/es/locale/fr-FR.js +45 -0
- package/lib/es/locale/id-ID.js +45 -0
- package/lib/es/locale/it-IT.js +45 -0
- package/lib/es/locale/ja-JP.js +45 -0
- package/lib/es/locale/ko-KR.js +45 -0
- package/lib/es/locale/pl-PL.js +45 -0
- package/lib/es/locale/pt-BR.js +45 -0
- package/lib/es/locale/ru-RU.js +45 -0
- package/lib/es/locale/sk-SK.js +45 -0
- package/lib/es/locale/vi-VN.js +45 -0
- package/lib/es/locale/zh-CN.js +45 -0
- package/lib/es/locale/zh-HK.js +45 -0
- package/lib/es/locale/zh-TW.js +45 -0
- package/lib/index.css +299 -0
- package/lib/index.js +2477 -1888
- package/lib/locale/ar-SA.js +45 -0
- package/lib/locale/ca-ES.js +45 -0
- package/lib/locale/de-DE.js +45 -0
- package/lib/locale/en-US.js +45 -0
- package/lib/locale/es-ES.js +45 -0
- package/lib/locale/fa-IR.js +45 -0
- package/lib/locale/fr-FR.js +45 -0
- package/lib/locale/id-ID.js +45 -0
- package/lib/locale/it-IT.js +45 -0
- package/lib/locale/ja-JP.js +45 -0
- package/lib/locale/ko-KR.js +45 -0
- package/lib/locale/pl-PL.js +45 -0
- package/lib/locale/pt-BR.js +45 -0
- package/lib/locale/ru-RU.js +45 -0
- package/lib/locale/sk-SK.js +45 -0
- package/lib/locale/vi-VN.js +45 -0
- package/lib/locale/zh-CN.js +45 -0
- package/lib/locale/zh-HK.js +45 -0
- package/lib/locale/zh-TW.js +45 -0
- package/lib/types/commands/operations/drawing-group.operation.d.ts +5 -3
- package/lib/types/controllers/image-update.controller.d.ts +2 -2
- package/lib/types/controllers/utils.d.ts +5 -1
- package/lib/types/index.d.ts +6 -1
- package/lib/types/locale/en-US.d.ts +45 -0
- package/lib/types/services/drawing-render.service.d.ts +10 -4
- package/lib/types/utils/rotate-enabled.d.ts +19 -0
- package/lib/types/views/image-popup-menu/ImagePopupMenu.d.ts +10 -3
- package/lib/types/views/object-list-panel/ObjectListPanelBase.d.ts +101 -0
- package/lib/types/views/object-list-panel/object-list-panel-layer.d.ts +21 -0
- package/lib/types/views/panel/drawing-transform-rotation.d.ts +26 -0
- package/lib/umd/index.js +7 -1
- package/lib/umd/locale/ar-SA.js +1 -1
- package/lib/umd/locale/ca-ES.js +1 -1
- package/lib/umd/locale/de-DE.js +1 -1
- package/lib/umd/locale/en-US.js +1 -1
- package/lib/umd/locale/es-ES.js +1 -1
- package/lib/umd/locale/fa-IR.js +1 -1
- package/lib/umd/locale/fr-FR.js +1 -1
- package/lib/umd/locale/id-ID.js +1 -1
- package/lib/umd/locale/it-IT.js +1 -1
- package/lib/umd/locale/ja-JP.js +1 -1
- package/lib/umd/locale/ko-KR.js +1 -1
- package/lib/umd/locale/pl-PL.js +1 -1
- package/lib/umd/locale/pt-BR.js +1 -1
- package/lib/umd/locale/ru-RU.js +1 -1
- package/lib/umd/locale/sk-SK.js +1 -1
- package/lib/umd/locale/vi-VN.js +1 -1
- package/lib/umd/locale/zh-CN.js +1 -1
- package/lib/umd/locale/zh-HK.js +1 -1
- package/lib/umd/locale/zh-TW.js +1 -1
- package/package.json +10 -10
package/lib/cjs/index.js
CHANGED
|
@@ -2,12 +2,12 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
|
2
2
|
let _univerjs_core = require("@univerjs/core");
|
|
3
3
|
let _univerjs_drawing = require("@univerjs/drawing");
|
|
4
4
|
let _univerjs_engine_render = require("@univerjs/engine-render");
|
|
5
|
-
let _univerjs_icons = require("@univerjs/icons");
|
|
6
5
|
let _univerjs_ui = require("@univerjs/ui");
|
|
6
|
+
let rxjs = require("rxjs");
|
|
7
|
+
let _univerjs_icons = require("@univerjs/icons");
|
|
7
8
|
let _univerjs_design = require("@univerjs/design");
|
|
8
9
|
let react = require("react");
|
|
9
10
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
10
|
-
let rxjs = require("rxjs");
|
|
11
11
|
|
|
12
12
|
//#region src/commands/operations/drawing-align.operation.ts
|
|
13
13
|
/**
|
|
@@ -132,15 +132,13 @@ const SetDrawingArrangeBackwardOperation = {
|
|
|
132
132
|
//#endregion
|
|
133
133
|
//#region src/commands/operations/drawing-group.operation.ts
|
|
134
134
|
/**
|
|
135
|
-
* Now only support grouping images, shapes, and groups.
|
|
135
|
+
* Now only support grouping images, shapes, charts, and groups.
|
|
136
136
|
*/
|
|
137
|
-
const DRAWING_GROUP_TYPES =
|
|
138
|
-
_univerjs_core.DrawingTypeEnum.DRAWING_IMAGE,
|
|
139
|
-
_univerjs_core.DrawingTypeEnum.DRAWING_SHAPE,
|
|
140
|
-
_univerjs_core.DrawingTypeEnum.DRAWING_GROUP
|
|
141
|
-
];
|
|
137
|
+
const DRAWING_GROUP_TYPES = _univerjs_drawing.DRAWING_GROUPABLE_TYPES;
|
|
142
138
|
/**
|
|
143
|
-
* Group the selected drawings into a new group. The selected drawings must be
|
|
139
|
+
* Group the selected drawings into a new group. The selected drawings must be
|
|
140
|
+
* of type image, shape, chart, or group, and there must be at least 2 drawings
|
|
141
|
+
* selected.
|
|
144
142
|
*/
|
|
145
143
|
const SetDrawingGroupOperation = {
|
|
146
144
|
id: "drawing.operation.set-drawing-group",
|
|
@@ -149,7 +147,7 @@ const SetDrawingGroupOperation = {
|
|
|
149
147
|
const drawingManagerService = accessor.get(_univerjs_drawing.IDrawingManagerService);
|
|
150
148
|
const drawings = params.drawings || drawingManagerService.getFocusDrawings();
|
|
151
149
|
if (drawings.length < 2) return false;
|
|
152
|
-
if (!drawings.every((drawing) =>
|
|
150
|
+
if (!drawings.every((drawing) => (0, _univerjs_drawing.isGroupableDrawingType)(drawing.drawingType))) return false;
|
|
153
151
|
const { unitId, subUnitId } = drawings[0];
|
|
154
152
|
const groupId = (0, _univerjs_core.generateRandomId)(10);
|
|
155
153
|
const groupTransform = (0, _univerjs_engine_render.getGroupState)(0, 0, drawings.map((o) => o.transform || {}));
|
|
@@ -171,11 +169,12 @@ const SetDrawingGroupOperation = {
|
|
|
171
169
|
left: 0,
|
|
172
170
|
top: 0
|
|
173
171
|
};
|
|
174
|
-
const { unitId, subUnitId, drawingId } = drawing;
|
|
172
|
+
const { unitId, subUnitId, drawingId, drawingType } = drawing;
|
|
175
173
|
return {
|
|
176
174
|
unitId,
|
|
177
175
|
subUnitId,
|
|
178
176
|
drawingId,
|
|
177
|
+
drawingType,
|
|
179
178
|
transform: { ...transform },
|
|
180
179
|
groupId
|
|
181
180
|
};
|
|
@@ -267,8 +266,48 @@ const ImageResetSizeOperation = {
|
|
|
267
266
|
}
|
|
268
267
|
};
|
|
269
268
|
|
|
269
|
+
//#endregion
|
|
270
|
+
//#region src/utils/rotate-enabled.ts
|
|
271
|
+
function isKnownDrawingUINonRotatableType(drawingType) {
|
|
272
|
+
return drawingType === _univerjs_core.DrawingTypeEnum.DRAWING_CHART;
|
|
273
|
+
}
|
|
274
|
+
function resolveDrawingUIRotateEnabled(drawing, options = {}) {
|
|
275
|
+
var _options$isKnownNonRo;
|
|
276
|
+
return (0, _univerjs_drawing.resolveDrawingRotateEnabled)(drawing, {
|
|
277
|
+
...options,
|
|
278
|
+
isKnownNonRotatableType: (_options$isKnownNonRo = options.isKnownNonRotatableType) !== null && _options$isKnownNonRo !== void 0 ? _options$isKnownNonRo : isKnownDrawingUINonRotatableType
|
|
279
|
+
});
|
|
280
|
+
}
|
|
281
|
+
|
|
270
282
|
//#endregion
|
|
271
283
|
//#region src/controllers/utils.ts
|
|
284
|
+
function getDrawingRenderObject(scene, drawingSearch) {
|
|
285
|
+
var _scene$getObjectInclu;
|
|
286
|
+
const key = (0, _univerjs_drawing.getDrawingShapeKeyByDrawingSearch)(drawingSearch);
|
|
287
|
+
return (_scene$getObjectInclu = scene.getObjectIncludeInGroup(key)) !== null && _scene$getObjectInclu !== void 0 ? _scene$getObjectInclu : null;
|
|
288
|
+
}
|
|
289
|
+
function disposeDrawingRenderObject(scene, drawingSearch) {
|
|
290
|
+
const object = getDrawingRenderObject(scene, drawingSearch);
|
|
291
|
+
if (object == null) return false;
|
|
292
|
+
object.dispose();
|
|
293
|
+
return true;
|
|
294
|
+
}
|
|
295
|
+
function getRenderObjectForDrawing(scene, drawing) {
|
|
296
|
+
return getDrawingRenderObject(scene, drawing);
|
|
297
|
+
}
|
|
298
|
+
function syncGroupRotateEnabled(group, groupParam, scene, drawingManagerService, children) {
|
|
299
|
+
const rotateEnabled = resolveDrawingUIRotateEnabled(groupParam, {
|
|
300
|
+
getChildren: (drawing) => {
|
|
301
|
+
if (children && drawing.drawingId === groupParam.drawingId && drawing.unitId === groupParam.unitId && drawing.subUnitId === groupParam.subUnitId) return children;
|
|
302
|
+
return drawingManagerService.getDrawingsByGroup(drawing);
|
|
303
|
+
},
|
|
304
|
+
getRenderObject: (drawing) => getRenderObjectForDrawing(scene, drawing)
|
|
305
|
+
});
|
|
306
|
+
group.transformerConfig = {
|
|
307
|
+
...group.transformerConfig,
|
|
308
|
+
rotateEnabled
|
|
309
|
+
};
|
|
310
|
+
}
|
|
272
311
|
function insertGroupObject(objectParam, object, scene, drawingManagerService) {
|
|
273
312
|
const groupParam = drawingManagerService.getDrawingByParam(objectParam);
|
|
274
313
|
if (groupParam == null) return;
|
|
@@ -279,11 +318,13 @@ function insertGroupObject(objectParam, object, scene, drawingManagerService) {
|
|
|
279
318
|
const objects = groupObject.getObjects();
|
|
280
319
|
for (const obj of objects) if (obj.oKey === object.oKey) return;
|
|
281
320
|
groupObject.addObject(object);
|
|
321
|
+
syncGroupRotateEnabled(groupObject, groupParam, scene, drawingManagerService);
|
|
282
322
|
return;
|
|
283
323
|
}
|
|
284
324
|
const group = new _univerjs_engine_render.DrawingGroupObject(groupKey);
|
|
285
325
|
scene.addObject(group, _univerjs_engine_render.DRAWING_OBJECT_LAYER_INDEX).attachTransformerTo(group);
|
|
286
326
|
group.addObject(object);
|
|
327
|
+
syncGroupRotateEnabled(group, groupParam, scene, drawingManagerService);
|
|
287
328
|
const { transform, groupBaseBound } = groupParam;
|
|
288
329
|
if (groupBaseBound) group.setBaseBound(groupBaseBound);
|
|
289
330
|
if (groupParam.groupId) {
|
|
@@ -320,269 +361,280 @@ function getCurrentUnitInfo(currentUniverService, propUnitId) {
|
|
|
320
361
|
}
|
|
321
362
|
|
|
322
363
|
//#endregion
|
|
323
|
-
//#region
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
339
|
-
* you may not use this file except in compliance with the License.
|
|
340
|
-
* You may obtain a copy of the License at
|
|
341
|
-
*
|
|
342
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
343
|
-
*
|
|
344
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
345
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
346
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
347
|
-
* See the License for the specific language governing permissions and
|
|
348
|
-
* limitations under the License.
|
|
349
|
-
*/
|
|
350
|
-
const COMPONENT_IMAGE_POPUP_MENU = "COMPONENT_IMAGE_POPUP_MENU";
|
|
351
|
-
|
|
352
|
-
//#endregion
|
|
353
|
-
//#region src/views/image-popup-menu/ImagePopupMenu.tsx
|
|
354
|
-
function ImagePopupMenu(props) {
|
|
355
|
-
var _popup$extraProps, _popup$extraProps2;
|
|
356
|
-
const { popup } = props;
|
|
357
|
-
const menuItems = popup === null || popup === void 0 || (_popup$extraProps = popup.extraProps) === null || _popup$extraProps === void 0 ? void 0 : _popup$extraProps.menuItems;
|
|
358
|
-
if (!menuItems) return null;
|
|
359
|
-
if (((_popup$extraProps2 = popup.extraProps) === null || _popup$extraProps2 === void 0 ? void 0 : _popup$extraProps2.variant) === "doc-floating-toolbar" && popup.extraProps.unitId && popup.extraProps.subUnitId && popup.extraProps.drawingId) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DocImageFloatingToolbar, {
|
|
360
|
-
menuItems,
|
|
361
|
-
unitId: popup.extraProps.unitId,
|
|
362
|
-
subUnitId: popup.extraProps.subUnitId,
|
|
363
|
-
drawingId: popup.extraProps.drawingId
|
|
364
|
+
//#region src/menu/align.menu.ts
|
|
365
|
+
const getMenuStateByDrawingFocusChangedObservable$$1 = (accessor) => {
|
|
366
|
+
const drawingManagerService = accessor.get(_univerjs_drawing.IDrawingManagerService);
|
|
367
|
+
return new rxjs.Observable((subscriber) => {
|
|
368
|
+
const update = (drawings) => {
|
|
369
|
+
if (!drawings || drawings.length === 0) return subscriber.next(true);
|
|
370
|
+
if (drawings.length < 2) return subscriber.next(true);
|
|
371
|
+
subscriber.next(false);
|
|
372
|
+
};
|
|
373
|
+
const subscription = drawingManagerService.focus$.subscribe((drawings) => {
|
|
374
|
+
if (!drawings || drawings.length === 0) return subscriber.next(true);
|
|
375
|
+
update(drawings);
|
|
376
|
+
});
|
|
377
|
+
update(drawingManagerService.getFocusDrawings());
|
|
378
|
+
return () => subscription.unsubscribe();
|
|
364
379
|
});
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
380
|
+
};
|
|
381
|
+
const DRAWING_ALIGN_CONTEXT_MENU_ID = "contextMenu.drawing-align";
|
|
382
|
+
function DrawingAlignContextMenuItemFactory(accessor) {
|
|
383
|
+
return {
|
|
384
|
+
id: DRAWING_ALIGN_CONTEXT_MENU_ID,
|
|
385
|
+
type: _univerjs_ui.MenuItemType.SUBITEMS,
|
|
386
|
+
icon: "HorizontallyIcon",
|
|
387
|
+
title: "drawing-ui.image-panel.align.title",
|
|
388
|
+
hidden$: getMenuStateByDrawingFocusChangedObservable$$1(accessor)
|
|
371
389
|
};
|
|
372
|
-
|
|
373
|
-
|
|
390
|
+
}
|
|
391
|
+
function SetDrawingAlignLeftMenuItemFactory() {
|
|
392
|
+
return {
|
|
393
|
+
id: SetDrawingAlignLeftOperation.id,
|
|
394
|
+
type: _univerjs_ui.MenuItemType.BUTTON,
|
|
395
|
+
icon: "LeftJustifyingIcon",
|
|
396
|
+
title: "drawing-ui.image-panel.align.left"
|
|
374
397
|
};
|
|
375
|
-
|
|
376
|
-
|
|
398
|
+
}
|
|
399
|
+
function SetDrawingAlignCenterMenuItemFactory() {
|
|
400
|
+
return {
|
|
401
|
+
id: SetDrawingAlignCenterOperation.id,
|
|
402
|
+
type: _univerjs_ui.MenuItemType.BUTTON,
|
|
403
|
+
icon: "HorizontallyIcon",
|
|
404
|
+
title: "drawing-ui.image-panel.align.center"
|
|
377
405
|
};
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
406
|
+
}
|
|
407
|
+
function SetDrawingAlignRightMenuItemFactory() {
|
|
408
|
+
return {
|
|
409
|
+
id: SetDrawingAlignRightOperation.id,
|
|
410
|
+
type: _univerjs_ui.MenuItemType.BUTTON,
|
|
411
|
+
icon: "RightJustifyingIcon",
|
|
412
|
+
title: "drawing-ui.image-panel.align.right"
|
|
381
413
|
};
|
|
382
|
-
const showMore = visible || isHovered;
|
|
383
|
-
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
384
|
-
onMouseEnter: handleMouseEnter,
|
|
385
|
-
onMouseLeave: handleMouseLeave,
|
|
386
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_design.DropdownMenu, {
|
|
387
|
-
align: "start",
|
|
388
|
-
items: menuItems.map((item) => ({
|
|
389
|
-
type: "item",
|
|
390
|
-
children: localeService.t(item.label),
|
|
391
|
-
disabled: item.disable,
|
|
392
|
-
onSelect: () => handleClick(item)
|
|
393
|
-
})),
|
|
394
|
-
open: visible,
|
|
395
|
-
onOpenChange: onVisibleChange,
|
|
396
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
397
|
-
className: (0, _univerjs_design.clsx)("univer-flex univer-items-center univer-gap-2 univer-rounded univer-p-1 hover:univer-bg-gray-100 dark:hover:!univer-bg-gray-800", _univerjs_design.borderClassName, {
|
|
398
|
-
"univer-bg-gray-100 dark:!univer-bg-gray-800": visible,
|
|
399
|
-
"univer-bg-white dark:!univer-bg-gray-900": !visible
|
|
400
|
-
}),
|
|
401
|
-
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_icons.AutofillDoubleIcon, { className: "univer-fill-primary-600 univer-text-gray-900 dark:!univer-text-white" }), showMore && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_icons.MoreDownIcon, { className: "dark:!univer-text-white" })]
|
|
402
|
-
})
|
|
403
|
-
})
|
|
404
|
-
});
|
|
405
414
|
}
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
if (drawing.layoutType === _univerjs_core.PositionedObjectLayoutType.WRAP_TOP_AND_BOTTOM) return "wrapTopAndBottom";
|
|
414
|
-
return "inline";
|
|
415
|
+
function SetDrawingAlignTopMenuItemFactory() {
|
|
416
|
+
return {
|
|
417
|
+
id: SetDrawingAlignTopOperation.id,
|
|
418
|
+
type: _univerjs_ui.MenuItemType.BUTTON,
|
|
419
|
+
icon: "AlignTopIcon",
|
|
420
|
+
title: "drawing-ui.image-panel.align.top"
|
|
421
|
+
};
|
|
415
422
|
}
|
|
416
|
-
function
|
|
417
|
-
return
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
423
|
+
function SetDrawingAlignMiddleMenuItemFactory() {
|
|
424
|
+
return {
|
|
425
|
+
id: SetDrawingAlignMiddleOperation.id,
|
|
426
|
+
type: _univerjs_ui.MenuItemType.BUTTON,
|
|
427
|
+
icon: "VerticalCenterIcon",
|
|
428
|
+
title: "drawing-ui.image-panel.align.middle"
|
|
429
|
+
};
|
|
421
430
|
}
|
|
422
|
-
function
|
|
423
|
-
return
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
onClick: props.onClick,
|
|
430
|
-
className: (0, _univerjs_design.clsx)("univer-flex univer-h-6 univer-w-6 univer-items-center univer-justify-center univer-rounded-md univer-border-none univer-bg-transparent univer-p-0 univer-text-sm univer-text-gray-700 univer-transition-colors hover:univer-bg-gray-100 disabled:univer-cursor-not-allowed disabled:univer-opacity-40 dark:!univer-text-gray-100 dark:hover:!univer-bg-gray-700", { "univer-bg-gray-100 univer-text-primary-600 dark:!univer-bg-gray-700 dark:!univer-text-primary-300": props.active }),
|
|
431
|
-
children: props.children
|
|
432
|
-
})
|
|
433
|
-
});
|
|
431
|
+
function SetDrawingAlignBottomMenuItemFactory() {
|
|
432
|
+
return {
|
|
433
|
+
id: SetDrawingAlignBottomOperation.id,
|
|
434
|
+
type: _univerjs_ui.MenuItemType.BUTTON,
|
|
435
|
+
icon: "AlignBottomIcon",
|
|
436
|
+
title: "drawing-ui.image-panel.align.bottom"
|
|
437
|
+
};
|
|
434
438
|
}
|
|
435
|
-
function
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
overlay: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
443
|
-
className: "univer-min-w-32 univer-rounded-lg univer-border univer-border-solid univer-border-gray-200 univer-bg-white univer-p-1 univer-shadow-lg dark:!univer-border-gray-700 dark:!univer-bg-gray-900",
|
|
444
|
-
children: props.options.map((option) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
445
|
-
type: "button",
|
|
446
|
-
onClick: () => {
|
|
447
|
-
props.onChange(option.value);
|
|
448
|
-
setOpen(false);
|
|
449
|
-
},
|
|
450
|
-
className: (0, _univerjs_design.clsx)("univer-flex univer-h-8 univer-w-full univer-items-center univer-gap-2 univer-rounded-md univer-border-none univer-bg-transparent univer-px-2 univer-text-left univer-text-sm univer-text-gray-700 univer-transition-colors hover:univer-bg-gray-100 dark:!univer-text-gray-100 dark:hover:!univer-bg-gray-800", { "univer-bg-primary-50 univer-text-primary-600 dark:!univer-bg-gray-800 dark:!univer-text-primary-300": option.value === props.value }),
|
|
451
|
-
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
452
|
-
className: "univer-flex univer-size-4 univer-items-center univer-justify-center",
|
|
453
|
-
children: option.icon
|
|
454
|
-
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
455
|
-
className: "univer-flex-1",
|
|
456
|
-
children: option.label
|
|
457
|
-
})]
|
|
458
|
-
}, option.value))
|
|
459
|
-
}),
|
|
460
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_design.Tooltip, {
|
|
461
|
-
title: props.title,
|
|
462
|
-
placement: "bottom",
|
|
463
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
464
|
-
type: "button",
|
|
465
|
-
className: (0, _univerjs_design.clsx)("univer-flex univer-h-6 univer-min-w-9 univer-items-center univer-justify-center univer-gap-1 univer-rounded-md univer-border-none univer-bg-transparent univer-px-1.5 univer-text-sm univer-text-gray-700 univer-transition-colors hover:univer-bg-gray-100 dark:!univer-text-gray-100 dark:hover:!univer-bg-gray-700", { "univer-bg-gray-100 univer-text-primary-600 dark:!univer-bg-gray-700 dark:!univer-text-primary-300": open }),
|
|
466
|
-
children: [activeOption.icon, /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_icons.MoreDownIcon, { className: "univer-text-xs" })]
|
|
467
|
-
})
|
|
468
|
-
}) })
|
|
469
|
-
});
|
|
439
|
+
function SetDrawingAlignHorizonMenuItemFactory() {
|
|
440
|
+
return {
|
|
441
|
+
id: SetDrawingAlignHorizonOperation.id,
|
|
442
|
+
type: _univerjs_ui.MenuItemType.BUTTON,
|
|
443
|
+
icon: "HorizontallyIcon",
|
|
444
|
+
title: "drawing-ui.image-panel.align.horizon"
|
|
445
|
+
};
|
|
470
446
|
}
|
|
471
|
-
function
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
const [hidden, setHidden] = (0, react.useState)(false);
|
|
478
|
-
const getMenuItem = (label) => props.menuItems.find((item) => item.label === label);
|
|
479
|
-
const editItem = getMenuItem("drawing-ui.image-popup.edit");
|
|
480
|
-
const cropItem = getMenuItem("drawing-ui.image-popup.crop");
|
|
481
|
-
const deleteItem = getMenuItem("drawing-ui.image-popup.delete");
|
|
482
|
-
const wrappingStyleOptions = [
|
|
483
|
-
{
|
|
484
|
-
label: localeService.t("drawing-ui.image-text-wrap.inline"),
|
|
485
|
-
value: "inline",
|
|
486
|
-
icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_icons.TextWrapShapeIcon, {})
|
|
487
|
-
},
|
|
488
|
-
{
|
|
489
|
-
label: localeService.t("drawing-ui.image-text-wrap.square"),
|
|
490
|
-
value: "wrapSquare",
|
|
491
|
-
icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_icons.TextWrapShapeIcon, {})
|
|
492
|
-
},
|
|
493
|
-
{
|
|
494
|
-
label: localeService.t("drawing-ui.image-text-wrap.topAndBottom"),
|
|
495
|
-
value: "wrapTopAndBottom",
|
|
496
|
-
icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_icons.TextWrapShapeIcon, {})
|
|
497
|
-
},
|
|
498
|
-
{
|
|
499
|
-
label: localeService.t("drawing-ui.image-text-wrap.behindText"),
|
|
500
|
-
value: "behindText",
|
|
501
|
-
icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_icons.TextWrapShapeIcon, {})
|
|
502
|
-
},
|
|
503
|
-
{
|
|
504
|
-
label: localeService.t("drawing-ui.image-text-wrap.inFrontText"),
|
|
505
|
-
value: "inFrontOfText",
|
|
506
|
-
icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_icons.TextWrapShapeIcon, {})
|
|
507
|
-
}
|
|
508
|
-
];
|
|
509
|
-
const executeMenuItem = (item) => {
|
|
510
|
-
if (!item || item.disable) return;
|
|
511
|
-
commandService.executeCommand(item.commandId, item.commandParams);
|
|
512
|
-
};
|
|
513
|
-
const updateWrappingStyle = (value) => {
|
|
514
|
-
setWrappingStyle(value);
|
|
515
|
-
commandService.executeCommand(UPDATE_DOC_DRAWING_WRAPPING_STYLE_COMMAND_ID, {
|
|
516
|
-
unitId: props.unitId,
|
|
517
|
-
subUnitId: props.subUnitId,
|
|
518
|
-
drawings: [{
|
|
519
|
-
unitId: props.unitId,
|
|
520
|
-
subUnitId: props.subUnitId,
|
|
521
|
-
drawingId: props.drawingId
|
|
522
|
-
}],
|
|
523
|
-
wrappingStyle: value
|
|
524
|
-
});
|
|
447
|
+
function SetDrawingAlignVerticalMenuItemFactory() {
|
|
448
|
+
return {
|
|
449
|
+
id: SetDrawingAlignVerticalOperation.id,
|
|
450
|
+
type: _univerjs_ui.MenuItemType.BUTTON,
|
|
451
|
+
icon: "VerticalCenterIcon",
|
|
452
|
+
title: "drawing-ui.image-panel.align.vertical"
|
|
525
453
|
};
|
|
526
|
-
if (hidden) return null;
|
|
527
|
-
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
528
|
-
"data-u-comp": "doc-image-floating-toolbar",
|
|
529
|
-
onMouseDown: (event) => {
|
|
530
|
-
event.stopPropagation();
|
|
531
|
-
event.preventDefault();
|
|
532
|
-
},
|
|
533
|
-
className: (0, _univerjs_design.clsx)("univer-box-border univer-flex univer-items-center univer-rounded univer-bg-white univer-px-1 univer-py-1 univer-shadow-sm dark:!univer-border-gray-700 dark:!univer-bg-gray-900", _univerjs_design.borderClassName),
|
|
534
|
-
children: [
|
|
535
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(ToolbarGroup, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ToolbarDropdownButton, {
|
|
536
|
-
title: (_wrappingStyleOptions = (_wrappingStyleOptions2 = wrappingStyleOptions.find((option) => option.value === wrappingStyle)) === null || _wrappingStyleOptions2 === void 0 ? void 0 : _wrappingStyleOptions2.label) !== null && _wrappingStyleOptions !== void 0 ? _wrappingStyleOptions : localeService.t("drawing-ui.image-text-wrap.inline"),
|
|
537
|
-
value: wrappingStyle,
|
|
538
|
-
options: wrappingStyleOptions,
|
|
539
|
-
onChange: updateWrappingStyle
|
|
540
|
-
}) }),
|
|
541
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_design.Separator, { orientation: "vertical" }),
|
|
542
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(ToolbarGroup, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(ToolbarButton, {
|
|
543
|
-
title: editItem ? localeService.t(editItem.label) : localeService.t("drawing-ui.image-popup.edit"),
|
|
544
|
-
disabled: !editItem || editItem.disable,
|
|
545
|
-
onClick: () => {
|
|
546
|
-
setHidden(true);
|
|
547
|
-
executeMenuItem(editItem);
|
|
548
|
-
},
|
|
549
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_icons.DocSettingIcon, {})
|
|
550
|
-
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ToolbarButton, {
|
|
551
|
-
title: cropItem ? localeService.t(cropItem.label) : localeService.t("drawing-ui.image-popup.crop"),
|
|
552
|
-
disabled: !cropItem || cropItem.disable,
|
|
553
|
-
onClick: () => executeMenuItem(cropItem),
|
|
554
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_icons.CropIcon, {})
|
|
555
|
-
})] }),
|
|
556
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_design.Separator, { orientation: "vertical" }),
|
|
557
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(ToolbarGroup, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ToolbarButton, {
|
|
558
|
-
title: deleteItem ? localeService.t(deleteItem.label) : localeService.t("drawing-ui.image-popup.delete"),
|
|
559
|
-
disabled: !deleteItem || deleteItem.disable,
|
|
560
|
-
onClick: () => executeMenuItem(deleteItem),
|
|
561
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_icons.DeleteIcon, {})
|
|
562
|
-
}) })
|
|
563
|
-
]
|
|
564
|
-
});
|
|
565
454
|
}
|
|
566
455
|
|
|
567
456
|
//#endregion
|
|
568
|
-
//#region
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
457
|
+
//#region src/menu/arrange.menu.ts
|
|
458
|
+
const DRAWING_ARRANGE_CONTEXT_MENU_ID = "contextMenu.drawing-arrange";
|
|
459
|
+
function DrawingArrangeContextMenuItemFactory() {
|
|
460
|
+
return {
|
|
461
|
+
id: DRAWING_ARRANGE_CONTEXT_MENU_ID,
|
|
462
|
+
type: _univerjs_ui.MenuItemType.SUBITEMS,
|
|
463
|
+
icon: "TopmostIcon",
|
|
464
|
+
title: "drawing-ui.image-panel.arrange.title"
|
|
465
|
+
};
|
|
466
|
+
}
|
|
467
|
+
function SetDrawingArrangeFrontMenuItemFactory() {
|
|
468
|
+
return {
|
|
469
|
+
id: SetDrawingArrangeFrontOperation.id,
|
|
470
|
+
type: _univerjs_ui.MenuItemType.BUTTON,
|
|
471
|
+
icon: "TopmostIcon",
|
|
472
|
+
title: "drawing-ui.image-panel.arrange.front"
|
|
473
|
+
};
|
|
474
|
+
}
|
|
475
|
+
function SetDrawingArrangeForwardMenuItemFactory() {
|
|
476
|
+
return {
|
|
477
|
+
id: SetDrawingArrangeForwardOperation.id,
|
|
478
|
+
type: _univerjs_ui.MenuItemType.BUTTON,
|
|
479
|
+
icon: "MoveUpIcon",
|
|
480
|
+
title: "drawing-ui.image-panel.arrange.forward"
|
|
481
|
+
};
|
|
482
|
+
}
|
|
483
|
+
function SetDrawingArrangeBackMenuItemFactory() {
|
|
484
|
+
return {
|
|
485
|
+
id: SetDrawingArrangeBackOperation.id,
|
|
486
|
+
type: _univerjs_ui.MenuItemType.BUTTON,
|
|
487
|
+
icon: "BottomIcon",
|
|
488
|
+
title: "drawing-ui.image-panel.arrange.back"
|
|
489
|
+
};
|
|
490
|
+
}
|
|
491
|
+
function SetDrawingArrangeBackwardMenuItemFactory() {
|
|
492
|
+
return {
|
|
493
|
+
id: SetDrawingArrangeBackwardOperation.id,
|
|
494
|
+
type: _univerjs_ui.MenuItemType.BUTTON,
|
|
495
|
+
icon: "MoveDownIcon",
|
|
496
|
+
title: "drawing-ui.image-panel.arrange.backward"
|
|
572
497
|
};
|
|
573
498
|
}
|
|
574
499
|
|
|
575
500
|
//#endregion
|
|
576
|
-
//#region
|
|
577
|
-
function
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
501
|
+
//#region src/menu/group.menu.ts
|
|
502
|
+
function getMenuStateByDrawingFocusChangedObservable$(accessor, type) {
|
|
503
|
+
const drawingManagerService = accessor.get(_univerjs_drawing.IDrawingManagerService);
|
|
504
|
+
return new rxjs.Observable((subscriber) => {
|
|
505
|
+
const update = (drawings) => {
|
|
506
|
+
if (!drawings || drawings.length === 0) return subscriber.next(true);
|
|
507
|
+
if (type === "group") {
|
|
508
|
+
if (drawings.length < 2) return subscriber.next(true);
|
|
509
|
+
if (!drawings.every((drawing) => (0, _univerjs_drawing.isGroupableDrawingType)(drawing.drawingType))) return subscriber.next(true);
|
|
510
|
+
} else if (type === "unGroup") {
|
|
511
|
+
if (drawings.filter((drawing) => drawing.drawingType === _univerjs_core.DrawingTypeEnum.DRAWING_GROUP).length === 0) return subscriber.next(true);
|
|
512
|
+
} else if (!drawings.every((drawing) => (0, _univerjs_drawing.isGroupableDrawingType)(drawing.drawingType))) return subscriber.next(true);
|
|
513
|
+
subscriber.next(false);
|
|
514
|
+
};
|
|
515
|
+
const subscription = drawingManagerService.focus$.subscribe((drawings) => {
|
|
516
|
+
if (!drawings || drawings.length === 0) return subscriber.next(true);
|
|
517
|
+
update(drawings);
|
|
518
|
+
});
|
|
519
|
+
update(drawingManagerService.getFocusDrawings());
|
|
520
|
+
return () => subscription.unsubscribe();
|
|
521
|
+
});
|
|
522
|
+
}
|
|
523
|
+
const DRAWING_GROUP_CONTEXT_MENU_ID = "contextMenu.drawing-group";
|
|
524
|
+
function DrawingGroupContextMenuItemFactory(accessor) {
|
|
525
|
+
return {
|
|
526
|
+
id: DRAWING_GROUP_CONTEXT_MENU_ID,
|
|
527
|
+
type: _univerjs_ui.MenuItemType.SUBITEMS,
|
|
528
|
+
icon: "GroupIcon",
|
|
529
|
+
title: "drawing-ui.image-panel.group.title",
|
|
530
|
+
hidden$: getMenuStateByDrawingFocusChangedObservable$(accessor)
|
|
531
|
+
};
|
|
532
|
+
}
|
|
533
|
+
function SetDrawingGroupMenuItemFactory(accessor) {
|
|
534
|
+
return {
|
|
535
|
+
id: SetDrawingGroupOperation.id,
|
|
536
|
+
type: _univerjs_ui.MenuItemType.BUTTON,
|
|
537
|
+
icon: "GroupIcon",
|
|
538
|
+
title: "drawing-ui.image-panel.group.group",
|
|
539
|
+
disabled$: getMenuStateByDrawingFocusChangedObservable$(accessor, "group")
|
|
540
|
+
};
|
|
541
|
+
}
|
|
542
|
+
function CancelDrawingGroupMenuItemFactory(accessor) {
|
|
543
|
+
return {
|
|
544
|
+
id: CancelDrawingGroupOperation.id,
|
|
545
|
+
type: _univerjs_ui.MenuItemType.BUTTON,
|
|
546
|
+
icon: "UngroupIcon",
|
|
547
|
+
title: "drawing-ui.image-panel.group.unGroup",
|
|
548
|
+
disabled$: getMenuStateByDrawingFocusChangedObservable$(accessor, "unGroup")
|
|
549
|
+
};
|
|
582
550
|
}
|
|
583
551
|
|
|
584
552
|
//#endregion
|
|
585
|
-
//#region src/
|
|
553
|
+
//#region src/menu/schema.ts
|
|
554
|
+
const menuSchema = { [_univerjs_ui.ContextMenuPosition.DRAWING]: { [_univerjs_ui.ContextMenuGroup.OTHERS]: {
|
|
555
|
+
[DRAWING_GROUP_CONTEXT_MENU_ID]: {
|
|
556
|
+
order: 1,
|
|
557
|
+
menuItemFactory: DrawingGroupContextMenuItemFactory,
|
|
558
|
+
[SetDrawingGroupOperation.id]: {
|
|
559
|
+
order: 0,
|
|
560
|
+
menuItemFactory: SetDrawingGroupMenuItemFactory
|
|
561
|
+
},
|
|
562
|
+
[CancelDrawingGroupOperation.id]: {
|
|
563
|
+
order: 1,
|
|
564
|
+
menuItemFactory: CancelDrawingGroupMenuItemFactory
|
|
565
|
+
}
|
|
566
|
+
},
|
|
567
|
+
[DRAWING_ARRANGE_CONTEXT_MENU_ID]: {
|
|
568
|
+
order: 2,
|
|
569
|
+
menuItemFactory: DrawingArrangeContextMenuItemFactory,
|
|
570
|
+
[SetDrawingArrangeFrontOperation.id]: {
|
|
571
|
+
order: 0,
|
|
572
|
+
menuItemFactory: SetDrawingArrangeFrontMenuItemFactory
|
|
573
|
+
},
|
|
574
|
+
[SetDrawingArrangeForwardOperation.id]: {
|
|
575
|
+
order: 1,
|
|
576
|
+
menuItemFactory: SetDrawingArrangeForwardMenuItemFactory
|
|
577
|
+
},
|
|
578
|
+
[SetDrawingArrangeBackOperation.id]: {
|
|
579
|
+
order: 2,
|
|
580
|
+
menuItemFactory: SetDrawingArrangeBackMenuItemFactory
|
|
581
|
+
},
|
|
582
|
+
[SetDrawingArrangeBackwardOperation.id]: {
|
|
583
|
+
order: 3,
|
|
584
|
+
menuItemFactory: SetDrawingArrangeBackwardMenuItemFactory
|
|
585
|
+
}
|
|
586
|
+
},
|
|
587
|
+
[DRAWING_ALIGN_CONTEXT_MENU_ID]: {
|
|
588
|
+
order: 3,
|
|
589
|
+
menuItemFactory: DrawingAlignContextMenuItemFactory,
|
|
590
|
+
[SetDrawingAlignLeftOperation.id]: {
|
|
591
|
+
order: 0,
|
|
592
|
+
menuItemFactory: SetDrawingAlignLeftMenuItemFactory
|
|
593
|
+
},
|
|
594
|
+
[SetDrawingAlignCenterOperation.id]: {
|
|
595
|
+
order: 1,
|
|
596
|
+
menuItemFactory: SetDrawingAlignCenterMenuItemFactory
|
|
597
|
+
},
|
|
598
|
+
[SetDrawingAlignRightOperation.id]: {
|
|
599
|
+
order: 2,
|
|
600
|
+
menuItemFactory: SetDrawingAlignRightMenuItemFactory
|
|
601
|
+
},
|
|
602
|
+
[SetDrawingAlignTopOperation.id]: {
|
|
603
|
+
order: 3,
|
|
604
|
+
menuItemFactory: SetDrawingAlignTopMenuItemFactory
|
|
605
|
+
},
|
|
606
|
+
[SetDrawingAlignMiddleOperation.id]: {
|
|
607
|
+
order: 4,
|
|
608
|
+
menuItemFactory: SetDrawingAlignMiddleMenuItemFactory
|
|
609
|
+
},
|
|
610
|
+
[SetDrawingAlignBottomOperation.id]: {
|
|
611
|
+
order: 5,
|
|
612
|
+
menuItemFactory: SetDrawingAlignBottomMenuItemFactory
|
|
613
|
+
},
|
|
614
|
+
[SetDrawingAlignHorizonOperation.id]: {
|
|
615
|
+
order: 6,
|
|
616
|
+
menuItemFactory: SetDrawingAlignHorizonMenuItemFactory
|
|
617
|
+
},
|
|
618
|
+
[SetDrawingAlignVerticalOperation.id]: {
|
|
619
|
+
order: 7,
|
|
620
|
+
menuItemFactory: SetDrawingAlignVerticalMenuItemFactory
|
|
621
|
+
}
|
|
622
|
+
}
|
|
623
|
+
} } };
|
|
624
|
+
|
|
625
|
+
//#endregion
|
|
626
|
+
//#region package.json
|
|
627
|
+
var name = "@univerjs/drawing-ui";
|
|
628
|
+
var version = "1.0.0-alpha.3";
|
|
629
|
+
|
|
630
|
+
//#endregion
|
|
631
|
+
//#region src/config/config.ts
|
|
632
|
+
const DRAWING_UI_PLUGIN_CONFIG_KEY = "drawing-ui.config";
|
|
633
|
+
const configSymbol = Symbol(DRAWING_UI_PLUGIN_CONFIG_KEY);
|
|
634
|
+
const defaultPluginConfig = {};
|
|
635
|
+
|
|
636
|
+
//#endregion
|
|
637
|
+
//#region src/views/image-popup-menu/component-name.ts
|
|
586
638
|
/**
|
|
587
639
|
* Copyright 2023-present DreamNum Co., Ltd.
|
|
588
640
|
*
|
|
@@ -598,714 +650,544 @@ function __decorate(decorators, target, key, desc) {
|
|
|
598
650
|
* See the License for the specific language governing permissions and
|
|
599
651
|
* limitations under the License.
|
|
600
652
|
*/
|
|
601
|
-
|
|
602
|
-
constructor(_componentManager, _iconManager) {
|
|
603
|
-
super();
|
|
604
|
-
this._componentManager = _componentManager;
|
|
605
|
-
this._iconManager = _iconManager;
|
|
606
|
-
this._registerComponents();
|
|
607
|
-
this._registerIcons();
|
|
608
|
-
}
|
|
609
|
-
_registerComponents() {
|
|
610
|
-
[[COMPONENT_IMAGE_POPUP_MENU, ImagePopupMenu]].forEach(([key, component]) => {
|
|
611
|
-
this.disposeWithMe(this._componentManager.register(key, component));
|
|
612
|
-
});
|
|
613
|
-
}
|
|
614
|
-
_registerIcons() {
|
|
615
|
-
this.disposeWithMe(this._iconManager.register({
|
|
616
|
-
BottomIcon: _univerjs_icons.BottomIcon,
|
|
617
|
-
GroupIcon: _univerjs_icons.GroupIcon,
|
|
618
|
-
MoveDownIcon: _univerjs_icons.MoveDownIcon,
|
|
619
|
-
MoveUpIcon: _univerjs_icons.MoveUpIcon,
|
|
620
|
-
TopmostIcon: _univerjs_icons.TopmostIcon,
|
|
621
|
-
UngroupIcon: _univerjs_icons.UngroupIcon
|
|
622
|
-
}));
|
|
623
|
-
}
|
|
624
|
-
};
|
|
625
|
-
ComponentsController = __decorate([__decorateParam(0, (0, _univerjs_core.Inject)(_univerjs_ui.ComponentManager)), __decorateParam(1, (0, _univerjs_core.Inject)(_univerjs_ui.IconManager))], ComponentsController);
|
|
626
|
-
|
|
627
|
-
//#endregion
|
|
628
|
-
//#region \0@oxc-project+runtime@0.137.0/helpers/esm/typeof.js
|
|
629
|
-
function _typeof(o) {
|
|
630
|
-
"@babel/helpers - typeof";
|
|
631
|
-
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o) {
|
|
632
|
-
return typeof o;
|
|
633
|
-
} : function(o) {
|
|
634
|
-
return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
|
|
635
|
-
}, _typeof(o);
|
|
636
|
-
}
|
|
637
|
-
|
|
638
|
-
//#endregion
|
|
639
|
-
//#region \0@oxc-project+runtime@0.137.0/helpers/esm/toPrimitive.js
|
|
640
|
-
function toPrimitive(t, r) {
|
|
641
|
-
if ("object" != _typeof(t) || !t) return t;
|
|
642
|
-
var e = t[Symbol.toPrimitive];
|
|
643
|
-
if (void 0 !== e) {
|
|
644
|
-
var i = e.call(t, r || "default");
|
|
645
|
-
if ("object" != _typeof(i)) return i;
|
|
646
|
-
throw new TypeError("@@toPrimitive must return a primitive value.");
|
|
647
|
-
}
|
|
648
|
-
return ("string" === r ? String : Number)(t);
|
|
649
|
-
}
|
|
653
|
+
const COMPONENT_IMAGE_POPUP_MENU = "COMPONENT_IMAGE_POPUP_MENU";
|
|
650
654
|
|
|
651
655
|
//#endregion
|
|
652
|
-
//#region
|
|
653
|
-
function
|
|
654
|
-
var
|
|
655
|
-
|
|
656
|
+
//#region src/views/image-popup-menu/ImagePopupMenu.tsx
|
|
657
|
+
function ImagePopupMenu(props) {
|
|
658
|
+
var _popup$extraProps, _popup$extraProps2, _popup$extraProps3;
|
|
659
|
+
const { popup } = props;
|
|
660
|
+
const menuItems = popup === null || popup === void 0 || (_popup$extraProps = popup.extraProps) === null || _popup$extraProps === void 0 ? void 0 : _popup$extraProps.menuItems;
|
|
661
|
+
if (!menuItems) return null;
|
|
662
|
+
if (((_popup$extraProps2 = popup.extraProps) === null || _popup$extraProps2 === void 0 ? void 0 : _popup$extraProps2.variant) === "doc-floating-toolbar" && popup.extraProps.unitId && popup.extraProps.subUnitId && popup.extraProps.drawingId) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DocImageFloatingToolbar, {
|
|
663
|
+
menuItems,
|
|
664
|
+
unitId: popup.extraProps.unitId,
|
|
665
|
+
subUnitId: popup.extraProps.subUnitId,
|
|
666
|
+
drawingId: popup.extraProps.drawingId
|
|
667
|
+
});
|
|
668
|
+
if (((_popup$extraProps3 = popup.extraProps) === null || _popup$extraProps3 === void 0 ? void 0 : _popup$extraProps3.variant) === "doc-chart-floating-toolbar") return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DocChartFloatingToolbar, { menuItems });
|
|
669
|
+
const commandService = (0, _univerjs_ui.useDependency)(_univerjs_core.ICommandService);
|
|
670
|
+
const localeService = (0, _univerjs_ui.useDependency)(_univerjs_core.LocaleService);
|
|
671
|
+
const [visible, setVisible] = (0, react.useState)(false);
|
|
672
|
+
const [isHovered, setHovered] = (0, react.useState)(false);
|
|
673
|
+
const handleMouseEnter = () => {
|
|
674
|
+
setHovered(true);
|
|
675
|
+
};
|
|
676
|
+
const handleMouseLeave = () => {
|
|
677
|
+
setHovered(false);
|
|
678
|
+
};
|
|
679
|
+
const onVisibleChange = (visible) => {
|
|
680
|
+
setVisible(visible);
|
|
681
|
+
};
|
|
682
|
+
const handleClick = (item) => {
|
|
683
|
+
commandService.executeCommand(item.commandId, item.commandParams);
|
|
684
|
+
setVisible(false);
|
|
685
|
+
};
|
|
686
|
+
const showMore = visible || isHovered;
|
|
687
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
688
|
+
onMouseEnter: handleMouseEnter,
|
|
689
|
+
onMouseLeave: handleMouseLeave,
|
|
690
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_design.DropdownMenu, {
|
|
691
|
+
align: "start",
|
|
692
|
+
items: menuItems.map((item) => ({
|
|
693
|
+
type: "item",
|
|
694
|
+
children: localeService.t(item.label),
|
|
695
|
+
disabled: item.disable,
|
|
696
|
+
onSelect: () => handleClick(item)
|
|
697
|
+
})),
|
|
698
|
+
open: visible,
|
|
699
|
+
onOpenChange: onVisibleChange,
|
|
700
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
701
|
+
className: (0, _univerjs_design.clsx)("univer-flex univer-items-center univer-gap-2 univer-rounded univer-p-1 hover:univer-bg-gray-100 dark:hover:!univer-bg-gray-800", _univerjs_design.borderClassName, {
|
|
702
|
+
"univer-bg-gray-100 dark:!univer-bg-gray-800": visible,
|
|
703
|
+
"univer-bg-white dark:!univer-bg-gray-900": !visible
|
|
704
|
+
}),
|
|
705
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_icons.AutofillDoubleIcon, { className: "univer-fill-primary-600 univer-text-gray-900 dark:!univer-text-white" }), showMore && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_icons.MoreDownIcon, { className: "dark:!univer-text-white" })]
|
|
706
|
+
})
|
|
707
|
+
})
|
|
708
|
+
});
|
|
656
709
|
}
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
}) : e[r] = t, e;
|
|
710
|
+
const UPDATE_DOC_DRAWING_WRAPPING_STYLE_COMMAND_ID = "doc.command.update-doc-drawing-wrapping-style";
|
|
711
|
+
function getWrappingStyle(documentDataModel, drawingId) {
|
|
712
|
+
var _documentDataModel$ge;
|
|
713
|
+
const drawing = documentDataModel === null || documentDataModel === void 0 || (_documentDataModel$ge = documentDataModel.getSnapshot().drawings) === null || _documentDataModel$ge === void 0 ? void 0 : _documentDataModel$ge[drawingId];
|
|
714
|
+
if (!drawing) return "inline";
|
|
715
|
+
if (drawing.layoutType === _univerjs_core.PositionedObjectLayoutType.WRAP_NONE) return drawing.behindDoc === _univerjs_core.BooleanNumber.TRUE ? "behindText" : "inFrontOfText";
|
|
716
|
+
if (drawing.layoutType === _univerjs_core.PositionedObjectLayoutType.WRAP_SQUARE) return "wrapSquare";
|
|
717
|
+
if (drawing.layoutType === _univerjs_core.PositionedObjectLayoutType.WRAP_TOP_AND_BOTTOM) return "wrapTopAndBottom";
|
|
718
|
+
return "inline";
|
|
667
719
|
}
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
* Bridge service that enables shape-based image clipping.
|
|
674
|
-
* This service lives in the open-source drawing-ui package and delegates
|
|
675
|
-
* to a registered clip implementation (provided by pro engine-shape package).
|
|
676
|
-
*
|
|
677
|
-
* When no delegate is registered, applyShapeClip returns false and images render normally without shape clipping.
|
|
678
|
-
*/
|
|
679
|
-
var DrawingImageClipService = class extends _univerjs_core.Disposable {
|
|
680
|
-
constructor() {
|
|
681
|
-
super();
|
|
682
|
-
_defineProperty(this, "_clipDelegate", null);
|
|
683
|
-
_defineProperty(this, "_canUseShapeClip$", new rxjs.BehaviorSubject(false));
|
|
684
|
-
_defineProperty(this, "canUseShapeClip$", this._canUseShapeClip$.asObservable());
|
|
685
|
-
}
|
|
686
|
-
setCanUseShapeClip(canUse) {
|
|
687
|
-
this._canUseShapeClip$.next(canUse);
|
|
688
|
-
}
|
|
689
|
-
/**
|
|
690
|
-
* Register a clip delegate that knows how to build shape clip paths.
|
|
691
|
-
* Typically called by the pro-side plugin with a ShapeModel-based implementation.
|
|
692
|
-
* @returns IDisposable to unregister the delegate
|
|
693
|
-
*/
|
|
694
|
-
registerClipDelegate(delegate) {
|
|
695
|
-
this._clipDelegate = delegate;
|
|
696
|
-
return (0, _univerjs_core.toDisposable)(() => {
|
|
697
|
-
if (this._clipDelegate === delegate) this._clipDelegate = null;
|
|
698
|
-
});
|
|
699
|
-
}
|
|
700
|
-
applyShapeClip(ctx, prstGeom, width, height, adjustValues) {
|
|
701
|
-
if (this._clipDelegate) return this._clipDelegate(ctx, prstGeom, width, height, adjustValues);
|
|
702
|
-
return false;
|
|
703
|
-
}
|
|
704
|
-
dispose() {
|
|
705
|
-
this._clipDelegate = null;
|
|
706
|
-
this._canUseShapeClip$.complete();
|
|
707
|
-
super.dispose();
|
|
708
|
-
}
|
|
709
|
-
};
|
|
710
|
-
|
|
711
|
-
//#endregion
|
|
712
|
-
//#region src/services/drawing-render.service.ts
|
|
713
|
-
const DOC_DRAWING_BEHIND_TEXT_LAYER_INDEX = 1;
|
|
714
|
-
function getDrawingRenderLayerIndex(param) {
|
|
715
|
-
return param.behindText === true || param.behindText === _univerjs_core.BooleanNumber.TRUE ? 1 : _univerjs_engine_render.DRAWING_OBJECT_LAYER_INDEX;
|
|
720
|
+
function ToolbarGroup(props) {
|
|
721
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
722
|
+
className: "univer-flex univer-h-7 univer-items-center univer-gap-1 univer-px-1",
|
|
723
|
+
children: props.children
|
|
724
|
+
});
|
|
716
725
|
}
|
|
717
|
-
function
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
726
|
+
function ToolbarButton(props) {
|
|
727
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_design.Tooltip, {
|
|
728
|
+
title: (0, _univerjs_ui.useDependency)(_univerjs_core.LocaleService).t(props.titleKey),
|
|
729
|
+
placement: "bottom",
|
|
730
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
731
|
+
type: "button",
|
|
732
|
+
disabled: props.disabled,
|
|
733
|
+
onClick: props.onClick,
|
|
734
|
+
className: (0, _univerjs_design.clsx)("univer-flex univer-h-6 univer-w-6 univer-items-center univer-justify-center univer-rounded-md univer-border-none univer-bg-transparent univer-p-0 univer-text-sm univer-text-gray-700 univer-transition-colors hover:univer-bg-gray-100 disabled:univer-cursor-not-allowed disabled:univer-opacity-40 dark:!univer-text-gray-100 dark:hover:!univer-bg-gray-700", { "univer-bg-gray-100 univer-text-primary-600 dark:!univer-bg-gray-700 dark:!univer-text-primary-300": props.active }),
|
|
735
|
+
children: props.children
|
|
736
|
+
})
|
|
737
|
+
});
|
|
722
738
|
}
|
|
723
|
-
function
|
|
724
|
-
|
|
739
|
+
function ToolbarDropdownButton(props) {
|
|
740
|
+
var _props$options$find;
|
|
741
|
+
const [open, setOpen] = (0, react.useState)(false);
|
|
742
|
+
const activeOption = (_props$options$find = props.options.find((option) => option.value === props.value)) !== null && _props$options$find !== void 0 ? _props$options$find : props.options[0];
|
|
743
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_design.Dropdown, {
|
|
744
|
+
open,
|
|
745
|
+
onOpenChange: setOpen,
|
|
746
|
+
overlay: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
747
|
+
className: "univer-min-w-32 univer-rounded-lg univer-border univer-border-solid univer-border-gray-200 univer-bg-white univer-p-1 univer-shadow-lg dark:!univer-border-gray-700 dark:!univer-bg-gray-900",
|
|
748
|
+
children: props.options.map((option) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
749
|
+
type: "button",
|
|
750
|
+
onClick: () => {
|
|
751
|
+
props.onChange(option.value);
|
|
752
|
+
setOpen(false);
|
|
753
|
+
},
|
|
754
|
+
className: (0, _univerjs_design.clsx)("univer-flex univer-h-8 univer-w-full univer-items-center univer-gap-2 univer-rounded-md univer-border-none univer-bg-transparent univer-px-2 univer-text-left univer-text-sm univer-text-gray-700 univer-transition-colors hover:univer-bg-gray-100 dark:!univer-text-gray-100 dark:hover:!univer-bg-gray-800", { "univer-bg-primary-50 univer-text-primary-600 dark:!univer-bg-gray-800 dark:!univer-text-primary-300": option.value === props.value }),
|
|
755
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
756
|
+
className: "univer-flex univer-size-4 univer-items-center univer-justify-center",
|
|
757
|
+
children: option.icon
|
|
758
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
759
|
+
className: "univer-flex-1",
|
|
760
|
+
children: option.label
|
|
761
|
+
})]
|
|
762
|
+
}, option.value))
|
|
763
|
+
}),
|
|
764
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_design.Tooltip, {
|
|
765
|
+
title: props.title,
|
|
766
|
+
placement: "bottom",
|
|
767
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
768
|
+
type: "button",
|
|
769
|
+
className: (0, _univerjs_design.clsx)("univer-flex univer-h-6 univer-min-w-9 univer-items-center univer-justify-center univer-gap-1 univer-rounded-md univer-border-none univer-bg-transparent univer-px-1.5 univer-text-sm univer-text-gray-700 univer-transition-colors hover:univer-bg-gray-100 dark:!univer-text-gray-100 dark:hover:!univer-bg-gray-700", { "univer-bg-gray-100 univer-text-primary-600 dark:!univer-bg-gray-700 dark:!univer-text-primary-300": open }),
|
|
770
|
+
children: [activeOption.icon, /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_icons.MoreDownIcon, { className: "univer-text-xs" })]
|
|
771
|
+
})
|
|
772
|
+
}) })
|
|
773
|
+
});
|
|
725
774
|
}
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
flipY,
|
|
763
|
-
skewX,
|
|
764
|
-
skewY
|
|
765
|
-
});
|
|
766
|
-
(_setClipBounds = imageShape.setClipBounds) === null || _setClipBounds === void 0 || _setClipBounds.call(imageShape, transform.clipBounds);
|
|
767
|
-
if ("hidden" in imageParam) hidden ? imageShape.hide() : imageShape.show();
|
|
768
|
-
ensureDrawingRenderLayer(scene, imageShape, imageParam);
|
|
769
|
-
continue;
|
|
770
|
-
}
|
|
771
|
-
const orders = this._drawingManagerService.getDrawingOrder(unitId, subUnitId);
|
|
772
|
-
const zIndex = orders.indexOf(drawingId);
|
|
773
|
-
const imageConfig = {
|
|
774
|
-
...transform,
|
|
775
|
-
zIndex: zIndex === -1 ? orders.length - 1 : zIndex
|
|
776
|
-
};
|
|
777
|
-
const imageNativeCache = this._imageIoService.getImageSourceCache(source, imageSourceType);
|
|
778
|
-
let shouldBeCache = false;
|
|
779
|
-
if (isRenderableImageCache(imageNativeCache)) imageConfig.image = imageNativeCache;
|
|
780
|
-
else if (imageSourceType === _univerjs_drawing.ImageSourceType.UUID) try {
|
|
781
|
-
imageConfig.url = await this._imageIoService.getImage(source);
|
|
782
|
-
} catch (error) {
|
|
783
|
-
console.error(error);
|
|
784
|
-
continue;
|
|
785
|
-
}
|
|
786
|
-
else if (imageSourceType === _univerjs_drawing.ImageSourceType.URL) {
|
|
787
|
-
try {
|
|
788
|
-
imageConfig.url = await this._urlImageService.getImage(source);
|
|
789
|
-
} catch (error) {
|
|
790
|
-
console.error(error);
|
|
791
|
-
imageConfig.url = source;
|
|
792
|
-
}
|
|
793
|
-
shouldBeCache = true;
|
|
794
|
-
} else {
|
|
795
|
-
imageConfig.url = source;
|
|
796
|
-
shouldBeCache = true;
|
|
797
|
-
}
|
|
798
|
-
const shouldWaitForInlineTransform = docxHeaderFooterDrawing === true && layoutType === _univerjs_core.PositionedObjectLayoutType.INLINE;
|
|
799
|
-
if (hidden || shouldWaitForInlineTransform) imageConfig.visible = false;
|
|
800
|
-
if (scene.getObject(imageShapeKey)) continue;
|
|
801
|
-
imageConfig.printable = true;
|
|
802
|
-
const image = new _univerjs_engine_render.Image(imageShapeKey, imageConfig);
|
|
803
|
-
image.setClipService(this._drawingImageClipService);
|
|
804
|
-
if (shouldBeCache) this._imageIoService.addImageSourceCache(source, imageSourceType, image.getNative());
|
|
805
|
-
scene.addObject(image, getDrawingRenderLayerIndex(imageParam));
|
|
806
|
-
if (this._drawingManagerService.getDrawingEditable()) scene.attachTransformerTo(image);
|
|
807
|
-
groupId && insertGroupObject({
|
|
808
|
-
drawingId: groupId,
|
|
809
|
-
unitId,
|
|
810
|
-
subUnitId
|
|
811
|
-
}, image, scene, this._drawingManagerService);
|
|
812
|
-
if (prstGeom != null) image.setPrstGeom(prstGeom);
|
|
813
|
-
if (adjustValues != null) image.setPrstGeomAdjValues(adjustValues);
|
|
814
|
-
if (srcRect != null) image.setSrcRect(srcRect);
|
|
815
|
-
images.push(image);
|
|
816
|
-
}
|
|
817
|
-
return images;
|
|
818
|
-
}
|
|
819
|
-
_getActiveSheetId() {
|
|
820
|
-
var _this$_univerInstance;
|
|
821
|
-
return (_this$_univerInstance = this._univerInstanceService.getCurrentUnitOfType(_univerjs_core.UniverInstanceType.UNIVER_SHEET)) === null || _this$_univerInstance === void 0 || (_this$_univerInstance = _this$_univerInstance.getActiveSheet()) === null || _this$_univerInstance === void 0 ? void 0 : _this$_univerInstance.getSheetId();
|
|
822
|
-
}
|
|
823
|
-
renderFloatDom(param, scene) {
|
|
824
|
-
const { transform: singleTransform, drawingType, groupId, unitId, subUnitId, drawingId, isMultiTransform, transforms: multiTransforms } = param;
|
|
825
|
-
if (drawingType !== _univerjs_core.DrawingTypeEnum.DRAWING_DOM) return;
|
|
826
|
-
if (!this._drawingManagerService.getDrawingVisible()) return;
|
|
827
|
-
if (singleTransform == null) return;
|
|
828
|
-
const transforms = isMultiTransform && multiTransforms ? multiTransforms : [singleTransform];
|
|
829
|
-
const rects = [];
|
|
830
|
-
for (const transform of transforms) {
|
|
831
|
-
const { left, top, width, height, angle, flipX, flipY, skewX, skewY } = transform;
|
|
832
|
-
const index = transforms.indexOf(transform);
|
|
833
|
-
const imageShapeKey = (0, _univerjs_drawing.getDrawingShapeKeyByDrawingSearch)({
|
|
834
|
-
unitId,
|
|
835
|
-
subUnitId,
|
|
836
|
-
drawingId
|
|
837
|
-
}, isMultiTransform ? index : void 0);
|
|
838
|
-
const imageShape = scene.getObject(imageShapeKey);
|
|
839
|
-
if (imageShape != null) {
|
|
840
|
-
imageShape.transformByState({
|
|
841
|
-
left,
|
|
842
|
-
top,
|
|
843
|
-
width,
|
|
844
|
-
height,
|
|
845
|
-
angle,
|
|
846
|
-
flipX,
|
|
847
|
-
flipY,
|
|
848
|
-
skewX,
|
|
849
|
-
skewY
|
|
850
|
-
});
|
|
851
|
-
continue;
|
|
852
|
-
}
|
|
853
|
-
const orders = this._drawingManagerService.getDrawingOrder(unitId, subUnitId);
|
|
854
|
-
const zIndex = orders.indexOf(drawingId);
|
|
855
|
-
const rectConfig = {
|
|
856
|
-
...transform,
|
|
857
|
-
zIndex: zIndex === -1 ? orders.length - 1 : zIndex
|
|
858
|
-
};
|
|
859
|
-
if (scene.getObject(imageShapeKey)) continue;
|
|
860
|
-
rectConfig.printable = false;
|
|
861
|
-
const rect = new _univerjs_engine_render.Rect(imageShapeKey, rectConfig);
|
|
862
|
-
if (!this._drawingManagerService.getDrawingVisible()) continue;
|
|
863
|
-
scene.addObject(rect, _univerjs_engine_render.DRAWING_OBJECT_LAYER_INDEX);
|
|
864
|
-
if (this._drawingManagerService.getDrawingEditable() && param.allowTransform !== false) scene.attachTransformerTo(rect);
|
|
865
|
-
groupId && insertGroupObject({
|
|
866
|
-
drawingId: groupId,
|
|
867
|
-
unitId,
|
|
868
|
-
subUnitId
|
|
869
|
-
}, rect, scene, this._drawingManagerService);
|
|
870
|
-
rects.push(rect);
|
|
871
|
-
}
|
|
872
|
-
return rects;
|
|
873
|
-
}
|
|
874
|
-
renderDrawing(param, scene) {
|
|
875
|
-
const drawingParam = this._drawingManagerService.getDrawingByParam(param);
|
|
876
|
-
if (drawingParam == null) return;
|
|
877
|
-
switch (drawingParam.drawingType) {
|
|
878
|
-
case _univerjs_core.DrawingTypeEnum.DRAWING_IMAGE: return this.renderImages(drawingParam, scene);
|
|
879
|
-
default:
|
|
775
|
+
function DocImageFloatingToolbar(props) {
|
|
776
|
+
var _univerInstanceServic, _wrappingStyleOptions, _wrappingStyleOptions2, _editItem$label, _cropItem$label, _deleteItem$label;
|
|
777
|
+
const commandService = (0, _univerjs_ui.useDependency)(_univerjs_core.ICommandService);
|
|
778
|
+
const localeService = (0, _univerjs_ui.useDependency)(_univerjs_core.LocaleService);
|
|
779
|
+
const documentDataModel = (_univerInstanceServic = (0, _univerjs_ui.useDependency)(_univerjs_core.IUniverInstanceService).getUnit(props.unitId, _univerjs_core.UniverInstanceType.UNIVER_DOC)) !== null && _univerInstanceServic !== void 0 ? _univerInstanceServic : void 0;
|
|
780
|
+
const [wrappingStyle, setWrappingStyle] = (0, react.useState)(() => getWrappingStyle(documentDataModel, props.drawingId));
|
|
781
|
+
const [hidden, setHidden] = (0, react.useState)(false);
|
|
782
|
+
const getMenuItem = (label) => props.menuItems.find((item) => item.label === label);
|
|
783
|
+
const editItem = getMenuItem("drawing-ui.image-popup.edit");
|
|
784
|
+
const cropItem = getMenuItem("drawing-ui.image-popup.crop");
|
|
785
|
+
const deleteItem = getMenuItem("drawing-ui.image-popup.delete");
|
|
786
|
+
const wrappingStyleOptions = [
|
|
787
|
+
{
|
|
788
|
+
label: localeService.t("drawing-ui.image-text-wrap.inline"),
|
|
789
|
+
value: "inline",
|
|
790
|
+
icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_icons.TextWrapShapeIcon, {})
|
|
791
|
+
},
|
|
792
|
+
{
|
|
793
|
+
label: localeService.t("drawing-ui.image-text-wrap.square"),
|
|
794
|
+
value: "wrapSquare",
|
|
795
|
+
icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_icons.TextWrapShapeIcon, {})
|
|
796
|
+
},
|
|
797
|
+
{
|
|
798
|
+
label: localeService.t("drawing-ui.image-text-wrap.topAndBottom"),
|
|
799
|
+
value: "wrapTopAndBottom",
|
|
800
|
+
icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_icons.TextWrapShapeIcon, {})
|
|
801
|
+
},
|
|
802
|
+
{
|
|
803
|
+
label: localeService.t("drawing-ui.image-text-wrap.behindText"),
|
|
804
|
+
value: "behindText",
|
|
805
|
+
icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_icons.TextWrapShapeIcon, {})
|
|
806
|
+
},
|
|
807
|
+
{
|
|
808
|
+
label: localeService.t("drawing-ui.image-text-wrap.inFrontText"),
|
|
809
|
+
value: "inFrontOfText",
|
|
810
|
+
icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_icons.TextWrapShapeIcon, {})
|
|
880
811
|
}
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
812
|
+
];
|
|
813
|
+
const executeMenuItem = (item) => {
|
|
814
|
+
if (!item || item.disable) return;
|
|
815
|
+
commandService.executeCommand(item.commandId, item.commandParams);
|
|
816
|
+
};
|
|
817
|
+
const updateWrappingStyle = (value) => {
|
|
818
|
+
setWrappingStyle(value);
|
|
819
|
+
commandService.executeCommand(UPDATE_DOC_DRAWING_WRAPPING_STYLE_COMMAND_ID, {
|
|
820
|
+
unitId: props.unitId,
|
|
821
|
+
subUnitId: props.subUnitId,
|
|
822
|
+
drawings: [{
|
|
823
|
+
unitId: props.unitId,
|
|
824
|
+
subUnitId: props.subUnitId,
|
|
825
|
+
drawingId: props.drawingId
|
|
826
|
+
}],
|
|
827
|
+
wrappingStyle: value
|
|
888
828
|
});
|
|
889
|
-
}
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
829
|
+
};
|
|
830
|
+
if (hidden) return null;
|
|
831
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
832
|
+
"data-u-comp": "doc-image-floating-toolbar",
|
|
833
|
+
onMouseDown: (event) => {
|
|
834
|
+
event.stopPropagation();
|
|
835
|
+
event.preventDefault();
|
|
836
|
+
},
|
|
837
|
+
className: (0, _univerjs_design.clsx)("univer-box-border univer-flex univer-items-center univer-rounded univer-bg-white univer-px-1 univer-py-1 univer-shadow-sm dark:!univer-border-gray-700 dark:!univer-bg-gray-900", _univerjs_design.borderClassName),
|
|
838
|
+
children: [
|
|
839
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(ToolbarGroup, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ToolbarDropdownButton, {
|
|
840
|
+
title: (_wrappingStyleOptions = (_wrappingStyleOptions2 = wrappingStyleOptions.find((option) => option.value === wrappingStyle)) === null || _wrappingStyleOptions2 === void 0 ? void 0 : _wrappingStyleOptions2.label) !== null && _wrappingStyleOptions !== void 0 ? _wrappingStyleOptions : localeService.t("drawing-ui.image-text-wrap.inline"),
|
|
841
|
+
value: wrappingStyle,
|
|
842
|
+
options: wrappingStyleOptions,
|
|
843
|
+
onChange: updateWrappingStyle
|
|
844
|
+
}) }),
|
|
845
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_design.Separator, { orientation: "vertical" }),
|
|
846
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(ToolbarGroup, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(ToolbarButton, {
|
|
847
|
+
titleKey: (_editItem$label = editItem === null || editItem === void 0 ? void 0 : editItem.label) !== null && _editItem$label !== void 0 ? _editItem$label : "drawing-ui.image-popup.edit",
|
|
848
|
+
disabled: !editItem || editItem.disable,
|
|
849
|
+
onClick: () => {
|
|
850
|
+
setHidden(true);
|
|
851
|
+
executeMenuItem(editItem);
|
|
852
|
+
},
|
|
853
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_icons.DocSettingIcon, {})
|
|
854
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ToolbarButton, {
|
|
855
|
+
titleKey: (_cropItem$label = cropItem === null || cropItem === void 0 ? void 0 : cropItem.label) !== null && _cropItem$label !== void 0 ? _cropItem$label : "drawing-ui.image-popup.crop",
|
|
856
|
+
disabled: !cropItem || cropItem.disable,
|
|
857
|
+
onClick: () => executeMenuItem(cropItem),
|
|
858
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_icons.CropIcon, {})
|
|
859
|
+
})] }),
|
|
860
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_design.Separator, { orientation: "vertical" }),
|
|
861
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(ToolbarGroup, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ToolbarButton, {
|
|
862
|
+
titleKey: (_deleteItem$label = deleteItem === null || deleteItem === void 0 ? void 0 : deleteItem.label) !== null && _deleteItem$label !== void 0 ? _deleteItem$label : "drawing-ui.image-popup.delete",
|
|
863
|
+
disabled: !deleteItem || deleteItem.disable,
|
|
864
|
+
onClick: () => executeMenuItem(deleteItem),
|
|
865
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_icons.DeleteIcon, {})
|
|
866
|
+
}) })
|
|
867
|
+
]
|
|
868
|
+
});
|
|
869
|
+
}
|
|
870
|
+
function DocChartFloatingToolbar(props) {
|
|
871
|
+
var _chartTypeItem$option, _ref, _chartTypeItem$value, _chartTypeOptions$;
|
|
872
|
+
const commandService = (0, _univerjs_ui.useDependency)(_univerjs_core.ICommandService);
|
|
873
|
+
const localeService = (0, _univerjs_ui.useDependency)(_univerjs_core.LocaleService);
|
|
874
|
+
const chartTypeItem = props.menuItems.find((item) => item.type === "select");
|
|
875
|
+
const editItem = props.menuItems.find((item) => item.icon === "edit");
|
|
876
|
+
const deleteItem = props.menuItems.find((item) => item.icon === "delete");
|
|
877
|
+
const chartTypeOptions = ((_chartTypeItem$option = chartTypeItem === null || chartTypeItem === void 0 ? void 0 : chartTypeItem.options) !== null && _chartTypeItem$option !== void 0 ? _chartTypeItem$option : []).map((option) => ({
|
|
878
|
+
label: String(option.label),
|
|
879
|
+
value: option.value,
|
|
880
|
+
icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_icons.ChartIcon, {})
|
|
881
|
+
}));
|
|
882
|
+
const executeMenuItem = (item) => {
|
|
883
|
+
if (!item || item.disable) return;
|
|
884
|
+
commandService.executeCommand(item.commandId, item.commandParams);
|
|
885
|
+
};
|
|
886
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
887
|
+
"data-u-comp": "doc-chart-floating-toolbar",
|
|
888
|
+
onMouseDown: (event) => {
|
|
889
|
+
event.stopPropagation();
|
|
890
|
+
event.preventDefault();
|
|
891
|
+
},
|
|
892
|
+
className: (0, _univerjs_design.clsx)("univer-box-border univer-flex univer-items-center univer-rounded univer-bg-white univer-px-1 univer-py-1 univer-shadow-sm dark:!univer-border-gray-700 dark:!univer-bg-gray-900", _univerjs_design.borderClassName),
|
|
893
|
+
children: [chartTypeItem && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(ToolbarGroup, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ToolbarDropdownButton, {
|
|
894
|
+
title: localeService.t(chartTypeItem.label),
|
|
895
|
+
value: (_ref = (_chartTypeItem$value = chartTypeItem.value) !== null && _chartTypeItem$value !== void 0 ? _chartTypeItem$value : (_chartTypeOptions$ = chartTypeOptions[0]) === null || _chartTypeOptions$ === void 0 ? void 0 : _chartTypeOptions$.value) !== null && _ref !== void 0 ? _ref : "",
|
|
896
|
+
options: chartTypeOptions,
|
|
897
|
+
onChange: (value) => {
|
|
898
|
+
if (!chartTypeItem.disable) {
|
|
899
|
+
var _chartTypeItem$comman;
|
|
900
|
+
commandService.executeCommand(chartTypeItem.commandId, (_chartTypeItem$comman = chartTypeItem.commandParamsFactory) === null || _chartTypeItem$comman === void 0 ? void 0 : _chartTypeItem$comman.call(chartTypeItem, value));
|
|
901
|
+
}
|
|
902
|
+
}
|
|
903
|
+
}) }), (editItem || deleteItem) && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_design.Separator, { orientation: "vertical" })] }), (editItem || deleteItem) && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(ToolbarGroup, { children: [editItem && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ToolbarButton, {
|
|
904
|
+
titleKey: editItem.label,
|
|
905
|
+
disabled: editItem.disable,
|
|
906
|
+
onClick: () => executeMenuItem(editItem),
|
|
907
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_icons.DocSettingIcon, {})
|
|
908
|
+
}), deleteItem && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ToolbarButton, {
|
|
909
|
+
titleKey: deleteItem.label,
|
|
910
|
+
disabled: deleteItem.disable,
|
|
911
|
+
onClick: () => executeMenuItem(deleteItem),
|
|
912
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_icons.DeleteIcon, {})
|
|
913
|
+
})] })]
|
|
914
|
+
});
|
|
915
|
+
}
|
|
912
916
|
|
|
913
917
|
//#endregion
|
|
914
|
-
//#region
|
|
915
|
-
function
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
const searchParam = drawingManagerService.getDrawingOKey(oKey);
|
|
920
|
-
if (searchParam == null) {
|
|
921
|
-
params.push(null);
|
|
922
|
-
return true;
|
|
923
|
-
}
|
|
924
|
-
const { unitId, subUnitId, drawingId, drawingType } = searchParam;
|
|
925
|
-
const param = {
|
|
926
|
-
unitId,
|
|
927
|
-
subUnitId,
|
|
928
|
-
drawingId,
|
|
929
|
-
drawingType,
|
|
930
|
-
transform: {
|
|
931
|
-
left,
|
|
932
|
-
top,
|
|
933
|
-
height,
|
|
934
|
-
width,
|
|
935
|
-
angle
|
|
936
|
-
}
|
|
937
|
-
};
|
|
938
|
-
if (drawingType === _univerjs_core.DrawingTypeEnum.DRAWING_IMAGE) param.srcRect = object.srcRect;
|
|
939
|
-
params.push(param);
|
|
940
|
-
});
|
|
941
|
-
return params;
|
|
918
|
+
//#region \0@oxc-project+runtime@0.137.0/helpers/esm/decorateParam.js
|
|
919
|
+
function __decorateParam(paramIndex, decorator) {
|
|
920
|
+
return function(target, key) {
|
|
921
|
+
decorator(target, key, paramIndex);
|
|
922
|
+
};
|
|
942
923
|
}
|
|
943
924
|
|
|
944
925
|
//#endregion
|
|
945
|
-
//#region
|
|
946
|
-
function
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
const metadata = refreshParam;
|
|
952
|
-
if (!("hidden" in metadata) && !("behindText" in metadata)) return drawingParam;
|
|
953
|
-
return {
|
|
954
|
-
...drawingParam,
|
|
955
|
-
...metadata
|
|
956
|
-
};
|
|
926
|
+
//#region \0@oxc-project+runtime@0.137.0/helpers/esm/decorate.js
|
|
927
|
+
function __decorate(decorators, target, key, desc) {
|
|
928
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
929
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
930
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
931
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
957
932
|
}
|
|
958
|
-
|
|
959
|
-
|
|
933
|
+
|
|
934
|
+
//#endregion
|
|
935
|
+
//#region src/controllers/components.controller.ts
|
|
936
|
+
/**
|
|
937
|
+
* Copyright 2023-present DreamNum Co., Ltd.
|
|
938
|
+
*
|
|
939
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
940
|
+
* you may not use this file except in compliance with the License.
|
|
941
|
+
* You may obtain a copy of the License at
|
|
942
|
+
*
|
|
943
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
944
|
+
*
|
|
945
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
946
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
947
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
948
|
+
* See the License for the specific language governing permissions and
|
|
949
|
+
* limitations under the License.
|
|
950
|
+
*/
|
|
951
|
+
let ComponentsController = class ComponentsController extends _univerjs_core.Disposable {
|
|
952
|
+
constructor(_componentManager, _iconManager) {
|
|
960
953
|
super();
|
|
961
|
-
this.
|
|
962
|
-
this.
|
|
963
|
-
this.
|
|
964
|
-
this.
|
|
965
|
-
_defineProperty(this, "_sceneListenerOnDrawingMap", /* @__PURE__ */ new WeakSet());
|
|
966
|
-
this._initialize();
|
|
967
|
-
}
|
|
968
|
-
dispose() {
|
|
969
|
-
super.dispose();
|
|
970
|
-
}
|
|
971
|
-
_initialize() {
|
|
972
|
-
this._recoveryImages();
|
|
973
|
-
this._drawingAddListener();
|
|
974
|
-
this._drawingRemoveListener();
|
|
975
|
-
this._drawingUpdateListener();
|
|
976
|
-
this._commandExecutedListener();
|
|
977
|
-
this._drawingArrangeListener();
|
|
978
|
-
this._drawingGroupListener();
|
|
979
|
-
this._drawingRefreshListener();
|
|
980
|
-
this._drawingVisibleListener();
|
|
954
|
+
this._componentManager = _componentManager;
|
|
955
|
+
this._iconManager = _iconManager;
|
|
956
|
+
this._registerComponents();
|
|
957
|
+
this._registerIcons();
|
|
981
958
|
}
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
if (info == null) return;
|
|
986
|
-
const { unitId: currentUnitId, subUnitId: currentSubUnitId } = info;
|
|
987
|
-
Object.keys(drawingList).forEach((unitId) => {
|
|
988
|
-
Object.keys(drawingList[unitId]).forEach((subUnitId) => {
|
|
989
|
-
const drawingMap = drawingList[unitId][subUnitId].data;
|
|
990
|
-
if (drawingMap == null || unitId !== currentUnitId || subUnitId !== currentSubUnitId) return;
|
|
991
|
-
Object.keys(drawingMap).forEach((drawingId) => {
|
|
992
|
-
if (drawingMap[drawingId]) this._insertDrawing([{
|
|
993
|
-
unitId,
|
|
994
|
-
subUnitId,
|
|
995
|
-
drawingId
|
|
996
|
-
}]);
|
|
997
|
-
});
|
|
998
|
-
});
|
|
959
|
+
_registerComponents() {
|
|
960
|
+
[[COMPONENT_IMAGE_POPUP_MENU, ImagePopupMenu]].forEach(([key, component]) => {
|
|
961
|
+
this.disposeWithMe(this._componentManager.register(key, component));
|
|
999
962
|
});
|
|
1000
963
|
}
|
|
1001
|
-
|
|
1002
|
-
this.disposeWithMe(this.
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
964
|
+
_registerIcons() {
|
|
965
|
+
this.disposeWithMe(this._iconManager.register({
|
|
966
|
+
BottomIcon: _univerjs_icons.BottomIcon,
|
|
967
|
+
GroupIcon: _univerjs_icons.GroupIcon,
|
|
968
|
+
MoveDownIcon: _univerjs_icons.MoveDownIcon,
|
|
969
|
+
MoveUpIcon: _univerjs_icons.MoveUpIcon,
|
|
970
|
+
TopmostIcon: _univerjs_icons.TopmostIcon,
|
|
971
|
+
UngroupIcon: _univerjs_icons.UngroupIcon
|
|
1008
972
|
}));
|
|
1009
973
|
}
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
974
|
+
};
|
|
975
|
+
ComponentsController = __decorate([__decorateParam(0, (0, _univerjs_core.Inject)(_univerjs_ui.ComponentManager)), __decorateParam(1, (0, _univerjs_core.Inject)(_univerjs_ui.IconManager))], ComponentsController);
|
|
976
|
+
|
|
977
|
+
//#endregion
|
|
978
|
+
//#region \0@oxc-project+runtime@0.137.0/helpers/esm/typeof.js
|
|
979
|
+
function _typeof(o) {
|
|
980
|
+
"@babel/helpers - typeof";
|
|
981
|
+
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o) {
|
|
982
|
+
return typeof o;
|
|
983
|
+
} : function(o) {
|
|
984
|
+
return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
|
|
985
|
+
}, _typeof(o);
|
|
986
|
+
}
|
|
987
|
+
|
|
988
|
+
//#endregion
|
|
989
|
+
//#region \0@oxc-project+runtime@0.137.0/helpers/esm/toPrimitive.js
|
|
990
|
+
function toPrimitive(t, r) {
|
|
991
|
+
if ("object" != _typeof(t) || !t) return t;
|
|
992
|
+
var e = t[Symbol.toPrimitive];
|
|
993
|
+
if (void 0 !== e) {
|
|
994
|
+
var i = e.call(t, r || "default");
|
|
995
|
+
if ("object" != _typeof(i)) return i;
|
|
996
|
+
throw new TypeError("@@toPrimitive must return a primitive value.");
|
|
1017
997
|
}
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
998
|
+
return ("string" === r ? String : Number)(t);
|
|
999
|
+
}
|
|
1000
|
+
|
|
1001
|
+
//#endregion
|
|
1002
|
+
//#region \0@oxc-project+runtime@0.137.0/helpers/esm/toPropertyKey.js
|
|
1003
|
+
function toPropertyKey(t) {
|
|
1004
|
+
var i = toPrimitive(t, "string");
|
|
1005
|
+
return "symbol" == _typeof(i) ? i : i + "";
|
|
1006
|
+
}
|
|
1007
|
+
|
|
1008
|
+
//#endregion
|
|
1009
|
+
//#region \0@oxc-project+runtime@0.137.0/helpers/esm/defineProperty.js
|
|
1010
|
+
function _defineProperty(e, r, t) {
|
|
1011
|
+
return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
|
|
1012
|
+
value: t,
|
|
1013
|
+
enumerable: !0,
|
|
1014
|
+
configurable: !0,
|
|
1015
|
+
writable: !0
|
|
1016
|
+
}) : e[r] = t, e;
|
|
1017
|
+
}
|
|
1018
|
+
|
|
1019
|
+
//#endregion
|
|
1020
|
+
//#region src/services/drawing-image-clip.service.ts
|
|
1021
|
+
const IMAGE_CLIP_SHAPE_PICKER_COMPONENT = "sheet.image-clip.shape.picker.component";
|
|
1022
|
+
/**
|
|
1023
|
+
* Bridge service that enables shape-based image clipping.
|
|
1024
|
+
* This service lives in the open-source drawing-ui package and delegates
|
|
1025
|
+
* to a registered clip implementation (provided by pro engine-shape package).
|
|
1026
|
+
*
|
|
1027
|
+
* When no delegate is registered, applyShapeClip returns false and images render normally without shape clipping.
|
|
1028
|
+
*/
|
|
1029
|
+
var DrawingImageClipService = class extends _univerjs_core.Disposable {
|
|
1030
|
+
constructor() {
|
|
1031
|
+
super();
|
|
1032
|
+
_defineProperty(this, "_clipDelegate", null);
|
|
1033
|
+
_defineProperty(this, "_canUseShapeClip$", new rxjs.BehaviorSubject(false));
|
|
1034
|
+
_defineProperty(this, "canUseShapeClip$", this._canUseShapeClip$.asObservable());
|
|
1027
1035
|
}
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
this._groupDrawing(drawing);
|
|
1031
|
-
});
|
|
1036
|
+
setCanUseShapeClip(canUse) {
|
|
1037
|
+
this._canUseShapeClip$.next(canUse);
|
|
1032
1038
|
}
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
this.
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
const drawingShapeKey = (0, _univerjs_drawing.getDrawingShapeKeyByDrawingSearch)(drawing);
|
|
1043
|
-
const object = scene.getObjectIncludeInGroup(drawingShapeKey);
|
|
1044
|
-
if (object == null || objects.includes(object)) return;
|
|
1045
|
-
objects.push(object);
|
|
1046
|
-
const { transform } = drawing;
|
|
1047
|
-
if (transform == null) return;
|
|
1048
|
-
if (object.classType === _univerjs_engine_render.RENDER_CLASS_TYPE.GROUP) object.transformByState({
|
|
1049
|
-
left: transform.left,
|
|
1050
|
-
top: transform.top
|
|
1051
|
-
});
|
|
1052
|
-
else object.transformByState(transform);
|
|
1053
|
-
});
|
|
1054
|
-
if (objects.length === 0) return;
|
|
1055
|
-
const group = new _univerjs_engine_render.DrawingGroupObject((0, _univerjs_drawing.getDrawingShapeKeyByDrawingSearch)({
|
|
1056
|
-
unitId,
|
|
1057
|
-
subUnitId,
|
|
1058
|
-
drawingId
|
|
1059
|
-
}));
|
|
1060
|
-
scene.addObject(group, _univerjs_engine_render.DRAWING_OBJECT_LAYER_INDEX).attachTransformerTo(group);
|
|
1061
|
-
group.addObjects(...objects);
|
|
1062
|
-
if (parent.groupBaseBound) group.setBaseBound(parent.groupBaseBound);
|
|
1063
|
-
if (parent.groupId) {
|
|
1064
|
-
group.isInGroup = true;
|
|
1065
|
-
insertGroupObject({
|
|
1066
|
-
drawingId: parent.groupId,
|
|
1067
|
-
unitId,
|
|
1068
|
-
subUnitId
|
|
1069
|
-
}, group, scene, this._drawingManagerService);
|
|
1070
|
-
}
|
|
1071
|
-
parent.transform && group.transformByState({
|
|
1072
|
-
left: parent.transform.left,
|
|
1073
|
-
top: parent.transform.top,
|
|
1074
|
-
width: parent.transform.width,
|
|
1075
|
-
height: parent.transform.height,
|
|
1076
|
-
angle: parent.transform.angle
|
|
1039
|
+
/**
|
|
1040
|
+
* Register a clip delegate that knows how to build shape clip paths.
|
|
1041
|
+
* Typically called by the pro-side plugin with a ShapeModel-based implementation.
|
|
1042
|
+
* @returns IDisposable to unregister the delegate
|
|
1043
|
+
*/
|
|
1044
|
+
registerClipDelegate(delegate) {
|
|
1045
|
+
this._clipDelegate = delegate;
|
|
1046
|
+
return (0, _univerjs_core.toDisposable)(() => {
|
|
1047
|
+
if (this._clipDelegate === delegate) this._clipDelegate = null;
|
|
1077
1048
|
});
|
|
1078
|
-
transformer.clearSelectedObjects();
|
|
1079
|
-
transformer.setSelectedControl(group);
|
|
1080
1049
|
}
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
});
|
|
1050
|
+
applyShapeClip(ctx, prstGeom, width, height, adjustValues) {
|
|
1051
|
+
if (this._clipDelegate) return this._clipDelegate(ctx, prstGeom, width, height, adjustValues);
|
|
1052
|
+
return false;
|
|
1085
1053
|
}
|
|
1086
|
-
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
const { scene, transformer } = renderObject;
|
|
1091
|
-
children.forEach((drawing) => {
|
|
1092
|
-
const drawingKey = (0, _univerjs_drawing.getDrawingShapeKeyByDrawingSearch)(drawing);
|
|
1093
|
-
const object = scene.getObjectIncludeInGroup(drawingKey);
|
|
1094
|
-
if (object == null) return true;
|
|
1095
|
-
if (object == null) return;
|
|
1096
|
-
const { transform } = drawing;
|
|
1097
|
-
if (transform == null) return;
|
|
1098
|
-
if (object.classType === _univerjs_engine_render.RENDER_CLASS_TYPE.GROUP) object.transformByState({
|
|
1099
|
-
left: transform.left,
|
|
1100
|
-
top: transform.top
|
|
1101
|
-
});
|
|
1102
|
-
else object.transformByState(transform);
|
|
1103
|
-
});
|
|
1104
|
-
const groupKey = (0, _univerjs_drawing.getDrawingShapeKeyByDrawingSearch)(parent);
|
|
1105
|
-
const group = scene.getObject(groupKey);
|
|
1106
|
-
const { width, height } = group;
|
|
1107
|
-
group.getObjects().forEach((object) => {
|
|
1108
|
-
group.removeSelfObjectAndTransform(object.oKey, width, height);
|
|
1109
|
-
});
|
|
1110
|
-
group.dispose();
|
|
1111
|
-
transformer.clearSelectedObjects();
|
|
1054
|
+
dispose() {
|
|
1055
|
+
this._clipDelegate = null;
|
|
1056
|
+
this._canUseShapeClip$.complete();
|
|
1057
|
+
super.dispose();
|
|
1112
1058
|
}
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
|
|
1059
|
+
};
|
|
1060
|
+
|
|
1061
|
+
//#endregion
|
|
1062
|
+
//#region src/services/drawing-render.service.ts
|
|
1063
|
+
const DOC_DRAWING_BEHIND_TEXT_LAYER_INDEX = 1;
|
|
1064
|
+
function getDrawingRenderLayerIndex(param) {
|
|
1065
|
+
return param.behindText === true || param.behindText === _univerjs_core.BooleanNumber.TRUE || param.layoutType === _univerjs_core.PositionedObjectLayoutType.WRAP_NONE && param.behindDoc === _univerjs_core.BooleanNumber.TRUE ? 1 : _univerjs_engine_render.DRAWING_OBJECT_LAYER_INDEX;
|
|
1066
|
+
}
|
|
1067
|
+
function ensureDrawingRenderLayer(scene, object, param) {
|
|
1068
|
+
const layerIndex = getDrawingRenderLayerIndex(param);
|
|
1069
|
+
if (object.layer == null || object.layer.zIndex === layerIndex) return;
|
|
1070
|
+
scene.removeObject(object);
|
|
1071
|
+
scene.addObject(object, layerIndex);
|
|
1072
|
+
}
|
|
1073
|
+
function isRenderableImageCache(image) {
|
|
1074
|
+
return (image === null || image === void 0 ? void 0 : image.complete) === true && image.naturalWidth > 0 && image.naturalHeight > 0;
|
|
1075
|
+
}
|
|
1076
|
+
let DrawingRenderService = class DrawingRenderService {
|
|
1077
|
+
constructor(_drawingManagerService, _imageIoService, _galleryService, _urlImageService, _univerInstanceService, _drawingImageClipService) {
|
|
1078
|
+
this._drawingManagerService = _drawingManagerService;
|
|
1079
|
+
this._imageIoService = _imageIoService;
|
|
1080
|
+
this._galleryService = _galleryService;
|
|
1081
|
+
this._urlImageService = _urlImageService;
|
|
1082
|
+
this._univerInstanceService = _univerInstanceService;
|
|
1083
|
+
this._drawingImageClipService = _drawingImageClipService;
|
|
1084
|
+
}
|
|
1085
|
+
async renderImages(imageParam, scene, options) {
|
|
1086
|
+
const { transform: singleTransform, drawingType, source, imageSourceType, srcRect, prstGeom, groupId, unitId, subUnitId, drawingId, isMultiTransform, transforms: multiTransforms, adjustValues, hidden } = imageParam;
|
|
1087
|
+
const { docxHeaderFooterDrawing, layoutType } = imageParam;
|
|
1088
|
+
if (drawingType !== _univerjs_core.DrawingTypeEnum.DRAWING_IMAGE) return;
|
|
1089
|
+
if (!this._drawingManagerService.getDrawingVisible()) return;
|
|
1090
|
+
if (!(options === null || options === void 0 ? void 0 : options.allowInactiveSheet) && this._univerInstanceService.getUnitType(unitId) === _univerjs_core.UniverInstanceType.UNIVER_SHEET && subUnitId !== this._getActiveSheetId()) return;
|
|
1091
|
+
if (singleTransform == null) return;
|
|
1092
|
+
const transforms = isMultiTransform && multiTransforms ? multiTransforms : [singleTransform];
|
|
1093
|
+
const images = [];
|
|
1094
|
+
for (const transform of transforms) {
|
|
1095
|
+
const { left, top, width, height, angle, flipX, flipY, skewX, skewY } = transform;
|
|
1096
|
+
const index = transforms.indexOf(transform);
|
|
1097
|
+
const imageShapeKey = (0, _univerjs_drawing.getDrawingShapeKeyByDrawingSearch)({
|
|
1126
1098
|
unitId,
|
|
1127
1099
|
subUnitId,
|
|
1128
1100
|
drawingId
|
|
1129
|
-
});
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
}
|
|
1149
|
-
_applyAlignType(drawingTransformCaches, alignType, minLeft, minTop, maxRight, maxBottom, drawingCount) {
|
|
1150
|
-
const averageHorizon = Math.round((maxRight - minLeft) / drawingCount * 10) / 10;
|
|
1151
|
-
const averageVertical = Math.round((maxBottom - minTop) / drawingCount * 10) / 10;
|
|
1152
|
-
const updateParams = [];
|
|
1153
|
-
const renderObject = this._getSceneAndTransformerByDrawingSearch(drawingTransformCaches[0].unitId);
|
|
1154
|
-
if (renderObject == null) return;
|
|
1155
|
-
const { scene, transformer } = renderObject;
|
|
1156
|
-
drawingTransformCaches.forEach((drawingTransformCache, index) => {
|
|
1157
|
-
const { unitId, subUnitId, drawingId, transform, drawingType } = drawingTransformCache;
|
|
1158
|
-
const { left = 0, top = 0, width = 0, height = 0 } = transform;
|
|
1159
|
-
let newLeft = left;
|
|
1160
|
-
let newTop = top;
|
|
1161
|
-
switch (alignType) {
|
|
1162
|
-
case "1":
|
|
1163
|
-
newLeft = minLeft;
|
|
1164
|
-
break;
|
|
1165
|
-
case "2":
|
|
1166
|
-
newLeft = minLeft + (maxRight - minLeft) / 2 - width / 2;
|
|
1167
|
-
break;
|
|
1168
|
-
case "3":
|
|
1169
|
-
newLeft = maxRight - width;
|
|
1170
|
-
break;
|
|
1171
|
-
case "4":
|
|
1172
|
-
newTop = minTop;
|
|
1173
|
-
break;
|
|
1174
|
-
case "5":
|
|
1175
|
-
newTop = minTop + (maxBottom - minTop) / 2 - height / 2;
|
|
1176
|
-
break;
|
|
1177
|
-
case "6":
|
|
1178
|
-
newTop = maxBottom - height;
|
|
1179
|
-
break;
|
|
1180
|
-
case "7":
|
|
1181
|
-
newLeft = minLeft + averageHorizon * index;
|
|
1182
|
-
break;
|
|
1183
|
-
case "8":
|
|
1184
|
-
newTop = minTop + averageVertical * index;
|
|
1185
|
-
break;
|
|
1186
|
-
default: break;
|
|
1101
|
+
}, isMultiTransform ? index : void 0);
|
|
1102
|
+
const imageShape = scene.getObject(imageShapeKey);
|
|
1103
|
+
if (imageShape != null) {
|
|
1104
|
+
var _setClipBounds;
|
|
1105
|
+
imageShape.transformByState({
|
|
1106
|
+
left,
|
|
1107
|
+
top,
|
|
1108
|
+
width,
|
|
1109
|
+
height,
|
|
1110
|
+
angle,
|
|
1111
|
+
flipX,
|
|
1112
|
+
flipY,
|
|
1113
|
+
skewX,
|
|
1114
|
+
skewY
|
|
1115
|
+
});
|
|
1116
|
+
(_setClipBounds = imageShape.setClipBounds) === null || _setClipBounds === void 0 || _setClipBounds.call(imageShape, transform.clipBounds);
|
|
1117
|
+
if ("hidden" in imageParam) hidden ? imageShape.hide() : imageShape.show();
|
|
1118
|
+
ensureDrawingRenderLayer(scene, imageShape, imageParam);
|
|
1119
|
+
continue;
|
|
1187
1120
|
}
|
|
1188
|
-
|
|
1189
|
-
|
|
1190
|
-
|
|
1191
|
-
|
|
1192
|
-
|
|
1193
|
-
|
|
1194
|
-
|
|
1195
|
-
|
|
1121
|
+
const orders = this._drawingManagerService.getDrawingOrder(unitId, subUnitId);
|
|
1122
|
+
const zIndex = orders.indexOf(drawingId);
|
|
1123
|
+
const imageConfig = {
|
|
1124
|
+
...transform,
|
|
1125
|
+
zIndex: zIndex === -1 ? orders.length - 1 : zIndex
|
|
1126
|
+
};
|
|
1127
|
+
const imageNativeCache = this._imageIoService.getImageSourceCache(source, imageSourceType);
|
|
1128
|
+
let shouldBeCache = false;
|
|
1129
|
+
if (isRenderableImageCache(imageNativeCache)) imageConfig.image = imageNativeCache;
|
|
1130
|
+
else if (imageSourceType === _univerjs_core.ImageSourceType.UUID) try {
|
|
1131
|
+
imageConfig.url = await this._imageIoService.getImage(source);
|
|
1132
|
+
} catch (error) {
|
|
1133
|
+
console.error(error);
|
|
1134
|
+
continue;
|
|
1135
|
+
}
|
|
1136
|
+
else if (imageSourceType === _univerjs_core.ImageSourceType.URL) {
|
|
1137
|
+
try {
|
|
1138
|
+
imageConfig.url = await this._urlImageService.getImage(source);
|
|
1139
|
+
} catch (error) {
|
|
1140
|
+
console.error(error);
|
|
1141
|
+
imageConfig.url = source;
|
|
1196
1142
|
}
|
|
1197
|
-
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
}
|
|
1202
|
-
_sortDrawingTransform(drawingTransformCaches, alignType) {
|
|
1203
|
-
drawingTransformCaches.sort((a, b) => {
|
|
1204
|
-
const aTransform = a.transform;
|
|
1205
|
-
const bTransform = b.transform;
|
|
1206
|
-
const { left: aLeft = 0, top: aTop = 0, width: aWidth = 0, height: aHeight = 0 } = aTransform;
|
|
1207
|
-
const { left: bLeft = 0, top: bTop = 0, width: bWidth = 0, height: bHeight = 0 } = bTransform;
|
|
1208
|
-
switch (alignType) {
|
|
1209
|
-
case "1": return aLeft - bLeft;
|
|
1210
|
-
case "2": return aLeft + aWidth / 2 - (bLeft + bWidth / 2);
|
|
1211
|
-
case "3": return aLeft + aWidth - (bLeft + bWidth);
|
|
1212
|
-
case "4": return aTop - bTop;
|
|
1213
|
-
case "5": return aTop + aHeight / 2 - (bTop + bHeight / 2);
|
|
1214
|
-
case "6": return aTop + aHeight - (bTop + bHeight);
|
|
1215
|
-
case "7": return aLeft + aWidth / 2 - (bLeft + bWidth / 2);
|
|
1216
|
-
case "8": return aTop + aHeight / 2 - (bTop + bHeight / 2);
|
|
1217
|
-
default: return 0;
|
|
1143
|
+
shouldBeCache = true;
|
|
1144
|
+
} else {
|
|
1145
|
+
imageConfig.url = source;
|
|
1146
|
+
shouldBeCache = true;
|
|
1218
1147
|
}
|
|
1219
|
-
|
|
1148
|
+
const shouldWaitForInlineTransform = docxHeaderFooterDrawing === true && layoutType === _univerjs_core.PositionedObjectLayoutType.INLINE;
|
|
1149
|
+
if (hidden || shouldWaitForInlineTransform) imageConfig.visible = false;
|
|
1150
|
+
if (scene.getObject(imageShapeKey)) continue;
|
|
1151
|
+
imageConfig.printable = true;
|
|
1152
|
+
const image = new _univerjs_engine_render.Image(imageShapeKey, imageConfig);
|
|
1153
|
+
image.setClipService(this._drawingImageClipService);
|
|
1154
|
+
if (shouldBeCache) this._imageIoService.addImageSourceCache(source, imageSourceType, image.getNative());
|
|
1155
|
+
scene.addObject(image, getDrawingRenderLayerIndex(imageParam));
|
|
1156
|
+
if (this._drawingManagerService.getDrawingEditable()) scene.attachTransformerTo(image);
|
|
1157
|
+
groupId && insertGroupObject({
|
|
1158
|
+
drawingId: groupId,
|
|
1159
|
+
unitId,
|
|
1160
|
+
subUnitId
|
|
1161
|
+
}, image, scene, this._drawingManagerService);
|
|
1162
|
+
if (prstGeom != null) image.setPrstGeom(prstGeom);
|
|
1163
|
+
if (adjustValues != null) image.setPrstGeomAdjValues(adjustValues);
|
|
1164
|
+
if (srcRect != null) image.setSrcRect(srcRect);
|
|
1165
|
+
images.push(image);
|
|
1166
|
+
}
|
|
1167
|
+
return images;
|
|
1220
1168
|
}
|
|
1221
|
-
|
|
1222
|
-
|
|
1223
|
-
|
|
1224
|
-
}));
|
|
1169
|
+
_getActiveSheetId() {
|
|
1170
|
+
var _this$_univerInstance;
|
|
1171
|
+
return (_this$_univerInstance = this._univerInstanceService.getCurrentUnitOfType(_univerjs_core.UniverInstanceType.UNIVER_SHEET)) === null || _this$_univerInstance === void 0 || (_this$_univerInstance = _this$_univerInstance.getActiveSheet()) === null || _this$_univerInstance === void 0 ? void 0 : _this$_univerInstance.getSheetId();
|
|
1225
1172
|
}
|
|
1226
|
-
|
|
1227
|
-
const { unitId, subUnitId,
|
|
1228
|
-
|
|
1229
|
-
if (
|
|
1230
|
-
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
|
|
1237
|
-
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
});
|
|
1245
|
-
}
|
|
1246
|
-
_drawingAddListener() {
|
|
1247
|
-
this.disposeWithMe(this._drawingManagerService.add$.subscribe((params) => {
|
|
1248
|
-
this._insertDrawing(params);
|
|
1249
|
-
}));
|
|
1250
|
-
}
|
|
1251
|
-
_insertDrawing(params) {
|
|
1252
|
-
const sceneList = [];
|
|
1253
|
-
params.forEach((param) => {
|
|
1254
|
-
const { unitId } = param;
|
|
1255
|
-
if (this._drawingManagerService.getDrawingByParam(param) == null) return;
|
|
1256
|
-
const renderObject = this._getSceneAndTransformerByDrawingSearch(unitId);
|
|
1257
|
-
if (renderObject == null) return;
|
|
1258
|
-
const { scene } = renderObject;
|
|
1259
|
-
if (!sceneList.includes(scene)) sceneList.push(scene);
|
|
1260
|
-
});
|
|
1261
|
-
sceneList.forEach((scene) => {
|
|
1262
|
-
if (this._sceneListenerOnDrawingMap.has(scene)) return;
|
|
1263
|
-
this._addListenerOnDrawing(scene);
|
|
1264
|
-
this._sceneListenerOnDrawingMap.add(scene);
|
|
1265
|
-
});
|
|
1266
|
-
}
|
|
1267
|
-
_drawingRemoveListener() {
|
|
1268
|
-
this.disposeWithMe(this._drawingManagerService.remove$.subscribe((params) => {
|
|
1269
|
-
params.forEach((param) => {
|
|
1270
|
-
const { unitId, subUnitId, drawingId } = param;
|
|
1271
|
-
const renderObject = this._getSceneAndTransformerByDrawingSearch(unitId);
|
|
1272
|
-
if (renderObject == null) return;
|
|
1273
|
-
const { scene } = renderObject;
|
|
1274
|
-
const drawingShapeKey = (0, _univerjs_drawing.getDrawingShapeKeyByDrawingSearch)({
|
|
1275
|
-
unitId,
|
|
1276
|
-
subUnitId,
|
|
1277
|
-
drawingId
|
|
1278
|
-
});
|
|
1279
|
-
const drawingShapes = scene.fuzzyMathObjects(drawingShapeKey, true);
|
|
1280
|
-
if (drawingShapes.length > 0) {
|
|
1281
|
-
var _scene$getTransformer;
|
|
1282
|
-
for (const drawingShape of drawingShapes) drawingShape.dispose();
|
|
1283
|
-
(_scene$getTransformer = scene.getTransformer()) === null || _scene$getTransformer === void 0 || _scene$getTransformer.clearSelectedObjects();
|
|
1284
|
-
}
|
|
1285
|
-
});
|
|
1286
|
-
}));
|
|
1287
|
-
}
|
|
1288
|
-
_drawingUpdateListener() {
|
|
1289
|
-
this.disposeWithMe(this._drawingManagerService.update$.subscribe((params) => {
|
|
1290
|
-
params.forEach((param) => {
|
|
1291
|
-
var _setClipBounds, _scene$getTransformer2;
|
|
1292
|
-
const { unitId, subUnitId, drawingId } = param;
|
|
1293
|
-
const drawingParam = this._drawingManagerService.getDrawingByParam(param);
|
|
1294
|
-
if (drawingParam == null) return;
|
|
1295
|
-
const { transform, drawingType } = drawingParam;
|
|
1296
|
-
const renderObject = this._getSceneAndTransformerByDrawingSearch(unitId);
|
|
1297
|
-
if (renderObject == null) return;
|
|
1298
|
-
const { scene, transformer } = renderObject;
|
|
1299
|
-
if (transform == null) return true;
|
|
1300
|
-
const { left = 0, top = 0, width = 0, height = 0, angle = 0, flipX = false, flipY = false, skewX = 0, skewY = 0 } = transform;
|
|
1301
|
-
const drawingShapeKey = (0, _univerjs_drawing.getDrawingShapeKeyByDrawingSearch)({
|
|
1302
|
-
unitId,
|
|
1303
|
-
subUnitId,
|
|
1304
|
-
drawingId
|
|
1305
|
-
});
|
|
1306
|
-
const drawingShape = scene.getObject(drawingShapeKey);
|
|
1307
|
-
if (drawingShape == null) return true;
|
|
1308
|
-
drawingShape.transformByState({
|
|
1173
|
+
renderFloatDom(param, scene) {
|
|
1174
|
+
const { transform: singleTransform, drawingType, groupId, unitId, subUnitId, drawingId, isMultiTransform, transforms: multiTransforms } = param;
|
|
1175
|
+
if (drawingType !== _univerjs_core.DrawingTypeEnum.DRAWING_DOM) return;
|
|
1176
|
+
if (!this._drawingManagerService.getDrawingVisible()) return;
|
|
1177
|
+
if (singleTransform == null) return;
|
|
1178
|
+
const transforms = isMultiTransform && multiTransforms ? multiTransforms : [singleTransform];
|
|
1179
|
+
const rects = [];
|
|
1180
|
+
for (const transform of transforms) {
|
|
1181
|
+
const { left, top, width, height, angle, flipX, flipY, skewX, skewY } = transform;
|
|
1182
|
+
const index = transforms.indexOf(transform);
|
|
1183
|
+
const imageShapeKey = (0, _univerjs_drawing.getDrawingShapeKeyByDrawingSearch)({
|
|
1184
|
+
unitId,
|
|
1185
|
+
subUnitId,
|
|
1186
|
+
drawingId
|
|
1187
|
+
}, isMultiTransform ? index : void 0);
|
|
1188
|
+
const imageShape = scene.getObject(imageShapeKey);
|
|
1189
|
+
if (imageShape != null) {
|
|
1190
|
+
imageShape.transformByState({
|
|
1309
1191
|
left,
|
|
1310
1192
|
top,
|
|
1311
1193
|
width,
|
|
@@ -1316,1026 +1198,1232 @@ let DrawingUpdateController = class DrawingUpdateController extends _univerjs_co
|
|
|
1316
1198
|
skewX,
|
|
1317
1199
|
skewY
|
|
1318
1200
|
});
|
|
1319
|
-
|
|
1320
|
-
|
|
1321
|
-
|
|
1322
|
-
|
|
1323
|
-
|
|
1324
|
-
|
|
1201
|
+
continue;
|
|
1202
|
+
}
|
|
1203
|
+
const orders = this._drawingManagerService.getDrawingOrder(unitId, subUnitId);
|
|
1204
|
+
const zIndex = orders.indexOf(drawingId);
|
|
1205
|
+
const rectConfig = {
|
|
1206
|
+
...transform,
|
|
1207
|
+
zIndex: zIndex === -1 ? orders.length - 1 : zIndex
|
|
1208
|
+
};
|
|
1209
|
+
if (scene.getObject(imageShapeKey)) continue;
|
|
1210
|
+
rectConfig.printable = false;
|
|
1211
|
+
const rect = new _univerjs_engine_render.Rect(imageShapeKey, rectConfig);
|
|
1212
|
+
if (!this._drawingManagerService.getDrawingVisible()) continue;
|
|
1213
|
+
scene.addObject(rect, _univerjs_engine_render.DRAWING_OBJECT_LAYER_INDEX);
|
|
1214
|
+
if (this._drawingManagerService.getDrawingEditable() && param.allowTransform !== false) scene.attachTransformerTo(rect);
|
|
1215
|
+
groupId && insertGroupObject({
|
|
1216
|
+
drawingId: groupId,
|
|
1217
|
+
unitId,
|
|
1218
|
+
subUnitId
|
|
1219
|
+
}, rect, scene, this._drawingManagerService);
|
|
1220
|
+
rects.push(rect);
|
|
1221
|
+
}
|
|
1222
|
+
return rects;
|
|
1325
1223
|
}
|
|
1326
|
-
|
|
1327
|
-
this.
|
|
1328
|
-
|
|
1329
|
-
|
|
1330
|
-
|
|
1331
|
-
|
|
1332
|
-
|
|
1333
|
-
|
|
1334
|
-
|
|
1335
|
-
|
|
1336
|
-
|
|
1337
|
-
|
|
1338
|
-
|
|
1339
|
-
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
|
|
1343
|
-
|
|
1344
|
-
|
|
1345
|
-
|
|
1346
|
-
|
|
1347
|
-
|
|
1224
|
+
renderDrawing(param, scene, options) {
|
|
1225
|
+
const drawingParam = this._drawingManagerService.getDrawingByParam(param);
|
|
1226
|
+
if (drawingParam == null) return;
|
|
1227
|
+
switch (drawingParam.drawingType) {
|
|
1228
|
+
case _univerjs_core.DrawingTypeEnum.DRAWING_IMAGE: return this.renderImages(drawingParam, scene, options);
|
|
1229
|
+
default:
|
|
1230
|
+
}
|
|
1231
|
+
}
|
|
1232
|
+
previewImage(key, src, width, height) {
|
|
1233
|
+
this._galleryService.open({
|
|
1234
|
+
images: [src],
|
|
1235
|
+
onOpenChange: (open) => {
|
|
1236
|
+
if (!open) this._galleryService.close();
|
|
1237
|
+
}
|
|
1238
|
+
});
|
|
1239
|
+
}
|
|
1240
|
+
_adjustImageSize(nativeWidth, nativeHeight, screenWidth, screenHeight) {
|
|
1241
|
+
if (nativeWidth <= screenWidth && nativeHeight <= screenHeight) return {
|
|
1242
|
+
width: nativeWidth,
|
|
1243
|
+
height: nativeHeight
|
|
1244
|
+
};
|
|
1245
|
+
const widthRatio = screenWidth / nativeWidth;
|
|
1246
|
+
const heightRatio = screenHeight / nativeHeight;
|
|
1247
|
+
const scale = Math.min(widthRatio, heightRatio);
|
|
1248
|
+
return {
|
|
1249
|
+
width: Math.floor(nativeWidth * scale),
|
|
1250
|
+
height: Math.floor(nativeHeight * scale)
|
|
1251
|
+
};
|
|
1252
|
+
}
|
|
1253
|
+
};
|
|
1254
|
+
DrawingRenderService = __decorate([
|
|
1255
|
+
__decorateParam(0, _univerjs_drawing.IDrawingManagerService),
|
|
1256
|
+
__decorateParam(1, _univerjs_core.IImageIoService),
|
|
1257
|
+
__decorateParam(2, _univerjs_ui.IGalleryService),
|
|
1258
|
+
__decorateParam(3, _univerjs_core.IURLImageService),
|
|
1259
|
+
__decorateParam(4, _univerjs_core.IUniverInstanceService),
|
|
1260
|
+
__decorateParam(5, (0, _univerjs_core.Inject)(DrawingImageClipService))
|
|
1261
|
+
], DrawingRenderService);
|
|
1262
|
+
|
|
1263
|
+
//#endregion
|
|
1264
|
+
//#region src/utils/get-update-params.ts
|
|
1265
|
+
function getUpdateParams(objects, drawingManagerService) {
|
|
1266
|
+
const params = [];
|
|
1267
|
+
objects.forEach((object) => {
|
|
1268
|
+
const { oKey, left, top, height, width, angle } = object;
|
|
1269
|
+
const searchParam = drawingManagerService.getDrawingOKey(oKey);
|
|
1270
|
+
if (searchParam == null) {
|
|
1271
|
+
params.push(null);
|
|
1272
|
+
return true;
|
|
1273
|
+
}
|
|
1274
|
+
const { unitId, subUnitId, drawingId, drawingType } = searchParam;
|
|
1275
|
+
const param = {
|
|
1276
|
+
unitId,
|
|
1277
|
+
subUnitId,
|
|
1278
|
+
drawingId,
|
|
1279
|
+
drawingType,
|
|
1280
|
+
transform: {
|
|
1281
|
+
left,
|
|
1282
|
+
top,
|
|
1283
|
+
height,
|
|
1284
|
+
width,
|
|
1285
|
+
angle
|
|
1286
|
+
}
|
|
1287
|
+
};
|
|
1288
|
+
if (drawingType === _univerjs_core.DrawingTypeEnum.DRAWING_IMAGE) param.srcRect = object.srcRect;
|
|
1289
|
+
params.push(param);
|
|
1290
|
+
});
|
|
1291
|
+
return params;
|
|
1292
|
+
}
|
|
1293
|
+
|
|
1294
|
+
//#endregion
|
|
1295
|
+
//#region src/controllers/drawing-update.controller.ts
|
|
1296
|
+
function hasRefreshMetadata(refreshParam) {
|
|
1297
|
+
return "hidden" in refreshParam || "behindText" in refreshParam;
|
|
1298
|
+
}
|
|
1299
|
+
function syncDrawingHiddenState(shape, drawingParam) {
|
|
1300
|
+
if (!("hidden" in drawingParam)) return;
|
|
1301
|
+
drawingParam.hidden === true ? shape.hide() : shape.show();
|
|
1302
|
+
}
|
|
1303
|
+
function mergeRefreshMetadata(drawingParam, refreshParam) {
|
|
1304
|
+
if (!hasRefreshMetadata(refreshParam)) return drawingParam;
|
|
1305
|
+
return {
|
|
1306
|
+
...drawingParam,
|
|
1307
|
+
...refreshParam
|
|
1308
|
+
};
|
|
1309
|
+
}
|
|
1310
|
+
let DrawingUpdateController = class DrawingUpdateController extends _univerjs_core.Disposable {
|
|
1311
|
+
constructor(_currentUniverService, _commandService, _renderManagerService, _drawingManagerService) {
|
|
1312
|
+
super();
|
|
1313
|
+
this._currentUniverService = _currentUniverService;
|
|
1314
|
+
this._commandService = _commandService;
|
|
1315
|
+
this._renderManagerService = _renderManagerService;
|
|
1316
|
+
this._drawingManagerService = _drawingManagerService;
|
|
1317
|
+
_defineProperty(this, "_sceneListenerOnDrawingMap", /* @__PURE__ */ new WeakSet());
|
|
1318
|
+
this._initialize();
|
|
1319
|
+
}
|
|
1320
|
+
dispose() {
|
|
1321
|
+
super.dispose();
|
|
1322
|
+
}
|
|
1323
|
+
_initialize() {
|
|
1324
|
+
this._recoveryImages();
|
|
1325
|
+
this._drawingAddListener();
|
|
1326
|
+
this._drawingRemoveListener();
|
|
1327
|
+
this._drawingUpdateListener();
|
|
1328
|
+
this._commandExecutedListener();
|
|
1329
|
+
this._drawingArrangeListener();
|
|
1330
|
+
this._drawingGroupListener();
|
|
1331
|
+
this._drawingRefreshListener();
|
|
1332
|
+
this._drawingVisibleListener();
|
|
1333
|
+
}
|
|
1334
|
+
_recoveryImages() {
|
|
1335
|
+
const drawingList = this._drawingManagerService.drawingManagerData;
|
|
1336
|
+
const info = getCurrentUnitInfo(this._currentUniverService);
|
|
1337
|
+
if (info == null) return;
|
|
1338
|
+
const { unitId: currentUnitId, subUnitId: currentSubUnitId } = info;
|
|
1339
|
+
Object.keys(drawingList).forEach((unitId) => {
|
|
1340
|
+
Object.keys(drawingList[unitId]).forEach((subUnitId) => {
|
|
1341
|
+
const drawingMap = drawingList[unitId][subUnitId].data;
|
|
1342
|
+
if (drawingMap == null || unitId !== currentUnitId || subUnitId !== currentSubUnitId) return;
|
|
1343
|
+
Object.keys(drawingMap).forEach((drawingId) => {
|
|
1344
|
+
if (drawingMap[drawingId]) this._insertDrawing([{
|
|
1348
1345
|
unitId,
|
|
1349
1346
|
subUnitId,
|
|
1350
1347
|
drawingId
|
|
1351
1348
|
}]);
|
|
1352
|
-
return true;
|
|
1353
|
-
}
|
|
1354
|
-
const { left = 0, top = 0, width = 0, height = 0, angle = 0, flipX = false, flipY = false, skewX = 0, skewY = 0 } = transform;
|
|
1355
|
-
drawingShape.transformByState({
|
|
1356
|
-
left,
|
|
1357
|
-
top,
|
|
1358
|
-
width,
|
|
1359
|
-
height,
|
|
1360
|
-
angle,
|
|
1361
|
-
flipX,
|
|
1362
|
-
flipY,
|
|
1363
|
-
skewX,
|
|
1364
|
-
skewY
|
|
1365
1349
|
});
|
|
1366
|
-
(_setClipBounds2 = drawingShape.setClipBounds) === null || _setClipBounds2 === void 0 || _setClipBounds2.call(drawingShape, transform.clipBounds);
|
|
1367
|
-
syncDrawingHiddenState(drawingShape, drawingParamWithRefreshMetadata);
|
|
1368
|
-
ensureDrawingRenderLayer(scene, drawingShape, drawingParamWithRefreshMetadata);
|
|
1369
1350
|
});
|
|
1370
|
-
})
|
|
1351
|
+
});
|
|
1371
1352
|
}
|
|
1372
|
-
|
|
1373
|
-
this.disposeWithMe(this.
|
|
1374
|
-
|
|
1375
|
-
const
|
|
1376
|
-
|
|
1377
|
-
|
|
1378
|
-
|
|
1379
|
-
const drawingShapeKey = (0, _univerjs_drawing.getDrawingShapeKeyByDrawingSearch)({
|
|
1380
|
-
unitId,
|
|
1381
|
-
subUnitId,
|
|
1382
|
-
drawingId
|
|
1383
|
-
});
|
|
1384
|
-
const drawingShape = scene.getObject(drawingShapeKey);
|
|
1385
|
-
if (drawingShape == null) return true;
|
|
1386
|
-
if (visible) drawingShape.show();
|
|
1387
|
-
else drawingShape.hide();
|
|
1388
|
-
});
|
|
1353
|
+
_commandExecutedListener() {
|
|
1354
|
+
this.disposeWithMe(this._commandService.onCommandExecuted((command) => {
|
|
1355
|
+
if (command.id === SetDrawingAlignOperation.id) {
|
|
1356
|
+
const params = command.params;
|
|
1357
|
+
if (params == null) return;
|
|
1358
|
+
this._drawingAlign(params);
|
|
1359
|
+
}
|
|
1389
1360
|
}));
|
|
1390
1361
|
}
|
|
1391
|
-
|
|
1392
|
-
|
|
1393
|
-
|
|
1394
|
-
|
|
1395
|
-
|
|
1396
|
-
|
|
1397
|
-
|
|
1398
|
-
_addListenerOnDrawing(scene) {
|
|
1399
|
-
const transformer = scene.getTransformerByCreate();
|
|
1400
|
-
let startTransforms = null;
|
|
1401
|
-
this.disposeWithMe((0, _univerjs_core.toDisposable)(transformer.changeStart$.subscribe((state) => {
|
|
1402
|
-
const { objects } = state;
|
|
1403
|
-
const objectArray = Array.from(objects.values());
|
|
1404
|
-
const drawings = [];
|
|
1405
|
-
startTransforms = objectArray.map((object) => {
|
|
1406
|
-
const { left, top, height, width, angle, oKey, isInGroup } = object;
|
|
1407
|
-
const drawing = this._drawingManagerService.getDrawingOKey(oKey);
|
|
1408
|
-
if (isInGroup || object instanceof _univerjs_engine_render.Group) {
|
|
1409
|
-
let group = object.ancestorGroup;
|
|
1410
|
-
if (group == null && object instanceof _univerjs_engine_render.Group) group = object;
|
|
1411
|
-
if (group == null) return null;
|
|
1412
|
-
const groupDrawing = this._drawingManagerService.getDrawingOKey(group.oKey);
|
|
1413
|
-
if (groupDrawing) {
|
|
1414
|
-
const { unitId, subUnitId, drawingId } = groupDrawing;
|
|
1415
|
-
drawings.push({
|
|
1416
|
-
unitId,
|
|
1417
|
-
subUnitId,
|
|
1418
|
-
drawingId
|
|
1419
|
-
});
|
|
1420
|
-
const { left, top, height, width, angle } = group;
|
|
1421
|
-
return {
|
|
1422
|
-
left,
|
|
1423
|
-
top,
|
|
1424
|
-
height,
|
|
1425
|
-
width,
|
|
1426
|
-
angle
|
|
1427
|
-
};
|
|
1428
|
-
}
|
|
1429
|
-
} else if (drawing != null) {
|
|
1430
|
-
const { unitId, subUnitId, drawingId } = drawing;
|
|
1431
|
-
drawings.push({
|
|
1432
|
-
unitId,
|
|
1433
|
-
subUnitId,
|
|
1434
|
-
drawingId
|
|
1435
|
-
});
|
|
1436
|
-
return {
|
|
1437
|
-
left,
|
|
1438
|
-
top,
|
|
1439
|
-
height,
|
|
1440
|
-
width,
|
|
1441
|
-
angle
|
|
1442
|
-
};
|
|
1443
|
-
}
|
|
1444
|
-
return null;
|
|
1445
|
-
}).filter((transform) => transform != null);
|
|
1446
|
-
if (drawings.length > 0) this._commandService.syncExecuteCommand(_univerjs_drawing.SetDrawingSelectedOperation.id, drawings);
|
|
1447
|
-
else this._commandService.syncExecuteCommand(_univerjs_drawing.SetDrawingSelectedOperation.id, []);
|
|
1448
|
-
})));
|
|
1449
|
-
this.disposeWithMe((0, _univerjs_core.toDisposable)(transformer.changeEnd$.subscribe((state) => {
|
|
1450
|
-
const { objects } = state;
|
|
1451
|
-
const params = this._filterUpdateParams(getUpdateParams(objects, this._drawingManagerService), startTransforms);
|
|
1452
|
-
if (params.length > 0) this._drawingManagerService.featurePluginUpdateNotification(params);
|
|
1453
|
-
})));
|
|
1362
|
+
_drawingGroupListener() {
|
|
1363
|
+
this.disposeWithMe(this._drawingManagerService.group$.subscribe((params) => {
|
|
1364
|
+
this._groupDrawings(params);
|
|
1365
|
+
}));
|
|
1366
|
+
this.disposeWithMe(this._drawingManagerService.ungroup$.subscribe((params) => {
|
|
1367
|
+
this._ungroupDrawings(params);
|
|
1368
|
+
}));
|
|
1454
1369
|
}
|
|
1455
|
-
|
|
1456
|
-
|
|
1457
|
-
|
|
1458
|
-
|
|
1459
|
-
|
|
1460
|
-
|
|
1461
|
-
|
|
1462
|
-
|
|
1463
|
-
//#endregion
|
|
1464
|
-
//#region src/views/crop/image-cropper-object.ts
|
|
1465
|
-
var ImageCropperObject = class extends _univerjs_engine_render.Shape {
|
|
1466
|
-
constructor(key, props) {
|
|
1467
|
-
if (props == null) props = {};
|
|
1468
|
-
props.transformerConfig = {
|
|
1469
|
-
keepRatio: false,
|
|
1470
|
-
isCropper: true,
|
|
1471
|
-
anchorFill: "rgb(0, 0, 0)",
|
|
1472
|
-
anchorStroke: "rgb(255, 255, 255)",
|
|
1473
|
-
anchorSize: 24
|
|
1370
|
+
_getSceneAndTransformerByDrawingSearch(unitId) {
|
|
1371
|
+
if (unitId == null) return;
|
|
1372
|
+
const renderObject = this._renderManagerService.getRenderById(unitId);
|
|
1373
|
+
const scene = renderObject === null || renderObject === void 0 ? void 0 : renderObject.scene;
|
|
1374
|
+
if (scene == null) return null;
|
|
1375
|
+
return {
|
|
1376
|
+
scene,
|
|
1377
|
+
transformer: scene.getTransformerByCreate()
|
|
1474
1378
|
};
|
|
1475
|
-
super(key, props);
|
|
1476
|
-
_defineProperty(this, "_srcRect", void 0);
|
|
1477
|
-
_defineProperty(this, "_prstGeom", void 0);
|
|
1478
|
-
_defineProperty(this, "_applyTransform", void 0);
|
|
1479
|
-
_defineProperty(this, "_dragPadding", 8);
|
|
1480
|
-
_defineProperty(this, "_cacheCanvas", void 0);
|
|
1481
|
-
if (props === null || props === void 0 ? void 0 : props.srcRect) this._srcRect = props.srcRect;
|
|
1482
|
-
if (props === null || props === void 0 ? void 0 : props.prstGeom) this._prstGeom = props.prstGeom;
|
|
1483
|
-
if (props === null || props === void 0 ? void 0 : props.applyTransform) this._applyTransform = props.applyTransform;
|
|
1484
|
-
if (props === null || props === void 0 ? void 0 : props.dragPadding) this._dragPadding = props.dragPadding;
|
|
1485
|
-
this._applyProps();
|
|
1486
|
-
}
|
|
1487
|
-
refreshSrcRect(value, transform) {
|
|
1488
|
-
this._srcRect = value;
|
|
1489
|
-
this._applyTransform = transform;
|
|
1490
|
-
this._applyProps();
|
|
1491
|
-
}
|
|
1492
|
-
get srcRect() {
|
|
1493
|
-
return this._srcRect;
|
|
1494
|
-
}
|
|
1495
|
-
dispose() {
|
|
1496
|
-
var _this$_cacheCanvas;
|
|
1497
|
-
super.dispose();
|
|
1498
|
-
(_this$_cacheCanvas = this._cacheCanvas) === null || _this$_cacheCanvas === void 0 || _this$_cacheCanvas.dispose();
|
|
1499
|
-
this._srcRect = null;
|
|
1500
|
-
}
|
|
1501
|
-
isHit(coord) {
|
|
1502
|
-
const oCoord = this.getInverseCoord(coord);
|
|
1503
|
-
if (oCoord.x >= -this.strokeWidth / 2 && oCoord.x <= this.width + this.strokeWidth / 2 && oCoord.y >= -this.strokeWidth / 2 && oCoord.y <= this.height + this.strokeWidth / 2 && !this._inSurround(oCoord)) return true;
|
|
1504
|
-
return false;
|
|
1505
1379
|
}
|
|
1506
|
-
|
|
1507
|
-
|
|
1508
|
-
|
|
1509
|
-
|
|
1380
|
+
_groupDrawings(drawings) {
|
|
1381
|
+
drawings.forEach((drawing) => {
|
|
1382
|
+
this._groupDrawing(drawing);
|
|
1383
|
+
});
|
|
1510
1384
|
}
|
|
1511
|
-
|
|
1512
|
-
|
|
1513
|
-
|
|
1514
|
-
|
|
1385
|
+
_groupDrawing(params) {
|
|
1386
|
+
const { parent, children } = params;
|
|
1387
|
+
const { unitId, subUnitId, drawingId } = parent;
|
|
1388
|
+
const renderObject = this._getSceneAndTransformerByDrawingSearch(parent.unitId);
|
|
1389
|
+
if (renderObject == null) return;
|
|
1390
|
+
const { scene, transformer } = renderObject;
|
|
1391
|
+
this._commandService.syncExecuteCommand(CloseImageCropOperation.id);
|
|
1392
|
+
const objects = [];
|
|
1393
|
+
children.forEach((drawing) => {
|
|
1394
|
+
const drawingShapeKey = (0, _univerjs_drawing.getDrawingShapeKeyByDrawingSearch)(drawing);
|
|
1395
|
+
const object = scene.getObjectIncludeInGroup(drawingShapeKey);
|
|
1396
|
+
if (object == null || objects.includes(object)) return;
|
|
1397
|
+
objects.push(object);
|
|
1398
|
+
const { transform } = drawing;
|
|
1399
|
+
if (transform == null) return;
|
|
1400
|
+
if (object.classType === _univerjs_engine_render.RENDER_CLASS_TYPE.GROUP) object.transformByState({
|
|
1401
|
+
left: transform.left,
|
|
1402
|
+
top: transform.top
|
|
1403
|
+
});
|
|
1404
|
+
else object.transformByState(transform);
|
|
1405
|
+
});
|
|
1406
|
+
if (objects.length === 0) return;
|
|
1407
|
+
const group = new _univerjs_engine_render.DrawingGroupObject((0, _univerjs_drawing.getDrawingShapeKeyByDrawingSearch)({
|
|
1408
|
+
unitId,
|
|
1409
|
+
subUnitId,
|
|
1410
|
+
drawingId
|
|
1411
|
+
}));
|
|
1412
|
+
scene.addObject(group, _univerjs_engine_render.DRAWING_OBJECT_LAYER_INDEX).attachTransformerTo(group);
|
|
1413
|
+
group.addObjects(...objects);
|
|
1414
|
+
syncGroupRotateEnabled(group, parent, scene, this._drawingManagerService, children);
|
|
1415
|
+
if (parent.groupBaseBound) group.setBaseBound(parent.groupBaseBound);
|
|
1416
|
+
if (parent.groupId) {
|
|
1417
|
+
group.isInGroup = true;
|
|
1418
|
+
insertGroupObject({
|
|
1419
|
+
drawingId: parent.groupId,
|
|
1420
|
+
unitId,
|
|
1421
|
+
subUnitId
|
|
1422
|
+
}, group, scene, this._drawingManagerService);
|
|
1515
1423
|
}
|
|
1516
|
-
|
|
1517
|
-
|
|
1518
|
-
|
|
1519
|
-
|
|
1520
|
-
|
|
1424
|
+
parent.transform && group.transformByState({
|
|
1425
|
+
left: parent.transform.left,
|
|
1426
|
+
top: parent.transform.top,
|
|
1427
|
+
width: parent.transform.width,
|
|
1428
|
+
height: parent.transform.height,
|
|
1429
|
+
angle: parent.transform.angle
|
|
1430
|
+
});
|
|
1431
|
+
transformer.clearSelectedObjects();
|
|
1432
|
+
transformer.setSelectedControl(group);
|
|
1521
1433
|
}
|
|
1522
|
-
|
|
1523
|
-
|
|
1524
|
-
|
|
1525
|
-
this._initialCacheCanvas();
|
|
1526
|
-
(_this$_cacheCanvas2 = this._cacheCanvas) === null || _this$_cacheCanvas2 === void 0 || _this$_cacheCanvas2.clear();
|
|
1527
|
-
const cacheCtx = (_this$_cacheCanvas3 = this._cacheCanvas) === null || _this$_cacheCanvas3 === void 0 ? void 0 : _this$_cacheCanvas3.getContext();
|
|
1528
|
-
if (cacheCtx == null) return;
|
|
1529
|
-
cacheCtx.save();
|
|
1530
|
-
_univerjs_engine_render.Rect.drawWith(cacheCtx, {
|
|
1531
|
-
left: 0,
|
|
1532
|
-
top: 0,
|
|
1533
|
-
width: engineWidth,
|
|
1534
|
-
height: engineHeight,
|
|
1535
|
-
fill: "rgba(0, 0, 0, 0.5)"
|
|
1434
|
+
_ungroupDrawings(drawings) {
|
|
1435
|
+
drawings.forEach((drawing) => {
|
|
1436
|
+
this._ungroupDrawing(drawing);
|
|
1536
1437
|
});
|
|
1537
|
-
cacheCtx.setTransform(ctx.getTransform());
|
|
1538
|
-
this._clipForApplyObject(cacheCtx);
|
|
1539
|
-
this._applyCache(ctx);
|
|
1540
|
-
cacheCtx.restore();
|
|
1541
1438
|
}
|
|
1542
|
-
|
|
1543
|
-
|
|
1544
|
-
|
|
1545
|
-
|
|
1546
|
-
|
|
1547
|
-
|
|
1548
|
-
const
|
|
1549
|
-
|
|
1550
|
-
|
|
1551
|
-
|
|
1552
|
-
|
|
1553
|
-
|
|
1554
|
-
|
|
1555
|
-
|
|
1556
|
-
|
|
1557
|
-
|
|
1558
|
-
|
|
1559
|
-
let cropBottom = 0;
|
|
1560
|
-
const { left: applyLeft = 0, top: applyTop = 0, width: applyWidth = 0, height: applyHeight = 0, angle } = this._applyTransform;
|
|
1561
|
-
if (this._srcRect != null) {
|
|
1562
|
-
const { left = 0, top = 0, right = 0, bottom = 0 } = this._srcRect;
|
|
1563
|
-
cropLeft = left;
|
|
1564
|
-
cropTop = top;
|
|
1565
|
-
cropRight = right;
|
|
1566
|
-
cropBottom = bottom;
|
|
1567
|
-
}
|
|
1568
|
-
const left = applyLeft + cropLeft;
|
|
1569
|
-
const top = applyTop + cropTop;
|
|
1570
|
-
this.transformByState({
|
|
1571
|
-
left,
|
|
1572
|
-
top,
|
|
1573
|
-
width: applyLeft + applyWidth - cropRight - left,
|
|
1574
|
-
height: applyTop + applyHeight - cropBottom - top,
|
|
1575
|
-
angle
|
|
1439
|
+
_ungroupDrawing(drawing) {
|
|
1440
|
+
const { parent, children } = drawing;
|
|
1441
|
+
const renderObject = this._getSceneAndTransformerByDrawingSearch(parent.unitId);
|
|
1442
|
+
if (renderObject == null) return;
|
|
1443
|
+
const { scene, transformer } = renderObject;
|
|
1444
|
+
children.forEach((drawing) => {
|
|
1445
|
+
const drawingKey = (0, _univerjs_drawing.getDrawingShapeKeyByDrawingSearch)(drawing);
|
|
1446
|
+
const object = scene.getObjectIncludeInGroup(drawingKey);
|
|
1447
|
+
if (object == null) return true;
|
|
1448
|
+
if (object == null) return;
|
|
1449
|
+
const { transform } = drawing;
|
|
1450
|
+
if (transform == null) return;
|
|
1451
|
+
if (object.classType === _univerjs_engine_render.RENDER_CLASS_TYPE.GROUP) object.transformByState({
|
|
1452
|
+
left: transform.left,
|
|
1453
|
+
top: transform.top
|
|
1454
|
+
});
|
|
1455
|
+
else object.transformByState(transform);
|
|
1576
1456
|
});
|
|
1577
|
-
|
|
1578
|
-
|
|
1579
|
-
|
|
1580
|
-
|
|
1581
|
-
|
|
1582
|
-
ctx.save();
|
|
1583
|
-
ctx.setTransform(1, 0, 0, 1, 0, 0);
|
|
1584
|
-
cacheCtx.setTransform(1, 0, 0, 1, 0, 0);
|
|
1585
|
-
ctx.drawImage(this._cacheCanvas.getCanvasEle(), 0, 0);
|
|
1586
|
-
ctx.restore();
|
|
1587
|
-
cacheCtx.restore();
|
|
1588
|
-
}
|
|
1589
|
-
_initialCacheCanvas() {
|
|
1590
|
-
if (this._cacheCanvas != null) return;
|
|
1591
|
-
const scene = this.getScene();
|
|
1592
|
-
if (scene == null) return;
|
|
1593
|
-
this._cacheCanvas = new _univerjs_engine_render.Canvas();
|
|
1594
|
-
const engine = scene.getEngine();
|
|
1595
|
-
this._cacheCanvas.setSize(engine.width, engine.height);
|
|
1596
|
-
engine.onTransformChange$.subscribeEvent(() => {
|
|
1597
|
-
var _this$_cacheCanvas4;
|
|
1598
|
-
(_this$_cacheCanvas4 = this._cacheCanvas) === null || _this$_cacheCanvas4 === void 0 || _this$_cacheCanvas4.setSize(engine.width, engine.height);
|
|
1599
|
-
this.makeDirty(true);
|
|
1457
|
+
const groupKey = (0, _univerjs_drawing.getDrawingShapeKeyByDrawingSearch)(parent);
|
|
1458
|
+
const group = scene.getObject(groupKey);
|
|
1459
|
+
const { width, height } = group;
|
|
1460
|
+
group.getObjects().forEach((object) => {
|
|
1461
|
+
group.removeSelfObjectAndTransform(object.oKey, width, height);
|
|
1600
1462
|
});
|
|
1463
|
+
group.dispose();
|
|
1464
|
+
transformer.clearSelectedObjects();
|
|
1601
1465
|
}
|
|
1602
|
-
|
|
1603
|
-
|
|
1604
|
-
|
|
1605
|
-
|
|
1606
|
-
|
|
1607
|
-
|
|
1608
|
-
|
|
1609
|
-
|
|
1610
|
-
|
|
1611
|
-
|
|
1612
|
-
|
|
1613
|
-
|
|
1614
|
-
|
|
1615
|
-
_defineProperty(this, "_sceneListenerOnImageMap", /* @__PURE__ */ new WeakSet());
|
|
1616
|
-
this._init();
|
|
1617
|
-
}
|
|
1618
|
-
_init() {
|
|
1619
|
-
this._initOpenCrop();
|
|
1620
|
-
this._initCloseCrop();
|
|
1621
|
-
this._initAutoCrop();
|
|
1622
|
-
}
|
|
1623
|
-
_initAutoCrop() {
|
|
1624
|
-
this.disposeWithMe(this._commandService.onCommandExecuted((command) => {
|
|
1625
|
-
if (command.id !== AutoImageCropOperation.id) return;
|
|
1626
|
-
const params = command.params;
|
|
1627
|
-
if (params == null) return;
|
|
1628
|
-
const { cropType } = params;
|
|
1629
|
-
const drawingParams = this._drawingManagerService.getFocusDrawings();
|
|
1630
|
-
if (drawingParams.length !== 1) return;
|
|
1631
|
-
const { unitId, subUnitId, drawingId } = drawingParams[0];
|
|
1632
|
-
const renderObject = this._renderManagerService.getRenderById(unitId);
|
|
1633
|
-
const scene = renderObject === null || renderObject === void 0 ? void 0 : renderObject.scene;
|
|
1634
|
-
if (scene == null) return true;
|
|
1635
|
-
if (this._searchCropObject(scene) != null) this._commandService.syncExecuteCommand(CloseImageCropOperation.id, { isAuto: true });
|
|
1636
|
-
const imageShapeKey = (0, _univerjs_drawing.getDrawingShapeKeyByDrawingSearch)({
|
|
1466
|
+
_drawingAlign(params) {
|
|
1467
|
+
const { alignType } = params;
|
|
1468
|
+
const drawings = params.drawings || this._drawingManagerService.getFocusDrawings();
|
|
1469
|
+
if (alignType === "0") return;
|
|
1470
|
+
const drawingTransformCaches = [];
|
|
1471
|
+
let minLeft = Number.POSITIVE_INFINITY;
|
|
1472
|
+
let minTop = Number.POSITIVE_INFINITY;
|
|
1473
|
+
let maxRight = Number.NEGATIVE_INFINITY;
|
|
1474
|
+
let maxBottom = Number.NEGATIVE_INFINITY;
|
|
1475
|
+
let drawingCount = 0;
|
|
1476
|
+
drawings.forEach((drawing) => {
|
|
1477
|
+
const { unitId, subUnitId, drawingId, drawingType } = drawing;
|
|
1478
|
+
const drawingParam = this._drawingManagerService.getDrawingByParam({
|
|
1637
1479
|
unitId,
|
|
1638
1480
|
subUnitId,
|
|
1639
1481
|
drawingId
|
|
1640
1482
|
});
|
|
1641
|
-
|
|
1642
|
-
|
|
1643
|
-
|
|
1644
|
-
|
|
1645
|
-
|
|
1646
|
-
|
|
1647
|
-
|
|
1483
|
+
if (drawingParam == null || drawingParam.transform == null) return;
|
|
1484
|
+
drawingTransformCaches.push({
|
|
1485
|
+
unitId,
|
|
1486
|
+
subUnitId,
|
|
1487
|
+
drawingId,
|
|
1488
|
+
drawingType,
|
|
1489
|
+
transform: drawingParam.transform
|
|
1490
|
+
});
|
|
1491
|
+
const { left = 0, top = 0, width = 0, height = 0 } = drawingParam.transform;
|
|
1492
|
+
minLeft = Math.min(minLeft, left);
|
|
1493
|
+
minTop = Math.min(minTop, top);
|
|
1494
|
+
maxRight = Math.max(maxRight, left + width);
|
|
1495
|
+
maxBottom = Math.max(maxBottom, top + height);
|
|
1496
|
+
drawingCount++;
|
|
1497
|
+
});
|
|
1498
|
+
if (drawingCount === 0) return;
|
|
1499
|
+
this._sortDrawingTransform(drawingTransformCaches, alignType);
|
|
1500
|
+
this._applyAlignType(drawingTransformCaches, alignType, minLeft, minTop, maxRight, maxBottom, drawingCount);
|
|
1501
|
+
}
|
|
1502
|
+
_applyAlignType(drawingTransformCaches, alignType, minLeft, minTop, maxRight, maxBottom, drawingCount) {
|
|
1503
|
+
const averageHorizon = Math.round((maxRight - minLeft) / drawingCount * 10) / 10;
|
|
1504
|
+
const averageVertical = Math.round((maxBottom - minTop) / drawingCount * 10) / 10;
|
|
1505
|
+
const updateParams = [];
|
|
1506
|
+
const renderObject = this._getSceneAndTransformerByDrawingSearch(drawingTransformCaches[0].unitId);
|
|
1507
|
+
if (renderObject == null) return;
|
|
1508
|
+
const { scene, transformer } = renderObject;
|
|
1509
|
+
drawingTransformCaches.forEach((drawingTransformCache, index) => {
|
|
1510
|
+
const { unitId, subUnitId, drawingId, transform, drawingType } = drawingTransformCache;
|
|
1511
|
+
const { left = 0, top = 0, width = 0, height = 0 } = transform;
|
|
1512
|
+
let newLeft = left;
|
|
1513
|
+
let newTop = top;
|
|
1514
|
+
switch (alignType) {
|
|
1515
|
+
case "1":
|
|
1516
|
+
newLeft = minLeft;
|
|
1517
|
+
break;
|
|
1518
|
+
case "2":
|
|
1519
|
+
newLeft = minLeft + (maxRight - minLeft) / 2 - width / 2;
|
|
1520
|
+
break;
|
|
1521
|
+
case "3":
|
|
1522
|
+
newLeft = maxRight - width;
|
|
1523
|
+
break;
|
|
1524
|
+
case "4":
|
|
1525
|
+
newTop = minTop;
|
|
1526
|
+
break;
|
|
1527
|
+
case "5":
|
|
1528
|
+
newTop = minTop + (maxBottom - minTop) / 2 - height / 2;
|
|
1529
|
+
break;
|
|
1530
|
+
case "6":
|
|
1531
|
+
newTop = maxBottom - height;
|
|
1532
|
+
break;
|
|
1533
|
+
case "7":
|
|
1534
|
+
newLeft = minLeft + averageHorizon * index;
|
|
1535
|
+
break;
|
|
1536
|
+
case "8":
|
|
1537
|
+
newTop = minTop + averageVertical * index;
|
|
1538
|
+
break;
|
|
1539
|
+
default: break;
|
|
1648
1540
|
}
|
|
1649
|
-
if (
|
|
1650
|
-
this._updateCropperObject(cropType, imageShape);
|
|
1651
|
-
this._commandService.executeCommand(OpenImageCropOperation.id, {
|
|
1541
|
+
if (newLeft !== left || newTop !== top) updateParams.push({
|
|
1652
1542
|
unitId,
|
|
1653
1543
|
subUnitId,
|
|
1654
|
-
drawingId
|
|
1544
|
+
drawingId,
|
|
1545
|
+
drawingType,
|
|
1546
|
+
transform: {
|
|
1547
|
+
left: newLeft,
|
|
1548
|
+
top: newTop
|
|
1549
|
+
}
|
|
1655
1550
|
});
|
|
1551
|
+
});
|
|
1552
|
+
this._drawingManagerService.featurePluginUpdateNotification(updateParams);
|
|
1553
|
+
transformer.refreshControls().changeNotification();
|
|
1554
|
+
}
|
|
1555
|
+
_sortDrawingTransform(drawingTransformCaches, alignType) {
|
|
1556
|
+
drawingTransformCaches.sort((a, b) => {
|
|
1557
|
+
const aTransform = a.transform;
|
|
1558
|
+
const bTransform = b.transform;
|
|
1559
|
+
const { left: aLeft = 0, top: aTop = 0, width: aWidth = 0, height: aHeight = 0 } = aTransform;
|
|
1560
|
+
const { left: bLeft = 0, top: bTop = 0, width: bWidth = 0, height: bHeight = 0 } = bTransform;
|
|
1561
|
+
switch (alignType) {
|
|
1562
|
+
case "1": return aLeft - bLeft;
|
|
1563
|
+
case "2": return aLeft + aWidth / 2 - (bLeft + bWidth / 2);
|
|
1564
|
+
case "3": return aLeft + aWidth - (bLeft + bWidth);
|
|
1565
|
+
case "4": return aTop - bTop;
|
|
1566
|
+
case "5": return aTop + aHeight / 2 - (bTop + bHeight / 2);
|
|
1567
|
+
case "6": return aTop + aHeight - (bTop + bHeight);
|
|
1568
|
+
case "7": return aLeft + aWidth / 2 - (bLeft + bWidth / 2);
|
|
1569
|
+
case "8": return aTop + aHeight / 2 - (bTop + bHeight / 2);
|
|
1570
|
+
default: return 0;
|
|
1571
|
+
}
|
|
1572
|
+
});
|
|
1573
|
+
}
|
|
1574
|
+
_drawingArrangeListener() {
|
|
1575
|
+
this.disposeWithMe(this._drawingManagerService.order$.subscribe((params) => {
|
|
1576
|
+
this._drawingArrange(params);
|
|
1656
1577
|
}));
|
|
1657
1578
|
}
|
|
1658
|
-
|
|
1659
|
-
const
|
|
1660
|
-
const
|
|
1661
|
-
|
|
1662
|
-
|
|
1663
|
-
|
|
1664
|
-
|
|
1665
|
-
|
|
1666
|
-
|
|
1667
|
-
|
|
1668
|
-
|
|
1669
|
-
|
|
1670
|
-
|
|
1671
|
-
|
|
1672
|
-
|
|
1579
|
+
_drawingArrange(params) {
|
|
1580
|
+
const { unitId, subUnitId, drawingIds } = params;
|
|
1581
|
+
const renderObject = this._getSceneAndTransformerByDrawingSearch(unitId);
|
|
1582
|
+
if (renderObject == null) return;
|
|
1583
|
+
const { scene } = renderObject;
|
|
1584
|
+
drawingIds.forEach((drawingId) => {
|
|
1585
|
+
const oKey = (0, _univerjs_drawing.getDrawingShapeKeyByDrawingSearch)({
|
|
1586
|
+
unitId,
|
|
1587
|
+
subUnitId,
|
|
1588
|
+
drawingId
|
|
1589
|
+
});
|
|
1590
|
+
const drawingShapes = scene.fuzzyMathObjects(oKey, true);
|
|
1591
|
+
if (drawingShapes == null || drawingShapes.length === 0) return;
|
|
1592
|
+
const index = this._drawingManagerService.getDrawingOrder(unitId, subUnitId).indexOf(drawingId);
|
|
1593
|
+
for (const shape of drawingShapes) {
|
|
1594
|
+
shape.setProps({ zIndex: index });
|
|
1595
|
+
shape.makeDirty();
|
|
1596
|
+
}
|
|
1597
|
+
});
|
|
1673
1598
|
}
|
|
1674
|
-
|
|
1675
|
-
|
|
1676
|
-
|
|
1677
|
-
|
|
1678
|
-
|
|
1679
|
-
|
|
1680
|
-
|
|
1681
|
-
|
|
1682
|
-
|
|
1683
|
-
|
|
1684
|
-
|
|
1685
|
-
|
|
1686
|
-
|
|
1687
|
-
|
|
1688
|
-
|
|
1689
|
-
|
|
1690
|
-
|
|
1691
|
-
|
|
1692
|
-
|
|
1693
|
-
case "6":
|
|
1694
|
-
newSrcRect = this._calculateSrcRectByRatio(left, top, width, height, 4, 3);
|
|
1695
|
-
break;
|
|
1696
|
-
case "7":
|
|
1697
|
-
newSrcRect = this._calculateSrcRectByRatio(left, top, width, height, 3, 4);
|
|
1698
|
-
break;
|
|
1699
|
-
case "8":
|
|
1700
|
-
newSrcRect = this._calculateSrcRectByRatio(left, top, width, height, 3, 2);
|
|
1701
|
-
break;
|
|
1702
|
-
case "9":
|
|
1703
|
-
newSrcRect = this._calculateSrcRectByRatio(left, top, width, height, 2, 3);
|
|
1704
|
-
break;
|
|
1705
|
-
case "0":
|
|
1706
|
-
default: break;
|
|
1707
|
-
}
|
|
1708
|
-
if (newSrcRect == null) return;
|
|
1709
|
-
imageShape.setSrcRect(newSrcRect);
|
|
1710
|
-
const { left: newLeft = 0, top: newTop = 0, bottom: newBottom = 0, right: newRight = 0 } = newSrcRect;
|
|
1711
|
-
imageShape.transformByStateCloseCropper({
|
|
1712
|
-
left: left + newLeft,
|
|
1713
|
-
top: top + newTop,
|
|
1714
|
-
width: width - newRight - newLeft,
|
|
1715
|
-
height: height - newBottom - newTop
|
|
1599
|
+
_drawingAddListener() {
|
|
1600
|
+
this.disposeWithMe(this._drawingManagerService.add$.subscribe((params) => {
|
|
1601
|
+
this._insertDrawing(params);
|
|
1602
|
+
}));
|
|
1603
|
+
}
|
|
1604
|
+
_insertDrawing(params) {
|
|
1605
|
+
const sceneList = [];
|
|
1606
|
+
params.forEach((param) => {
|
|
1607
|
+
const { unitId } = param;
|
|
1608
|
+
if (this._drawingManagerService.getDrawingByParam(param) == null) return;
|
|
1609
|
+
const renderObject = this._getSceneAndTransformerByDrawingSearch(unitId);
|
|
1610
|
+
if (renderObject == null) return;
|
|
1611
|
+
const { scene } = renderObject;
|
|
1612
|
+
if (!sceneList.includes(scene)) sceneList.push(scene);
|
|
1613
|
+
});
|
|
1614
|
+
sceneList.forEach((scene) => {
|
|
1615
|
+
if (this._sceneListenerOnDrawingMap.has(scene)) return;
|
|
1616
|
+
this._addListenerOnDrawing(scene);
|
|
1617
|
+
this._sceneListenerOnDrawingMap.add(scene);
|
|
1716
1618
|
});
|
|
1717
1619
|
}
|
|
1718
|
-
|
|
1719
|
-
this.disposeWithMe(this.
|
|
1720
|
-
|
|
1721
|
-
|
|
1722
|
-
|
|
1723
|
-
|
|
1724
|
-
|
|
1725
|
-
|
|
1726
|
-
|
|
1727
|
-
|
|
1728
|
-
|
|
1729
|
-
|
|
1730
|
-
|
|
1731
|
-
|
|
1732
|
-
|
|
1733
|
-
subUnitId,
|
|
1734
|
-
drawingId
|
|
1735
|
-
}) == null) return;
|
|
1736
|
-
const imageShapeKey = (0, _univerjs_drawing.getDrawingShapeKeyByDrawingSearch)({
|
|
1737
|
-
unitId,
|
|
1738
|
-
subUnitId,
|
|
1739
|
-
drawingId
|
|
1620
|
+
_drawingRemoveListener() {
|
|
1621
|
+
this.disposeWithMe(this._drawingManagerService.remove$.subscribe((params) => {
|
|
1622
|
+
params.forEach((param) => {
|
|
1623
|
+
const { unitId, subUnitId, drawingId } = param;
|
|
1624
|
+
const renderObject = this._getSceneAndTransformerByDrawingSearch(unitId);
|
|
1625
|
+
if (renderObject == null) return;
|
|
1626
|
+
const { scene } = renderObject;
|
|
1627
|
+
if (disposeDrawingRenderObject(scene, {
|
|
1628
|
+
unitId,
|
|
1629
|
+
subUnitId,
|
|
1630
|
+
drawingId
|
|
1631
|
+
})) {
|
|
1632
|
+
var _scene$getTransformer;
|
|
1633
|
+
(_scene$getTransformer = scene.getTransformer()) === null || _scene$getTransformer === void 0 || _scene$getTransformer.clearSelectedObjects();
|
|
1634
|
+
}
|
|
1740
1635
|
});
|
|
1741
|
-
|
|
1742
|
-
|
|
1743
|
-
|
|
1744
|
-
|
|
1745
|
-
|
|
1746
|
-
|
|
1636
|
+
}));
|
|
1637
|
+
}
|
|
1638
|
+
_drawingUpdateListener() {
|
|
1639
|
+
this.disposeWithMe(this._drawingManagerService.update$.subscribe((params) => {
|
|
1640
|
+
params.forEach((param) => {
|
|
1641
|
+
var _setClipBounds, _scene$getTransformer2;
|
|
1642
|
+
const { unitId, subUnitId, drawingId } = param;
|
|
1643
|
+
const drawingParam = this._drawingManagerService.getDrawingByParam(param);
|
|
1644
|
+
if (drawingParam == null) return;
|
|
1645
|
+
const { transform, drawingType } = drawingParam;
|
|
1646
|
+
const renderObject = this._getSceneAndTransformerByDrawingSearch(unitId);
|
|
1647
|
+
if (renderObject == null) return;
|
|
1648
|
+
const { scene, transformer } = renderObject;
|
|
1649
|
+
if (transform == null) return true;
|
|
1650
|
+
const { left = 0, top = 0, width = 0, height = 0, angle = 0, flipX = false, flipY = false, skewX = 0, skewY = 0 } = transform;
|
|
1651
|
+
const drawingShapeKey = (0, _univerjs_drawing.getDrawingShapeKeyByDrawingSearch)({
|
|
1652
|
+
unitId,
|
|
1653
|
+
subUnitId,
|
|
1654
|
+
drawingId
|
|
1747
1655
|
});
|
|
1748
|
-
|
|
1749
|
-
|
|
1750
|
-
|
|
1751
|
-
|
|
1752
|
-
|
|
1753
|
-
|
|
1754
|
-
|
|
1755
|
-
|
|
1656
|
+
const drawingShape = scene.getObject(drawingShapeKey);
|
|
1657
|
+
if (drawingShape == null) return true;
|
|
1658
|
+
drawingShape.transformByState({
|
|
1659
|
+
left,
|
|
1660
|
+
top,
|
|
1661
|
+
width,
|
|
1662
|
+
height,
|
|
1663
|
+
angle,
|
|
1664
|
+
flipX,
|
|
1665
|
+
flipY,
|
|
1666
|
+
skewX,
|
|
1667
|
+
skewY
|
|
1668
|
+
});
|
|
1669
|
+
(_setClipBounds = drawingShape.setClipBounds) === null || _setClipBounds === void 0 || _setClipBounds.call(drawingShape, transform.clipBounds);
|
|
1670
|
+
syncDrawingHiddenState(drawingShape, drawingParam);
|
|
1671
|
+
ensureDrawingRenderLayer(scene, drawingShape, drawingParam);
|
|
1672
|
+
(_scene$getTransformer2 = scene.getTransformer()) === null || _scene$getTransformer2 === void 0 || _scene$getTransformer2.debounceRefreshControls();
|
|
1756
1673
|
});
|
|
1757
|
-
scene.addObject(imageCropperObject, imageShape.getLayerIndex() + 1).attachTransformerTo(imageCropperObject);
|
|
1758
|
-
transformer === null || transformer === void 0 || transformer.createControlForCopper(imageCropperObject);
|
|
1759
|
-
this._addHoverForImageCopper(imageCropperObject);
|
|
1760
|
-
imageShape.openRenderByCropper();
|
|
1761
|
-
transformer === null || transformer === void 0 || transformer.refreshControls();
|
|
1762
|
-
imageCropperObject.makeDirty(true);
|
|
1763
|
-
this._commandService.syncExecuteCommand(_univerjs_drawing.SetDrawingSelectedOperation.id, [{
|
|
1764
|
-
unitId,
|
|
1765
|
-
subUnitId,
|
|
1766
|
-
drawingId
|
|
1767
|
-
}]);
|
|
1768
1674
|
}));
|
|
1769
1675
|
}
|
|
1770
|
-
|
|
1771
|
-
|
|
1772
|
-
|
|
1773
|
-
|
|
1774
|
-
|
|
1775
|
-
|
|
1776
|
-
|
|
1777
|
-
|
|
1778
|
-
|
|
1779
|
-
|
|
1780
|
-
|
|
1781
|
-
|
|
1782
|
-
|
|
1783
|
-
|
|
1784
|
-
|
|
1785
|
-
|
|
1786
|
-
|
|
1787
|
-
|
|
1788
|
-
|
|
1789
|
-
|
|
1790
|
-
|
|
1791
|
-
|
|
1792
|
-
|
|
1793
|
-
|
|
1794
|
-
|
|
1795
|
-
|
|
1796
|
-
|
|
1797
|
-
|
|
1798
|
-
|
|
1799
|
-
|
|
1800
|
-
|
|
1801
|
-
|
|
1802
|
-
|
|
1803
|
-
|
|
1804
|
-
|
|
1805
|
-
|
|
1806
|
-
|
|
1807
|
-
|
|
1808
|
-
|
|
1809
|
-
|
|
1810
|
-
|
|
1811
|
-
|
|
1812
|
-
|
|
1813
|
-
|
|
1676
|
+
_drawingRefreshListener() {
|
|
1677
|
+
this.disposeWithMe(this._drawingManagerService.refreshTransform$.subscribe((params) => {
|
|
1678
|
+
params.forEach((param) => {
|
|
1679
|
+
var _setClipBounds2;
|
|
1680
|
+
const { unitId, subUnitId, drawingId } = param;
|
|
1681
|
+
const renderObject = this._getSceneAndTransformerByDrawingSearch(unitId);
|
|
1682
|
+
if (renderObject == null) return;
|
|
1683
|
+
const drawingParam = this._drawingManagerService.getDrawingByParam(param);
|
|
1684
|
+
if (drawingParam == null) return;
|
|
1685
|
+
const { transform } = drawingParam;
|
|
1686
|
+
const { scene } = renderObject;
|
|
1687
|
+
if (transform == null) return true;
|
|
1688
|
+
const drawingShapeKey = (0, _univerjs_drawing.getDrawingShapeKeyByDrawingSearch)({
|
|
1689
|
+
unitId,
|
|
1690
|
+
subUnitId,
|
|
1691
|
+
drawingId
|
|
1692
|
+
});
|
|
1693
|
+
const drawingShape = scene.getObjectIncludeInGroup(drawingShapeKey);
|
|
1694
|
+
const drawingParamWithRefreshMetadata = mergeRefreshMetadata(drawingParam, param);
|
|
1695
|
+
if (drawingShape == null) {
|
|
1696
|
+
if (drawingParamWithRefreshMetadata.hidden === true) return true;
|
|
1697
|
+
this._drawingManagerService.addNotification([{
|
|
1698
|
+
unitId,
|
|
1699
|
+
subUnitId,
|
|
1700
|
+
drawingId
|
|
1701
|
+
}]);
|
|
1702
|
+
return true;
|
|
1703
|
+
}
|
|
1704
|
+
const { left = 0, top = 0, width = 0, height = 0, angle = 0, flipX = false, flipY = false, skewX = 0, skewY = 0 } = transform;
|
|
1705
|
+
drawingShape.transformByState({
|
|
1706
|
+
left,
|
|
1707
|
+
top,
|
|
1708
|
+
width,
|
|
1709
|
+
height,
|
|
1710
|
+
angle,
|
|
1711
|
+
flipX,
|
|
1712
|
+
flipY,
|
|
1713
|
+
skewX,
|
|
1714
|
+
skewY
|
|
1715
|
+
});
|
|
1716
|
+
(_setClipBounds2 = drawingShape.setClipBounds) === null || _setClipBounds2 === void 0 || _setClipBounds2.call(drawingShape, transform.clipBounds);
|
|
1717
|
+
syncDrawingHiddenState(drawingShape, drawingParamWithRefreshMetadata);
|
|
1718
|
+
ensureDrawingRenderLayer(scene, drawingShape, drawingParamWithRefreshMetadata);
|
|
1719
|
+
});
|
|
1814
1720
|
}));
|
|
1815
1721
|
}
|
|
1816
|
-
|
|
1817
|
-
|
|
1818
|
-
|
|
1819
|
-
|
|
1820
|
-
|
|
1821
|
-
|
|
1822
|
-
|
|
1823
|
-
|
|
1824
|
-
|
|
1825
|
-
|
|
1826
|
-
|
|
1827
|
-
|
|
1828
|
-
|
|
1829
|
-
|
|
1830
|
-
|
|
1831
|
-
|
|
1832
|
-
|
|
1833
|
-
startTransform = {
|
|
1834
|
-
left,
|
|
1835
|
-
top,
|
|
1836
|
-
height,
|
|
1837
|
-
width,
|
|
1838
|
-
angle
|
|
1839
|
-
};
|
|
1840
|
-
transformer.clearCopperControl();
|
|
1841
|
-
}));
|
|
1842
|
-
this.disposeWithMe(transformer.changeEnd$.subscribe((state) => {
|
|
1843
|
-
const { objects } = state;
|
|
1844
|
-
const cropObject = objects.values().next().value;
|
|
1845
|
-
if (cropObject == null || !(cropObject instanceof ImageCropperObject)) return;
|
|
1846
|
-
const { left, top, height, width, angle } = cropObject;
|
|
1847
|
-
if (!(0, _univerjs_core.checkIfMove)({
|
|
1848
|
-
left,
|
|
1849
|
-
top,
|
|
1850
|
-
height,
|
|
1851
|
-
width,
|
|
1852
|
-
angle
|
|
1853
|
-
}, startTransform)) return;
|
|
1854
|
-
const applyObject = this._getApplyObjectByCropObject(cropObject);
|
|
1855
|
-
if (applyObject == null) return;
|
|
1856
|
-
const srcRect = this._getSrcRectByTransformState(applyObject, cropObject);
|
|
1857
|
-
cropObject.refreshSrcRect(srcRect.srcRect, applyObject.getState());
|
|
1858
|
-
transformer.createControlForCopper(cropObject);
|
|
1722
|
+
_drawingVisibleListener() {
|
|
1723
|
+
this.disposeWithMe(this._drawingManagerService.visible$.subscribe((params) => {
|
|
1724
|
+
params.forEach((param) => {
|
|
1725
|
+
const { unitId, subUnitId, drawingId, visible } = param;
|
|
1726
|
+
const renderObject = this._getSceneAndTransformerByDrawingSearch(unitId);
|
|
1727
|
+
if (renderObject == null) return;
|
|
1728
|
+
const { scene } = renderObject;
|
|
1729
|
+
const drawingShapeKey = (0, _univerjs_drawing.getDrawingShapeKeyByDrawingSearch)({
|
|
1730
|
+
unitId,
|
|
1731
|
+
subUnitId,
|
|
1732
|
+
drawingId
|
|
1733
|
+
});
|
|
1734
|
+
const drawingShape = scene.getObject(drawingShapeKey);
|
|
1735
|
+
if (drawingShape == null) return true;
|
|
1736
|
+
if (visible) drawingShape.show();
|
|
1737
|
+
else drawingShape.hide();
|
|
1738
|
+
});
|
|
1859
1739
|
}));
|
|
1860
|
-
this._endCropListener(scene);
|
|
1861
1740
|
}
|
|
1862
|
-
|
|
1863
|
-
|
|
1864
|
-
|
|
1865
|
-
|
|
1866
|
-
|
|
1867
|
-
|
|
1868
|
-
}));
|
|
1741
|
+
_filterUpdateParams(params, startTransforms) {
|
|
1742
|
+
return params.filter((param, index) => {
|
|
1743
|
+
if (param == null) return false;
|
|
1744
|
+
const { transform } = param;
|
|
1745
|
+
return (0, _univerjs_core.checkIfMove)(transform, startTransforms === null || startTransforms === void 0 ? void 0 : startTransforms[index]);
|
|
1746
|
+
});
|
|
1869
1747
|
}
|
|
1870
|
-
|
|
1748
|
+
_addListenerOnDrawing(scene) {
|
|
1871
1749
|
const transformer = scene.getTransformerByCreate();
|
|
1872
|
-
|
|
1873
|
-
|
|
1874
|
-
|
|
1875
|
-
|
|
1876
|
-
|
|
1877
|
-
|
|
1878
|
-
|
|
1879
|
-
|
|
1880
|
-
|
|
1881
|
-
|
|
1882
|
-
|
|
1883
|
-
|
|
1884
|
-
|
|
1885
|
-
|
|
1886
|
-
|
|
1887
|
-
|
|
1888
|
-
|
|
1889
|
-
|
|
1890
|
-
|
|
1891
|
-
|
|
1892
|
-
|
|
1893
|
-
|
|
1894
|
-
|
|
1895
|
-
|
|
1896
|
-
|
|
1897
|
-
|
|
1898
|
-
|
|
1899
|
-
|
|
1900
|
-
|
|
1901
|
-
|
|
1902
|
-
|
|
1903
|
-
|
|
1904
|
-
|
|
1905
|
-
|
|
1750
|
+
let startTransforms = null;
|
|
1751
|
+
this.disposeWithMe((0, _univerjs_core.toDisposable)(transformer.changeStart$.subscribe((state) => {
|
|
1752
|
+
const { objects } = state;
|
|
1753
|
+
const objectArray = Array.from(objects.values());
|
|
1754
|
+
const drawings = [];
|
|
1755
|
+
startTransforms = objectArray.map((object) => {
|
|
1756
|
+
const { left, top, height, width, angle, oKey, isInGroup } = object;
|
|
1757
|
+
const drawing = this._drawingManagerService.getDrawingOKey(oKey);
|
|
1758
|
+
if (isInGroup || object instanceof _univerjs_engine_render.Group) {
|
|
1759
|
+
let group = object.ancestorGroup;
|
|
1760
|
+
if (group == null && object instanceof _univerjs_engine_render.Group) group = object;
|
|
1761
|
+
if (group == null) return null;
|
|
1762
|
+
const groupDrawing = this._drawingManagerService.getDrawingOKey(group.oKey);
|
|
1763
|
+
if (groupDrawing) {
|
|
1764
|
+
const { unitId, subUnitId, drawingId } = groupDrawing;
|
|
1765
|
+
drawings.push({
|
|
1766
|
+
unitId,
|
|
1767
|
+
subUnitId,
|
|
1768
|
+
drawingId
|
|
1769
|
+
});
|
|
1770
|
+
const { left, top, height, width, angle } = group;
|
|
1771
|
+
return {
|
|
1772
|
+
left,
|
|
1773
|
+
top,
|
|
1774
|
+
height,
|
|
1775
|
+
width,
|
|
1776
|
+
angle
|
|
1777
|
+
};
|
|
1778
|
+
}
|
|
1779
|
+
} else if (drawing != null) {
|
|
1780
|
+
const { unitId, subUnitId, drawingId } = drawing;
|
|
1781
|
+
drawings.push({
|
|
1782
|
+
unitId,
|
|
1783
|
+
subUnitId,
|
|
1784
|
+
drawingId
|
|
1785
|
+
});
|
|
1786
|
+
return {
|
|
1787
|
+
left,
|
|
1788
|
+
top,
|
|
1789
|
+
height,
|
|
1790
|
+
width,
|
|
1791
|
+
angle
|
|
1792
|
+
};
|
|
1793
|
+
}
|
|
1794
|
+
return null;
|
|
1795
|
+
}).filter((transform) => transform != null);
|
|
1796
|
+
if (drawings.length > 0) this._commandService.syncExecuteCommand(_univerjs_drawing.SetDrawingSelectedOperation.id, drawings);
|
|
1797
|
+
else this._commandService.syncExecuteCommand(_univerjs_drawing.SetDrawingSelectedOperation.id, []);
|
|
1798
|
+
})));
|
|
1799
|
+
this.disposeWithMe((0, _univerjs_core.toDisposable)(transformer.changeEnd$.subscribe((state) => {
|
|
1800
|
+
const { objects } = state;
|
|
1801
|
+
const params = this._filterUpdateParams(getUpdateParams(objects, this._drawingManagerService), startTransforms);
|
|
1802
|
+
if (params.length > 0) this._drawingManagerService.featurePluginUpdateNotification(params);
|
|
1803
|
+
})));
|
|
1906
1804
|
}
|
|
1907
1805
|
};
|
|
1908
|
-
|
|
1909
|
-
__decorateParam(0, _univerjs_core.
|
|
1910
|
-
__decorateParam(1,
|
|
1806
|
+
DrawingUpdateController = __decorate([
|
|
1807
|
+
__decorateParam(0, _univerjs_core.IUniverInstanceService),
|
|
1808
|
+
__decorateParam(1, _univerjs_core.ICommandService),
|
|
1911
1809
|
__decorateParam(2, _univerjs_engine_render.IRenderManagerService),
|
|
1912
|
-
__decorateParam(3,
|
|
1913
|
-
|
|
1914
|
-
__decorateParam(5, (0, _univerjs_core.Inject)(_univerjs_core.LocaleService))
|
|
1915
|
-
], ImageCropperController);
|
|
1810
|
+
__decorateParam(3, _univerjs_drawing.IDrawingManagerService)
|
|
1811
|
+
], DrawingUpdateController);
|
|
1916
1812
|
|
|
1917
1813
|
//#endregion
|
|
1918
|
-
//#region src/
|
|
1919
|
-
|
|
1920
|
-
constructor(
|
|
1921
|
-
|
|
1922
|
-
|
|
1923
|
-
|
|
1924
|
-
|
|
1925
|
-
|
|
1926
|
-
|
|
1927
|
-
|
|
1928
|
-
|
|
1929
|
-
|
|
1814
|
+
//#region src/views/crop/image-cropper-object.ts
|
|
1815
|
+
var ImageCropperObject = class extends _univerjs_engine_render.Shape {
|
|
1816
|
+
constructor(key, props) {
|
|
1817
|
+
if (props == null) props = {};
|
|
1818
|
+
props.transformerConfig = {
|
|
1819
|
+
keepRatio: false,
|
|
1820
|
+
isCropper: true,
|
|
1821
|
+
anchorFill: "rgb(0, 0, 0)",
|
|
1822
|
+
anchorStroke: "rgb(255, 255, 255)",
|
|
1823
|
+
anchorSize: 24
|
|
1824
|
+
};
|
|
1825
|
+
super(key, props);
|
|
1826
|
+
_defineProperty(this, "_srcRect", void 0);
|
|
1827
|
+
_defineProperty(this, "_prstGeom", void 0);
|
|
1828
|
+
_defineProperty(this, "_applyTransform", void 0);
|
|
1829
|
+
_defineProperty(this, "_dragPadding", 8);
|
|
1830
|
+
_defineProperty(this, "_cacheCanvas", void 0);
|
|
1831
|
+
if (props === null || props === void 0 ? void 0 : props.srcRect) this._srcRect = props.srcRect;
|
|
1832
|
+
if (props === null || props === void 0 ? void 0 : props.prstGeom) this._prstGeom = props.prstGeom;
|
|
1833
|
+
if (props === null || props === void 0 ? void 0 : props.applyTransform) this._applyTransform = props.applyTransform;
|
|
1834
|
+
if (props === null || props === void 0 ? void 0 : props.dragPadding) this._dragPadding = props.dragPadding;
|
|
1835
|
+
this._applyProps();
|
|
1836
|
+
}
|
|
1837
|
+
refreshSrcRect(value, transform) {
|
|
1838
|
+
this._srcRect = value;
|
|
1839
|
+
this._applyTransform = transform;
|
|
1840
|
+
this._applyProps();
|
|
1841
|
+
}
|
|
1842
|
+
get srcRect() {
|
|
1843
|
+
return this._srcRect;
|
|
1930
1844
|
}
|
|
1931
1845
|
dispose() {
|
|
1846
|
+
var _this$_cacheCanvas;
|
|
1932
1847
|
super.dispose();
|
|
1848
|
+
(_this$_cacheCanvas = this._cacheCanvas) === null || _this$_cacheCanvas === void 0 || _this$_cacheCanvas.dispose();
|
|
1849
|
+
this._srcRect = null;
|
|
1933
1850
|
}
|
|
1934
|
-
|
|
1935
|
-
this.
|
|
1936
|
-
this.
|
|
1937
|
-
|
|
1851
|
+
isHit(coord) {
|
|
1852
|
+
const oCoord = this.getInverseCoord(coord);
|
|
1853
|
+
if (oCoord.x >= -this.strokeWidth / 2 && oCoord.x <= this.width + this.strokeWidth / 2 && oCoord.y >= -this.strokeWidth / 2 && oCoord.y <= this.height + this.strokeWidth / 2 && !this._inSurround(oCoord)) return true;
|
|
1854
|
+
return false;
|
|
1938
1855
|
}
|
|
1939
|
-
|
|
1940
|
-
this.
|
|
1941
|
-
|
|
1942
|
-
|
|
1943
|
-
if (params == null) return;
|
|
1944
|
-
this._resetImageSize(params);
|
|
1945
|
-
}
|
|
1946
|
-
}));
|
|
1856
|
+
_inSurround(oCoord) {
|
|
1857
|
+
const padding = this._dragPadding;
|
|
1858
|
+
if (oCoord.x >= padding - this.strokeWidth / 2 && oCoord.x <= this.width + this.strokeWidth / 2 - padding && oCoord.y >= padding - this.strokeWidth / 2 && oCoord.y <= this.height + this.strokeWidth / 2 - padding) return true;
|
|
1859
|
+
return false;
|
|
1947
1860
|
}
|
|
1948
|
-
|
|
1949
|
-
if (
|
|
1950
|
-
|
|
1951
|
-
|
|
1952
|
-
|
|
1953
|
-
|
|
1954
|
-
|
|
1955
|
-
|
|
1956
|
-
|
|
1861
|
+
render(mainCtx, bounds) {
|
|
1862
|
+
if (!this.visible) {
|
|
1863
|
+
this.makeDirty(false);
|
|
1864
|
+
return this;
|
|
1865
|
+
}
|
|
1866
|
+
mainCtx.save();
|
|
1867
|
+
this._draw(mainCtx);
|
|
1868
|
+
mainCtx.restore();
|
|
1869
|
+
this.makeDirty(false);
|
|
1870
|
+
return this;
|
|
1957
1871
|
}
|
|
1958
|
-
|
|
1959
|
-
|
|
1960
|
-
const
|
|
1961
|
-
|
|
1962
|
-
|
|
1963
|
-
|
|
1964
|
-
|
|
1965
|
-
|
|
1966
|
-
|
|
1967
|
-
|
|
1968
|
-
|
|
1969
|
-
|
|
1970
|
-
|
|
1971
|
-
|
|
1972
|
-
if (imageShape == null) return true;
|
|
1973
|
-
const imageData = this._drawingManagerService.getDrawingByParam(param);
|
|
1974
|
-
if (imageData == null) return true;
|
|
1975
|
-
if (imageData.drawingType !== _univerjs_core.DrawingTypeEnum.DRAWING_IMAGE) return;
|
|
1976
|
-
imageShape.resetSize();
|
|
1977
|
-
const { width, height } = imageShape.getNativeSize();
|
|
1978
|
-
if (sceneList.includes(scene) === false) sceneList.push(scene);
|
|
1979
|
-
updateParams.push({
|
|
1980
|
-
...imageData,
|
|
1981
|
-
transform: {
|
|
1982
|
-
...imageData.transform,
|
|
1983
|
-
height,
|
|
1984
|
-
width,
|
|
1985
|
-
angle: 0
|
|
1986
|
-
},
|
|
1987
|
-
srcRect: null,
|
|
1988
|
-
prstGeom: null
|
|
1989
|
-
});
|
|
1990
|
-
});
|
|
1991
|
-
this._drawingManagerService.featurePluginUpdateNotification(updateParams);
|
|
1992
|
-
sceneList.forEach((scene) => {
|
|
1993
|
-
scene.getTransformerByCreate().refreshControls().changeNotification();
|
|
1872
|
+
_draw(ctx) {
|
|
1873
|
+
var _this$_cacheCanvas2, _this$_cacheCanvas3;
|
|
1874
|
+
const { width: engineWidth, height: engineHeight } = this.getScene().getEngine();
|
|
1875
|
+
this._initialCacheCanvas();
|
|
1876
|
+
(_this$_cacheCanvas2 = this._cacheCanvas) === null || _this$_cacheCanvas2 === void 0 || _this$_cacheCanvas2.clear();
|
|
1877
|
+
const cacheCtx = (_this$_cacheCanvas3 = this._cacheCanvas) === null || _this$_cacheCanvas3 === void 0 ? void 0 : _this$_cacheCanvas3.getContext();
|
|
1878
|
+
if (cacheCtx == null) return;
|
|
1879
|
+
cacheCtx.save();
|
|
1880
|
+
_univerjs_engine_render.Rect.drawWith(cacheCtx, {
|
|
1881
|
+
left: 0,
|
|
1882
|
+
top: 0,
|
|
1883
|
+
width: engineWidth,
|
|
1884
|
+
height: engineHeight,
|
|
1885
|
+
fill: "rgba(0, 0, 0, 0.5)"
|
|
1994
1886
|
});
|
|
1995
|
-
|
|
1887
|
+
cacheCtx.setTransform(ctx.getTransform());
|
|
1888
|
+
this._clipForApplyObject(cacheCtx);
|
|
1889
|
+
this._applyCache(ctx);
|
|
1890
|
+
cacheCtx.restore();
|
|
1996
1891
|
}
|
|
1997
|
-
|
|
1998
|
-
|
|
1999
|
-
|
|
2000
|
-
|
|
2001
|
-
|
|
2002
|
-
|
|
2003
|
-
this.
|
|
2004
|
-
|
|
1892
|
+
_clipForApplyObject(cacheCtx) {
|
|
1893
|
+
let objectType = 0;
|
|
1894
|
+
if (this._prstGeom != null) objectType = 1;
|
|
1895
|
+
cacheCtx.globalCompositeOperation = "destination-out";
|
|
1896
|
+
cacheCtx.beginPath();
|
|
1897
|
+
if (objectType === 0) {
|
|
1898
|
+
const m = this.transform.getMatrix();
|
|
1899
|
+
cacheCtx.transform(m[0], m[1], m[2], m[3], m[4], m[5]);
|
|
1900
|
+
cacheCtx.rect(0, 0, this.width, this.height);
|
|
1901
|
+
cacheCtx.fill();
|
|
1902
|
+
}
|
|
2005
1903
|
}
|
|
2006
|
-
|
|
2007
|
-
|
|
2008
|
-
|
|
2009
|
-
|
|
2010
|
-
|
|
2011
|
-
|
|
2012
|
-
|
|
2013
|
-
|
|
2014
|
-
|
|
2015
|
-
|
|
2016
|
-
|
|
2017
|
-
|
|
2018
|
-
|
|
2019
|
-
|
|
2020
|
-
|
|
2021
|
-
|
|
1904
|
+
_applyProps() {
|
|
1905
|
+
if (this._applyTransform == null) return;
|
|
1906
|
+
let cropLeft = 0;
|
|
1907
|
+
let cropTop = 0;
|
|
1908
|
+
let cropRight = 0;
|
|
1909
|
+
let cropBottom = 0;
|
|
1910
|
+
const { left: applyLeft = 0, top: applyTop = 0, width: applyWidth = 0, height: applyHeight = 0, angle } = this._applyTransform;
|
|
1911
|
+
if (this._srcRect != null) {
|
|
1912
|
+
const { left = 0, top = 0, right = 0, bottom = 0 } = this._srcRect;
|
|
1913
|
+
cropLeft = left;
|
|
1914
|
+
cropTop = top;
|
|
1915
|
+
cropRight = right;
|
|
1916
|
+
cropBottom = bottom;
|
|
1917
|
+
}
|
|
1918
|
+
const left = applyLeft + cropLeft;
|
|
1919
|
+
const top = applyTop + cropTop;
|
|
1920
|
+
this.transformByState({
|
|
1921
|
+
left,
|
|
1922
|
+
top,
|
|
1923
|
+
width: applyLeft + applyWidth - cropRight - left,
|
|
1924
|
+
height: applyTop + applyHeight - cropBottom - top,
|
|
1925
|
+
angle
|
|
2022
1926
|
});
|
|
2023
1927
|
}
|
|
2024
|
-
|
|
2025
|
-
|
|
2026
|
-
|
|
2027
|
-
|
|
2028
|
-
|
|
2029
|
-
|
|
2030
|
-
|
|
2031
|
-
|
|
2032
|
-
|
|
2033
|
-
|
|
2034
|
-
if (renderObject == null) return;
|
|
2035
|
-
const { scene, transformer } = renderObject;
|
|
2036
|
-
if (transform == null) return true;
|
|
2037
|
-
const drawingShapeKey = (0, _univerjs_drawing.getDrawingShapeKeyByDrawingSearch)({
|
|
2038
|
-
unitId,
|
|
2039
|
-
subUnitId,
|
|
2040
|
-
drawingId
|
|
2041
|
-
});
|
|
2042
|
-
const imageShape = scene.getObject(drawingShapeKey);
|
|
2043
|
-
if (imageShape == null) return true;
|
|
2044
|
-
imageShape.transformByState(transform);
|
|
2045
|
-
(_setClipBounds = imageShape.setClipBounds) === null || _setClipBounds === void 0 || _setClipBounds.call(imageShape, transform.clipBounds);
|
|
2046
|
-
ensureDrawingRenderLayer(scene, imageShape, drawingParam);
|
|
2047
|
-
imageShape.setSrcRect(srcRect);
|
|
2048
|
-
imageShape.setPrstGeom(prstGeom);
|
|
2049
|
-
if (source != null && source.length > 0 && (imageSourceType === _univerjs_core.ImageSourceType.BASE64 || imageSourceType === _univerjs_core.ImageSourceType.URL)) imageShape.changeSource(source);
|
|
2050
|
-
});
|
|
2051
|
-
}));
|
|
2052
|
-
}
|
|
2053
|
-
_addHoverForImage(o) {
|
|
2054
|
-
this.disposeWithMe((0, _univerjs_core.toDisposable)(o.onPointerEnter$.subscribeEvent(() => {
|
|
2055
|
-
o.cursor = _univerjs_engine_render.CURSOR_TYPE.GRAB;
|
|
2056
|
-
})));
|
|
2057
|
-
this.disposeWithMe((0, _univerjs_core.toDisposable)(o.onPointerLeave$.subscribeEvent(() => {
|
|
2058
|
-
o.cursor = _univerjs_engine_render.CURSOR_TYPE.DEFAULT;
|
|
2059
|
-
})));
|
|
1928
|
+
_applyCache(ctx) {
|
|
1929
|
+
if (!ctx || this._cacheCanvas == null) return;
|
|
1930
|
+
const cacheCtx = this._cacheCanvas.getContext();
|
|
1931
|
+
cacheCtx.save();
|
|
1932
|
+
ctx.save();
|
|
1933
|
+
ctx.setTransform(1, 0, 0, 1, 0, 0);
|
|
1934
|
+
cacheCtx.setTransform(1, 0, 0, 1, 0, 0);
|
|
1935
|
+
ctx.drawImage(this._cacheCanvas.getCanvasEle(), 0, 0);
|
|
1936
|
+
ctx.restore();
|
|
1937
|
+
cacheCtx.restore();
|
|
2060
1938
|
}
|
|
2061
|
-
|
|
2062
|
-
this.
|
|
2063
|
-
|
|
2064
|
-
|
|
2065
|
-
|
|
1939
|
+
_initialCacheCanvas() {
|
|
1940
|
+
if (this._cacheCanvas != null) return;
|
|
1941
|
+
const scene = this.getScene();
|
|
1942
|
+
if (scene == null) return;
|
|
1943
|
+
this._cacheCanvas = new _univerjs_engine_render.Canvas();
|
|
1944
|
+
const engine = scene.getEngine();
|
|
1945
|
+
this._cacheCanvas.setSize(engine.width, engine.height);
|
|
1946
|
+
engine.onTransformChange$.subscribeEvent(() => {
|
|
1947
|
+
var _this$_cacheCanvas4;
|
|
1948
|
+
(_this$_cacheCanvas4 = this._cacheCanvas) === null || _this$_cacheCanvas4 === void 0 || _this$_cacheCanvas4.setSize(engine.width, engine.height);
|
|
1949
|
+
this.makeDirty(true);
|
|
1950
|
+
});
|
|
2066
1951
|
}
|
|
2067
1952
|
};
|
|
2068
|
-
ImageUpdateController = __decorate([
|
|
2069
|
-
__decorateParam(0, _univerjs_core.ICommandService),
|
|
2070
|
-
__decorateParam(1, _univerjs_engine_render.IRenderManagerService),
|
|
2071
|
-
__decorateParam(2, _univerjs_drawing.IDrawingManagerService),
|
|
2072
|
-
__decorateParam(3, _univerjs_ui.IDialogService),
|
|
2073
|
-
__decorateParam(4, _univerjs_drawing.IImageIoService),
|
|
2074
|
-
__decorateParam(5, _univerjs_core.IUniverInstanceService),
|
|
2075
|
-
__decorateParam(6, (0, _univerjs_core.Inject)(DrawingRenderService))
|
|
2076
|
-
], ImageUpdateController);
|
|
2077
1953
|
|
|
2078
1954
|
//#endregion
|
|
2079
|
-
//#region src/
|
|
2080
|
-
|
|
2081
|
-
|
|
2082
|
-
|
|
2083
|
-
|
|
2084
|
-
|
|
2085
|
-
|
|
2086
|
-
|
|
1955
|
+
//#region src/controllers/image-cropper.controller.ts
|
|
1956
|
+
let ImageCropperController = class ImageCropperController extends _univerjs_core.Disposable {
|
|
1957
|
+
constructor(_commandService, _drawingManagerService, _renderManagerService, _univerInstanceService, _messageService, _localeService) {
|
|
1958
|
+
super();
|
|
1959
|
+
this._commandService = _commandService;
|
|
1960
|
+
this._drawingManagerService = _drawingManagerService;
|
|
1961
|
+
this._renderManagerService = _renderManagerService;
|
|
1962
|
+
this._univerInstanceService = _univerInstanceService;
|
|
1963
|
+
this._messageService = _messageService;
|
|
1964
|
+
this._localeService = _localeService;
|
|
1965
|
+
_defineProperty(this, "_sceneListenerOnImageMap", /* @__PURE__ */ new WeakSet());
|
|
1966
|
+
this._init();
|
|
1967
|
+
}
|
|
1968
|
+
_init() {
|
|
1969
|
+
this._initOpenCrop();
|
|
1970
|
+
this._initCloseCrop();
|
|
1971
|
+
this._initAutoCrop();
|
|
1972
|
+
}
|
|
1973
|
+
_initAutoCrop() {
|
|
1974
|
+
this.disposeWithMe(this._commandService.onCommandExecuted((command) => {
|
|
1975
|
+
if (command.id !== AutoImageCropOperation.id) return;
|
|
1976
|
+
const params = command.params;
|
|
1977
|
+
if (params == null) return;
|
|
1978
|
+
const { cropType } = params;
|
|
1979
|
+
const drawingParams = this._drawingManagerService.getFocusDrawings();
|
|
1980
|
+
if (drawingParams.length !== 1) return;
|
|
1981
|
+
const { unitId, subUnitId, drawingId } = drawingParams[0];
|
|
1982
|
+
const renderObject = this._renderManagerService.getRenderById(unitId);
|
|
1983
|
+
const scene = renderObject === null || renderObject === void 0 ? void 0 : renderObject.scene;
|
|
1984
|
+
if (scene == null) return true;
|
|
1985
|
+
if (this._searchCropObject(scene) != null) this._commandService.syncExecuteCommand(CloseImageCropOperation.id, { isAuto: true });
|
|
1986
|
+
const imageShapeKey = (0, _univerjs_drawing.getDrawingShapeKeyByDrawingSearch)({
|
|
1987
|
+
unitId,
|
|
1988
|
+
subUnitId,
|
|
1989
|
+
drawingId
|
|
1990
|
+
});
|
|
1991
|
+
const imageShape = scene.getObject(imageShapeKey);
|
|
1992
|
+
if (!(imageShape instanceof _univerjs_engine_render.Image)) {
|
|
1993
|
+
this._messageService.show({
|
|
1994
|
+
type: _univerjs_design.MessageType.Error,
|
|
1995
|
+
content: this._localeService.t("drawing-ui.image-cropper.error")
|
|
1996
|
+
});
|
|
1997
|
+
return;
|
|
1998
|
+
}
|
|
1999
|
+
if (imageShape == null) return;
|
|
2000
|
+
this._updateCropperObject(cropType, imageShape);
|
|
2001
|
+
this._commandService.executeCommand(OpenImageCropOperation.id, {
|
|
2002
|
+
unitId,
|
|
2003
|
+
subUnitId,
|
|
2004
|
+
drawingId
|
|
2005
|
+
});
|
|
2006
|
+
}));
|
|
2007
|
+
}
|
|
2008
|
+
_calculateSrcRectByRatio(left, top, width, height, numerator, denominator) {
|
|
2009
|
+
const srcRatio = width / height;
|
|
2010
|
+
const ratio = numerator / denominator;
|
|
2011
|
+
let newWidth = width;
|
|
2012
|
+
let newHeight = height;
|
|
2013
|
+
if (srcRatio > ratio) newWidth = height * ratio;
|
|
2014
|
+
else newHeight = width / ratio;
|
|
2015
|
+
const newLeft = (width - newWidth) / 2;
|
|
2016
|
+
const newTop = (height - newHeight) / 2;
|
|
2017
|
+
return {
|
|
2018
|
+
left: (0, _univerjs_engine_render.precisionTo)(newLeft, 1),
|
|
2019
|
+
top: (0, _univerjs_engine_render.precisionTo)(newTop, 1),
|
|
2020
|
+
right: (0, _univerjs_engine_render.precisionTo)(width - (newLeft + newWidth), 1),
|
|
2021
|
+
bottom: (0, _univerjs_engine_render.precisionTo)(height - (newTop + newHeight), 1)
|
|
2087
2022
|
};
|
|
2088
|
-
|
|
2089
|
-
|
|
2090
|
-
|
|
2091
|
-
|
|
2092
|
-
|
|
2093
|
-
|
|
2094
|
-
|
|
2095
|
-
|
|
2096
|
-
|
|
2097
|
-
|
|
2098
|
-
|
|
2099
|
-
|
|
2100
|
-
|
|
2101
|
-
|
|
2102
|
-
|
|
2103
|
-
|
|
2104
|
-
|
|
2105
|
-
|
|
2106
|
-
|
|
2107
|
-
|
|
2108
|
-
|
|
2109
|
-
|
|
2110
|
-
|
|
2111
|
-
|
|
2112
|
-
|
|
2113
|
-
|
|
2114
|
-
|
|
2115
|
-
|
|
2116
|
-
|
|
2117
|
-
|
|
2118
|
-
|
|
2119
|
-
|
|
2120
|
-
|
|
2121
|
-
|
|
2122
|
-
|
|
2123
|
-
|
|
2124
|
-
|
|
2125
|
-
|
|
2126
|
-
|
|
2127
|
-
|
|
2128
|
-
|
|
2129
|
-
|
|
2130
|
-
|
|
2131
|
-
return {
|
|
2132
|
-
id: SetDrawingAlignTopOperation.id,
|
|
2133
|
-
type: _univerjs_ui.MenuItemType.BUTTON,
|
|
2134
|
-
icon: "AlignTopIcon",
|
|
2135
|
-
title: "drawing-ui.image-panel.align.top"
|
|
2136
|
-
};
|
|
2137
|
-
}
|
|
2138
|
-
function SetDrawingAlignMiddleMenuItemFactory() {
|
|
2139
|
-
return {
|
|
2140
|
-
id: SetDrawingAlignMiddleOperation.id,
|
|
2141
|
-
type: _univerjs_ui.MenuItemType.BUTTON,
|
|
2142
|
-
icon: "VerticalCenterIcon",
|
|
2143
|
-
title: "drawing-ui.image-panel.align.middle"
|
|
2144
|
-
};
|
|
2145
|
-
}
|
|
2146
|
-
function SetDrawingAlignBottomMenuItemFactory() {
|
|
2147
|
-
return {
|
|
2148
|
-
id: SetDrawingAlignBottomOperation.id,
|
|
2149
|
-
type: _univerjs_ui.MenuItemType.BUTTON,
|
|
2150
|
-
icon: "AlignBottomIcon",
|
|
2151
|
-
title: "drawing-ui.image-panel.align.bottom"
|
|
2152
|
-
};
|
|
2153
|
-
}
|
|
2154
|
-
function SetDrawingAlignHorizonMenuItemFactory() {
|
|
2155
|
-
return {
|
|
2156
|
-
id: SetDrawingAlignHorizonOperation.id,
|
|
2157
|
-
type: _univerjs_ui.MenuItemType.BUTTON,
|
|
2158
|
-
icon: "HorizontallyIcon",
|
|
2159
|
-
title: "drawing-ui.image-panel.align.horizon"
|
|
2160
|
-
};
|
|
2161
|
-
}
|
|
2162
|
-
function SetDrawingAlignVerticalMenuItemFactory() {
|
|
2163
|
-
return {
|
|
2164
|
-
id: SetDrawingAlignVerticalOperation.id,
|
|
2165
|
-
type: _univerjs_ui.MenuItemType.BUTTON,
|
|
2166
|
-
icon: "VerticalCenterIcon",
|
|
2167
|
-
title: "drawing-ui.image-panel.align.vertical"
|
|
2168
|
-
};
|
|
2169
|
-
}
|
|
2170
|
-
|
|
2171
|
-
//#endregion
|
|
2172
|
-
//#region src/menu/arrange.menu.ts
|
|
2173
|
-
const DRAWING_ARRANGE_CONTEXT_MENU_ID = "contextMenu.drawing-arrange";
|
|
2174
|
-
function DrawingArrangeContextMenuItemFactory() {
|
|
2175
|
-
return {
|
|
2176
|
-
id: DRAWING_ARRANGE_CONTEXT_MENU_ID,
|
|
2177
|
-
type: _univerjs_ui.MenuItemType.SUBITEMS,
|
|
2178
|
-
icon: "TopmostIcon",
|
|
2179
|
-
title: "drawing-ui.image-panel.arrange.title"
|
|
2180
|
-
};
|
|
2181
|
-
}
|
|
2182
|
-
function SetDrawingArrangeFrontMenuItemFactory() {
|
|
2183
|
-
return {
|
|
2184
|
-
id: SetDrawingArrangeFrontOperation.id,
|
|
2185
|
-
type: _univerjs_ui.MenuItemType.BUTTON,
|
|
2186
|
-
icon: "TopmostIcon",
|
|
2187
|
-
title: "drawing-ui.image-panel.arrange.front"
|
|
2188
|
-
};
|
|
2189
|
-
}
|
|
2190
|
-
function SetDrawingArrangeForwardMenuItemFactory() {
|
|
2191
|
-
return {
|
|
2192
|
-
id: SetDrawingArrangeForwardOperation.id,
|
|
2193
|
-
type: _univerjs_ui.MenuItemType.BUTTON,
|
|
2194
|
-
icon: "MoveUpIcon",
|
|
2195
|
-
title: "drawing-ui.image-panel.arrange.forward"
|
|
2196
|
-
};
|
|
2197
|
-
}
|
|
2198
|
-
function SetDrawingArrangeBackMenuItemFactory() {
|
|
2199
|
-
return {
|
|
2200
|
-
id: SetDrawingArrangeBackOperation.id,
|
|
2201
|
-
type: _univerjs_ui.MenuItemType.BUTTON,
|
|
2202
|
-
icon: "BottomIcon",
|
|
2203
|
-
title: "drawing-ui.image-panel.arrange.back"
|
|
2204
|
-
};
|
|
2205
|
-
}
|
|
2206
|
-
function SetDrawingArrangeBackwardMenuItemFactory() {
|
|
2207
|
-
return {
|
|
2208
|
-
id: SetDrawingArrangeBackwardOperation.id,
|
|
2209
|
-
type: _univerjs_ui.MenuItemType.BUTTON,
|
|
2210
|
-
icon: "MoveDownIcon",
|
|
2211
|
-
title: "drawing-ui.image-panel.arrange.backward"
|
|
2212
|
-
};
|
|
2213
|
-
}
|
|
2214
|
-
|
|
2215
|
-
//#endregion
|
|
2216
|
-
//#region src/menu/group.menu.ts
|
|
2217
|
-
function getMenuStateByDrawingFocusChangedObservable$(accessor, type) {
|
|
2218
|
-
const drawingManagerService = accessor.get(_univerjs_drawing.IDrawingManagerService);
|
|
2219
|
-
return new rxjs.Observable((subscriber) => {
|
|
2220
|
-
const update = (drawings) => {
|
|
2221
|
-
if (!drawings || drawings.length === 0) return subscriber.next(true);
|
|
2222
|
-
if (type === "group") {
|
|
2223
|
-
if (drawings.length < 2) return subscriber.next(true);
|
|
2224
|
-
if (!drawings.every((drawing) => DRAWING_GROUP_TYPES.includes(drawing.drawingType))) return subscriber.next(true);
|
|
2225
|
-
} else if (type === "unGroup") {
|
|
2226
|
-
if (drawings.filter((drawing) => drawing.drawingType === _univerjs_core.DrawingTypeEnum.DRAWING_GROUP).length === 0) return subscriber.next(true);
|
|
2227
|
-
} else if (!drawings.every((drawing) => DRAWING_GROUP_TYPES.includes(drawing.drawingType))) return subscriber.next(true);
|
|
2228
|
-
subscriber.next(false);
|
|
2229
|
-
};
|
|
2230
|
-
const subscription = drawingManagerService.focus$.subscribe((drawings) => {
|
|
2231
|
-
if (!drawings || drawings.length === 0) return subscriber.next(true);
|
|
2232
|
-
update(drawings);
|
|
2023
|
+
}
|
|
2024
|
+
_updateCropperObject(cropType, imageShape) {
|
|
2025
|
+
const { left, top, width, height } = imageShape.calculateTransformWithSrcRect();
|
|
2026
|
+
let newSrcRect;
|
|
2027
|
+
switch (cropType) {
|
|
2028
|
+
case "1":
|
|
2029
|
+
newSrcRect = this._calculateSrcRectByRatio(left, top, width, height, 1, 1);
|
|
2030
|
+
break;
|
|
2031
|
+
case "2":
|
|
2032
|
+
newSrcRect = this._calculateSrcRectByRatio(left, top, width, height, 16, 9);
|
|
2033
|
+
break;
|
|
2034
|
+
case "3":
|
|
2035
|
+
newSrcRect = this._calculateSrcRectByRatio(left, top, width, height, 9, 16);
|
|
2036
|
+
break;
|
|
2037
|
+
case "4":
|
|
2038
|
+
newSrcRect = this._calculateSrcRectByRatio(left, top, width, height, 5, 4);
|
|
2039
|
+
break;
|
|
2040
|
+
case "5":
|
|
2041
|
+
newSrcRect = this._calculateSrcRectByRatio(left, top, width, height, 4, 5);
|
|
2042
|
+
break;
|
|
2043
|
+
case "6":
|
|
2044
|
+
newSrcRect = this._calculateSrcRectByRatio(left, top, width, height, 4, 3);
|
|
2045
|
+
break;
|
|
2046
|
+
case "7":
|
|
2047
|
+
newSrcRect = this._calculateSrcRectByRatio(left, top, width, height, 3, 4);
|
|
2048
|
+
break;
|
|
2049
|
+
case "8":
|
|
2050
|
+
newSrcRect = this._calculateSrcRectByRatio(left, top, width, height, 3, 2);
|
|
2051
|
+
break;
|
|
2052
|
+
case "9":
|
|
2053
|
+
newSrcRect = this._calculateSrcRectByRatio(left, top, width, height, 2, 3);
|
|
2054
|
+
break;
|
|
2055
|
+
case "0":
|
|
2056
|
+
default: break;
|
|
2057
|
+
}
|
|
2058
|
+
if (newSrcRect == null) return;
|
|
2059
|
+
imageShape.setSrcRect(newSrcRect);
|
|
2060
|
+
const { left: newLeft = 0, top: newTop = 0, bottom: newBottom = 0, right: newRight = 0 } = newSrcRect;
|
|
2061
|
+
imageShape.transformByStateCloseCropper({
|
|
2062
|
+
left: left + newLeft,
|
|
2063
|
+
top: top + newTop,
|
|
2064
|
+
width: width - newRight - newLeft,
|
|
2065
|
+
height: height - newBottom - newTop
|
|
2233
2066
|
});
|
|
2234
|
-
|
|
2235
|
-
|
|
2236
|
-
|
|
2237
|
-
|
|
2238
|
-
const
|
|
2239
|
-
|
|
2240
|
-
|
|
2241
|
-
|
|
2242
|
-
|
|
2243
|
-
|
|
2244
|
-
|
|
2245
|
-
|
|
2246
|
-
|
|
2247
|
-
}
|
|
2248
|
-
|
|
2249
|
-
|
|
2250
|
-
|
|
2251
|
-
|
|
2252
|
-
|
|
2253
|
-
|
|
2254
|
-
|
|
2255
|
-
|
|
2256
|
-
|
|
2257
|
-
|
|
2258
|
-
|
|
2259
|
-
|
|
2260
|
-
|
|
2261
|
-
|
|
2262
|
-
|
|
2263
|
-
|
|
2264
|
-
|
|
2265
|
-
|
|
2067
|
+
}
|
|
2068
|
+
_initOpenCrop() {
|
|
2069
|
+
this.disposeWithMe(this._commandService.onCommandExecuted((command) => {
|
|
2070
|
+
if (command.id !== OpenImageCropOperation.id) return;
|
|
2071
|
+
const params = command.params;
|
|
2072
|
+
if (params == null) return;
|
|
2073
|
+
const { unitId, subUnitId, drawingId } = params;
|
|
2074
|
+
const renderObject = this._renderManagerService.getRenderById(unitId);
|
|
2075
|
+
const scene = renderObject === null || renderObject === void 0 ? void 0 : renderObject.scene;
|
|
2076
|
+
if (scene == null) return true;
|
|
2077
|
+
if (!this._sceneListenerOnImageMap.has(scene)) {
|
|
2078
|
+
this._addListenerOnImage(scene);
|
|
2079
|
+
this._sceneListenerOnImageMap.add(scene);
|
|
2080
|
+
}
|
|
2081
|
+
if (this._drawingManagerService.getDrawingByParam({
|
|
2082
|
+
unitId,
|
|
2083
|
+
subUnitId,
|
|
2084
|
+
drawingId
|
|
2085
|
+
}) == null) return;
|
|
2086
|
+
const imageShapeKey = (0, _univerjs_drawing.getDrawingShapeKeyByDrawingSearch)({
|
|
2087
|
+
unitId,
|
|
2088
|
+
subUnitId,
|
|
2089
|
+
drawingId
|
|
2090
|
+
});
|
|
2091
|
+
const imageShape = scene.getObject(imageShapeKey);
|
|
2092
|
+
if (imageShape == null) return;
|
|
2093
|
+
if (!(imageShape instanceof _univerjs_engine_render.Image)) {
|
|
2094
|
+
this._messageService.show({
|
|
2095
|
+
type: _univerjs_design.MessageType.Error,
|
|
2096
|
+
content: this._localeService.t("drawing-ui.image-cropper.error")
|
|
2097
|
+
});
|
|
2098
|
+
return;
|
|
2099
|
+
}
|
|
2100
|
+
const transformer = scene.getTransformer();
|
|
2101
|
+
transformer === null || transformer === void 0 || transformer.clearControls();
|
|
2102
|
+
const imageCropperObject = new ImageCropperObject(`${imageShapeKey}-crop`, {
|
|
2103
|
+
srcRect: imageShape.srcRect,
|
|
2104
|
+
prstGeom: imageShape.prstGeom,
|
|
2105
|
+
applyTransform: imageShape.calculateTransformWithSrcRect()
|
|
2106
|
+
});
|
|
2107
|
+
scene.addObject(imageCropperObject, imageShape.getLayerIndex() + 1).attachTransformerTo(imageCropperObject);
|
|
2108
|
+
transformer === null || transformer === void 0 || transformer.createControlForCopper(imageCropperObject);
|
|
2109
|
+
this._addHoverForImageCopper(imageCropperObject);
|
|
2110
|
+
imageShape.openRenderByCropper();
|
|
2111
|
+
transformer === null || transformer === void 0 || transformer.refreshControls();
|
|
2112
|
+
imageCropperObject.makeDirty(true);
|
|
2113
|
+
this._commandService.syncExecuteCommand(_univerjs_drawing.SetDrawingSelectedOperation.id, [{
|
|
2114
|
+
unitId,
|
|
2115
|
+
subUnitId,
|
|
2116
|
+
drawingId
|
|
2117
|
+
}]);
|
|
2118
|
+
}));
|
|
2119
|
+
}
|
|
2120
|
+
_searchCropObject(scene) {
|
|
2121
|
+
const objects = scene.getAllObjectsByOrder();
|
|
2122
|
+
for (const object of objects) if (object instanceof ImageCropperObject) return object;
|
|
2123
|
+
}
|
|
2124
|
+
_initCloseCrop() {
|
|
2125
|
+
this.disposeWithMe(this._commandService.onCommandExecuted((command) => {
|
|
2126
|
+
if (command.id !== CloseImageCropOperation.id) return;
|
|
2127
|
+
const currentUnit = this._univerInstanceService.getFocusedUnit();
|
|
2128
|
+
if (currentUnit == null) return;
|
|
2129
|
+
const unitId = currentUnit.getUnitId();
|
|
2130
|
+
const renderObject = this._renderManagerService.getRenderById(unitId);
|
|
2131
|
+
const scene = renderObject === null || renderObject === void 0 ? void 0 : renderObject.scene;
|
|
2132
|
+
if (scene == null) return true;
|
|
2133
|
+
const imageCropperObject = this._searchCropObject(scene);
|
|
2134
|
+
if (imageCropperObject == null) return;
|
|
2135
|
+
const imageShape = this._getApplyObjectByCropObject(imageCropperObject);
|
|
2136
|
+
if (imageShape == null) return;
|
|
2137
|
+
const transformer = scene.getTransformerByCreate();
|
|
2138
|
+
transformer.detachFrom(imageCropperObject);
|
|
2139
|
+
transformer.clearCopperControl();
|
|
2140
|
+
const srcRect = this._getSrcRectByTransformState(imageShape, imageCropperObject);
|
|
2141
|
+
const drawingParam = this._drawingManagerService.getDrawingOKey(imageShape.oKey);
|
|
2142
|
+
if (drawingParam != null) {
|
|
2143
|
+
const { left, top, height, width } = imageCropperObject;
|
|
2144
|
+
this._drawingManagerService.featurePluginUpdateNotification([{
|
|
2145
|
+
...drawingParam,
|
|
2146
|
+
transform: {
|
|
2147
|
+
...drawingParam.transform,
|
|
2148
|
+
left,
|
|
2149
|
+
top,
|
|
2150
|
+
height,
|
|
2151
|
+
width
|
|
2152
|
+
},
|
|
2153
|
+
srcRect: srcRect.srcRectAngle
|
|
2154
|
+
}]);
|
|
2155
|
+
}
|
|
2156
|
+
imageShape.setSrcRect({ ...srcRect.srcRectAngle });
|
|
2157
|
+
imageShape.closeRenderByCropper();
|
|
2158
|
+
imageShape.makeDirty(true);
|
|
2159
|
+
imageCropperObject === null || imageCropperObject === void 0 || imageCropperObject.dispose();
|
|
2160
|
+
}));
|
|
2161
|
+
const sheetUnit$ = this._univerInstanceService.getCurrentTypeOfUnit$(_univerjs_core.UniverInstanceType.UNIVER_SHEET).pipe((0, rxjs.switchMap)((workbook) => workbook ? workbook.activeSheet$ : (0, rxjs.of)(null)));
|
|
2162
|
+
this.disposeWithMe(sheetUnit$.subscribe(() => {
|
|
2163
|
+
this._commandService.syncExecuteCommand(CloseImageCropOperation.id);
|
|
2164
|
+
}));
|
|
2165
|
+
}
|
|
2166
|
+
_getApplyObjectByCropObject(cropObject) {
|
|
2167
|
+
const cropOKey = cropObject.oKey;
|
|
2168
|
+
const applyOKey = cropOKey.slice(0, cropOKey.length - 5);
|
|
2169
|
+
const scene = cropObject.getScene();
|
|
2170
|
+
if (!scene) return null;
|
|
2171
|
+
const applyObject = scene.getObject(applyOKey);
|
|
2172
|
+
if (applyObject == null) return null;
|
|
2173
|
+
return applyObject;
|
|
2174
|
+
}
|
|
2175
|
+
_addListenerOnImage(scene) {
|
|
2176
|
+
const transformer = scene.getTransformerByCreate();
|
|
2177
|
+
let startTransform = null;
|
|
2178
|
+
this.disposeWithMe(transformer.changeStart$.subscribe((state) => {
|
|
2179
|
+
const { objects } = state;
|
|
2180
|
+
const cropObject = objects.values().next().value;
|
|
2181
|
+
if (cropObject == null || !(cropObject instanceof ImageCropperObject)) return;
|
|
2182
|
+
const { left, top, height, width, angle } = cropObject;
|
|
2183
|
+
startTransform = {
|
|
2184
|
+
left,
|
|
2185
|
+
top,
|
|
2186
|
+
height,
|
|
2187
|
+
width,
|
|
2188
|
+
angle
|
|
2189
|
+
};
|
|
2190
|
+
transformer.clearCopperControl();
|
|
2191
|
+
}));
|
|
2192
|
+
this.disposeWithMe(transformer.changeEnd$.subscribe((state) => {
|
|
2193
|
+
const { objects } = state;
|
|
2194
|
+
const cropObject = objects.values().next().value;
|
|
2195
|
+
if (cropObject == null || !(cropObject instanceof ImageCropperObject)) return;
|
|
2196
|
+
const { left, top, height, width, angle } = cropObject;
|
|
2197
|
+
if (!(0, _univerjs_core.checkIfMove)({
|
|
2198
|
+
left,
|
|
2199
|
+
top,
|
|
2200
|
+
height,
|
|
2201
|
+
width,
|
|
2202
|
+
angle
|
|
2203
|
+
}, startTransform)) return;
|
|
2204
|
+
const applyObject = this._getApplyObjectByCropObject(cropObject);
|
|
2205
|
+
if (applyObject == null) return;
|
|
2206
|
+
const srcRect = this._getSrcRectByTransformState(applyObject, cropObject);
|
|
2207
|
+
cropObject.refreshSrcRect(srcRect.srcRect, applyObject.getState());
|
|
2208
|
+
transformer.createControlForCopper(cropObject);
|
|
2209
|
+
}));
|
|
2210
|
+
this._endCropListener(scene);
|
|
2211
|
+
}
|
|
2212
|
+
_addHoverForImageCopper(o) {
|
|
2213
|
+
this.disposeWithMe(o.onPointerEnter$.subscribeEvent(() => {
|
|
2214
|
+
o.cursor = _univerjs_engine_render.CURSOR_TYPE.MOVE;
|
|
2215
|
+
}));
|
|
2216
|
+
this.disposeWithMe(o.onPointerLeave$.subscribeEvent(() => {
|
|
2217
|
+
o.cursor = _univerjs_engine_render.CURSOR_TYPE.DEFAULT;
|
|
2218
|
+
}));
|
|
2219
|
+
}
|
|
2220
|
+
_endCropListener(scene) {
|
|
2221
|
+
const transformer = scene.getTransformerByCreate();
|
|
2222
|
+
this.disposeWithMe(transformer.clearControl$.subscribe((changeSelf) => {
|
|
2223
|
+
if (changeSelf === true) this._commandService.syncExecuteCommand(CloseImageCropOperation.id);
|
|
2224
|
+
}));
|
|
2225
|
+
}
|
|
2226
|
+
_getSrcRectByTransformState(applyObject, imageCropperObject) {
|
|
2227
|
+
const { left, top, height, width, strokeWidth, angle: copperAngle } = imageCropperObject;
|
|
2228
|
+
const { left: applyLeft, top: applyTop, width: applyWidth, height: applyHeight, angle: applyAngle, strokeWidth: applyStrokeWidth } = applyObject;
|
|
2229
|
+
const newLeft = left - applyLeft;
|
|
2230
|
+
const newTop = top - applyTop;
|
|
2231
|
+
const srcRect = {
|
|
2232
|
+
left: newLeft,
|
|
2233
|
+
top: newTop,
|
|
2234
|
+
right: applyWidth - newLeft - width,
|
|
2235
|
+
bottom: applyHeight - newTop - height
|
|
2236
|
+
};
|
|
2237
|
+
const srcRectAngle = { ...srcRect };
|
|
2238
|
+
if (applyAngle !== 0) {
|
|
2239
|
+
const centerPoint = new _univerjs_engine_render.Vector2(left + width / 2, top + height / 2);
|
|
2240
|
+
const newCenterPoint = new _univerjs_engine_render.Vector2(applyWidth / 2 + applyLeft, applyHeight / 2 + applyTop);
|
|
2241
|
+
const vertexPoint = new _univerjs_engine_render.Vector2(applyLeft, applyTop);
|
|
2242
|
+
vertexPoint.rotateByPoint((0, _univerjs_engine_render.degToRad)(applyAngle), newCenterPoint);
|
|
2243
|
+
const applyFinalPoint = vertexPoint.clone();
|
|
2244
|
+
applyFinalPoint.rotateByPoint((0, _univerjs_engine_render.degToRad)(-applyAngle), centerPoint);
|
|
2245
|
+
const newAngleLeft = left - applyFinalPoint.x;
|
|
2246
|
+
const newAngleTop = top - applyFinalPoint.y;
|
|
2247
|
+
srcRectAngle.left = newAngleLeft;
|
|
2248
|
+
srcRectAngle.top = newAngleTop;
|
|
2249
|
+
srcRectAngle.right = applyWidth - newAngleLeft - width;
|
|
2250
|
+
srcRectAngle.bottom = applyHeight - newAngleTop - height;
|
|
2251
|
+
}
|
|
2252
|
+
return {
|
|
2253
|
+
srcRect,
|
|
2254
|
+
srcRectAngle
|
|
2255
|
+
};
|
|
2256
|
+
}
|
|
2257
|
+
};
|
|
2258
|
+
ImageCropperController = __decorate([
|
|
2259
|
+
__decorateParam(0, _univerjs_core.ICommandService),
|
|
2260
|
+
__decorateParam(1, _univerjs_drawing.IDrawingManagerService),
|
|
2261
|
+
__decorateParam(2, _univerjs_engine_render.IRenderManagerService),
|
|
2262
|
+
__decorateParam(3, _univerjs_core.IUniverInstanceService),
|
|
2263
|
+
__decorateParam(4, _univerjs_ui.IMessageService),
|
|
2264
|
+
__decorateParam(5, (0, _univerjs_core.Inject)(_univerjs_core.LocaleService))
|
|
2265
|
+
], ImageCropperController);
|
|
2266
2266
|
|
|
2267
2267
|
//#endregion
|
|
2268
|
-
//#region src/
|
|
2269
|
-
|
|
2270
|
-
|
|
2271
|
-
|
|
2272
|
-
|
|
2273
|
-
|
|
2274
|
-
|
|
2275
|
-
|
|
2276
|
-
|
|
2277
|
-
|
|
2278
|
-
|
|
2279
|
-
|
|
2280
|
-
}
|
|
2281
|
-
},
|
|
2282
|
-
[DRAWING_ARRANGE_CONTEXT_MENU_ID]: {
|
|
2283
|
-
order: 2,
|
|
2284
|
-
menuItemFactory: DrawingArrangeContextMenuItemFactory,
|
|
2285
|
-
[SetDrawingArrangeFrontOperation.id]: {
|
|
2286
|
-
order: 0,
|
|
2287
|
-
menuItemFactory: SetDrawingArrangeFrontMenuItemFactory
|
|
2288
|
-
},
|
|
2289
|
-
[SetDrawingArrangeForwardOperation.id]: {
|
|
2290
|
-
order: 1,
|
|
2291
|
-
menuItemFactory: SetDrawingArrangeForwardMenuItemFactory
|
|
2292
|
-
},
|
|
2293
|
-
[SetDrawingArrangeBackOperation.id]: {
|
|
2294
|
-
order: 2,
|
|
2295
|
-
menuItemFactory: SetDrawingArrangeBackMenuItemFactory
|
|
2296
|
-
},
|
|
2297
|
-
[SetDrawingArrangeBackwardOperation.id]: {
|
|
2298
|
-
order: 3,
|
|
2299
|
-
menuItemFactory: SetDrawingArrangeBackwardMenuItemFactory
|
|
2300
|
-
}
|
|
2301
|
-
},
|
|
2302
|
-
[DRAWING_ALIGN_CONTEXT_MENU_ID]: {
|
|
2303
|
-
order: 3,
|
|
2304
|
-
menuItemFactory: DrawingAlignContextMenuItemFactory,
|
|
2305
|
-
[SetDrawingAlignLeftOperation.id]: {
|
|
2306
|
-
order: 0,
|
|
2307
|
-
menuItemFactory: SetDrawingAlignLeftMenuItemFactory
|
|
2308
|
-
},
|
|
2309
|
-
[SetDrawingAlignCenterOperation.id]: {
|
|
2310
|
-
order: 1,
|
|
2311
|
-
menuItemFactory: SetDrawingAlignCenterMenuItemFactory
|
|
2312
|
-
},
|
|
2313
|
-
[SetDrawingAlignRightOperation.id]: {
|
|
2314
|
-
order: 2,
|
|
2315
|
-
menuItemFactory: SetDrawingAlignRightMenuItemFactory
|
|
2316
|
-
},
|
|
2317
|
-
[SetDrawingAlignTopOperation.id]: {
|
|
2318
|
-
order: 3,
|
|
2319
|
-
menuItemFactory: SetDrawingAlignTopMenuItemFactory
|
|
2320
|
-
},
|
|
2321
|
-
[SetDrawingAlignMiddleOperation.id]: {
|
|
2322
|
-
order: 4,
|
|
2323
|
-
menuItemFactory: SetDrawingAlignMiddleMenuItemFactory
|
|
2324
|
-
},
|
|
2325
|
-
[SetDrawingAlignBottomOperation.id]: {
|
|
2326
|
-
order: 5,
|
|
2327
|
-
menuItemFactory: SetDrawingAlignBottomMenuItemFactory
|
|
2328
|
-
},
|
|
2329
|
-
[SetDrawingAlignHorizonOperation.id]: {
|
|
2330
|
-
order: 6,
|
|
2331
|
-
menuItemFactory: SetDrawingAlignHorizonMenuItemFactory
|
|
2332
|
-
},
|
|
2333
|
-
[SetDrawingAlignVerticalOperation.id]: {
|
|
2334
|
-
order: 7,
|
|
2335
|
-
menuItemFactory: SetDrawingAlignVerticalMenuItemFactory
|
|
2336
|
-
}
|
|
2268
|
+
//#region src/controllers/image-update.controller.ts
|
|
2269
|
+
let ImageUpdateController = class ImageUpdateController extends _univerjs_core.Disposable {
|
|
2270
|
+
constructor(_commandService, _renderManagerService, _drawingManagerService, _dialogService, _imageIoService, _currentUniverService, _drawingRenderService) {
|
|
2271
|
+
super();
|
|
2272
|
+
this._commandService = _commandService;
|
|
2273
|
+
this._renderManagerService = _renderManagerService;
|
|
2274
|
+
this._drawingManagerService = _drawingManagerService;
|
|
2275
|
+
this._dialogService = _dialogService;
|
|
2276
|
+
this._imageIoService = _imageIoService;
|
|
2277
|
+
this._currentUniverService = _currentUniverService;
|
|
2278
|
+
this._drawingRenderService = _drawingRenderService;
|
|
2279
|
+
this._initialize();
|
|
2337
2280
|
}
|
|
2338
|
-
|
|
2281
|
+
dispose() {
|
|
2282
|
+
super.dispose();
|
|
2283
|
+
}
|
|
2284
|
+
_initialize() {
|
|
2285
|
+
this._drawingAddListener();
|
|
2286
|
+
this._commandExecutedListener();
|
|
2287
|
+
this._imageUpdateListener();
|
|
2288
|
+
}
|
|
2289
|
+
_commandExecutedListener() {
|
|
2290
|
+
this.disposeWithMe(this._commandService.onCommandExecuted((command) => {
|
|
2291
|
+
if (command.id === ImageResetSizeOperation.id) {
|
|
2292
|
+
const params = command.params;
|
|
2293
|
+
if (params == null) return;
|
|
2294
|
+
this._resetImageSize(params);
|
|
2295
|
+
}
|
|
2296
|
+
}));
|
|
2297
|
+
}
|
|
2298
|
+
_getSceneAndTransformerByDrawingSearch(unitId) {
|
|
2299
|
+
if (unitId == null) return;
|
|
2300
|
+
const renderObject = this._renderManagerService.getRenderById(unitId);
|
|
2301
|
+
const scene = renderObject === null || renderObject === void 0 ? void 0 : renderObject.scene;
|
|
2302
|
+
if (scene == null) return null;
|
|
2303
|
+
return {
|
|
2304
|
+
scene,
|
|
2305
|
+
transformer: scene.getTransformerByCreate()
|
|
2306
|
+
};
|
|
2307
|
+
}
|
|
2308
|
+
_resetImageSize(params) {
|
|
2309
|
+
const updateParams = [];
|
|
2310
|
+
const sceneList = [];
|
|
2311
|
+
params.forEach((param) => {
|
|
2312
|
+
const { unitId, subUnitId, drawingId } = param;
|
|
2313
|
+
const renderObject = this._getSceneAndTransformerByDrawingSearch(unitId);
|
|
2314
|
+
if (renderObject == null) return;
|
|
2315
|
+
const { scene } = renderObject;
|
|
2316
|
+
const imageShapeKey = (0, _univerjs_drawing.getDrawingShapeKeyByDrawingSearch)({
|
|
2317
|
+
unitId,
|
|
2318
|
+
subUnitId,
|
|
2319
|
+
drawingId
|
|
2320
|
+
});
|
|
2321
|
+
const imageShape = scene.getObject(imageShapeKey);
|
|
2322
|
+
if (imageShape == null) return true;
|
|
2323
|
+
const imageData = this._drawingManagerService.getDrawingByParam(param);
|
|
2324
|
+
if (imageData == null) return true;
|
|
2325
|
+
if (imageData.drawingType !== _univerjs_core.DrawingTypeEnum.DRAWING_IMAGE) return;
|
|
2326
|
+
imageShape.resetSize();
|
|
2327
|
+
const { width, height } = imageShape.getNativeSize();
|
|
2328
|
+
if (sceneList.includes(scene) === false) sceneList.push(scene);
|
|
2329
|
+
updateParams.push({
|
|
2330
|
+
...imageData,
|
|
2331
|
+
transform: {
|
|
2332
|
+
...imageData.transform,
|
|
2333
|
+
height,
|
|
2334
|
+
width,
|
|
2335
|
+
angle: 0
|
|
2336
|
+
},
|
|
2337
|
+
srcRect: null,
|
|
2338
|
+
prstGeom: null
|
|
2339
|
+
});
|
|
2340
|
+
});
|
|
2341
|
+
this._drawingManagerService.featurePluginUpdateNotification(updateParams);
|
|
2342
|
+
sceneList.forEach((scene) => {
|
|
2343
|
+
scene.getTransformerByCreate().refreshControls().changeNotification();
|
|
2344
|
+
});
|
|
2345
|
+
this._commandService.syncExecuteCommand(_univerjs_drawing.SetDrawingSelectedOperation.id, params);
|
|
2346
|
+
}
|
|
2347
|
+
_drawingAddListener() {
|
|
2348
|
+
this.disposeWithMe(this._drawingManagerService.add$.pipe((0, rxjs.bufferTime)(33), (0, rxjs.filter)((batches) => batches.length > 0), (0, rxjs.map)((batches) => batches.flat()), (0, rxjs.map)((items) => {
|
|
2349
|
+
const map = /* @__PURE__ */ new Map();
|
|
2350
|
+
for (const it of items) map.set(`${it.unitId}|${it.subUnitId}|${it.drawingId}`, it);
|
|
2351
|
+
return [...map.values()];
|
|
2352
|
+
}), (0, rxjs.filter)((items) => items.length > 0)).subscribe((uniqueParams) => {
|
|
2353
|
+
this._insertImages(uniqueParams);
|
|
2354
|
+
}));
|
|
2355
|
+
}
|
|
2356
|
+
_insertImages(params) {
|
|
2357
|
+
params.forEach(async (param) => {
|
|
2358
|
+
var _getCurrentUnitInfo;
|
|
2359
|
+
const { unitId, subUnitId } = param;
|
|
2360
|
+
const renderObject = this._getSceneAndTransformerByDrawingSearch(unitId);
|
|
2361
|
+
const currentSubUnitId = (_getCurrentUnitInfo = getCurrentUnitInfo(this._currentUniverService, unitId)) === null || _getCurrentUnitInfo === void 0 ? void 0 : _getCurrentUnitInfo.subUnitId;
|
|
2362
|
+
if (renderObject == null || currentSubUnitId !== subUnitId) return;
|
|
2363
|
+
const imageParam = this._drawingManagerService.getDrawingByParam(param);
|
|
2364
|
+
if (imageParam == null) return;
|
|
2365
|
+
const images = await this._drawingRenderService.renderImages(imageParam, renderObject.scene);
|
|
2366
|
+
this._drawingManagerService.refreshTransform([imageParam]);
|
|
2367
|
+
if (images == null || images.length === 0) return;
|
|
2368
|
+
for (const image of images) {
|
|
2369
|
+
this._addHoverForImage(image);
|
|
2370
|
+
this._addDialogForImage(image);
|
|
2371
|
+
}
|
|
2372
|
+
});
|
|
2373
|
+
}
|
|
2374
|
+
_imageUpdateListener() {
|
|
2375
|
+
this.disposeWithMe(this._drawingManagerService.update$.subscribe((params) => {
|
|
2376
|
+
params.forEach((param) => {
|
|
2377
|
+
var _setClipBounds;
|
|
2378
|
+
const { unitId, subUnitId, drawingId } = param;
|
|
2379
|
+
const drawingParam = this._drawingManagerService.getDrawingByParam(param);
|
|
2380
|
+
if (drawingParam == null) return;
|
|
2381
|
+
const { transform, drawingType, srcRect, prstGeom, source, imageSourceType } = drawingParam;
|
|
2382
|
+
if (drawingType !== _univerjs_core.DrawingTypeEnum.DRAWING_IMAGE) return;
|
|
2383
|
+
const renderObject = this._getSceneAndTransformerByDrawingSearch(unitId);
|
|
2384
|
+
if (renderObject == null) return;
|
|
2385
|
+
const { scene, transformer } = renderObject;
|
|
2386
|
+
if (transform == null) return true;
|
|
2387
|
+
const drawingShapeKey = (0, _univerjs_drawing.getDrawingShapeKeyByDrawingSearch)({
|
|
2388
|
+
unitId,
|
|
2389
|
+
subUnitId,
|
|
2390
|
+
drawingId
|
|
2391
|
+
});
|
|
2392
|
+
const imageShape = scene.getObject(drawingShapeKey);
|
|
2393
|
+
if (imageShape == null) return true;
|
|
2394
|
+
imageShape.transformByState(transform);
|
|
2395
|
+
(_setClipBounds = imageShape.setClipBounds) === null || _setClipBounds === void 0 || _setClipBounds.call(imageShape, transform.clipBounds);
|
|
2396
|
+
ensureDrawingRenderLayer(scene, imageShape, drawingParam);
|
|
2397
|
+
imageShape.setSrcRect(srcRect);
|
|
2398
|
+
imageShape.setPrstGeom(prstGeom);
|
|
2399
|
+
if (source != null && source.length > 0 && (imageSourceType === _univerjs_core.ImageSourceType.BASE64 || imageSourceType === _univerjs_core.ImageSourceType.URL)) imageShape.changeSource(source);
|
|
2400
|
+
});
|
|
2401
|
+
}));
|
|
2402
|
+
}
|
|
2403
|
+
_addHoverForImage(o) {
|
|
2404
|
+
this.disposeWithMe((0, _univerjs_core.toDisposable)(o.onPointerEnter$.subscribeEvent(() => {
|
|
2405
|
+
o.cursor = _univerjs_engine_render.CURSOR_TYPE.GRAB;
|
|
2406
|
+
})));
|
|
2407
|
+
this.disposeWithMe((0, _univerjs_core.toDisposable)(o.onPointerLeave$.subscribeEvent(() => {
|
|
2408
|
+
o.cursor = _univerjs_engine_render.CURSOR_TYPE.DEFAULT;
|
|
2409
|
+
})));
|
|
2410
|
+
}
|
|
2411
|
+
_addDialogForImage(o) {
|
|
2412
|
+
this.disposeWithMe((0, _univerjs_core.toDisposable)(o.onDblclick$.subscribeEvent(() => {
|
|
2413
|
+
const dialogId = `${o.oKey}-viewer-dialog`;
|
|
2414
|
+
this._drawingRenderService.previewImage(dialogId, o.getNative().src, o.getNativeSize().width, o.getNativeSize().height);
|
|
2415
|
+
})));
|
|
2416
|
+
}
|
|
2417
|
+
};
|
|
2418
|
+
ImageUpdateController = __decorate([
|
|
2419
|
+
__decorateParam(0, _univerjs_core.ICommandService),
|
|
2420
|
+
__decorateParam(1, _univerjs_engine_render.IRenderManagerService),
|
|
2421
|
+
__decorateParam(2, _univerjs_drawing.IDrawingManagerService),
|
|
2422
|
+
__decorateParam(3, _univerjs_ui.IDialogService),
|
|
2423
|
+
__decorateParam(4, _univerjs_core.IImageIoService),
|
|
2424
|
+
__decorateParam(5, _univerjs_core.IUniverInstanceService),
|
|
2425
|
+
__decorateParam(6, (0, _univerjs_core.Inject)(DrawingRenderService))
|
|
2426
|
+
], ImageUpdateController);
|
|
2339
2427
|
|
|
2340
2428
|
//#endregion
|
|
2341
2429
|
//#region src/controllers/ui.controller.ts
|
|
@@ -2434,6 +2522,482 @@ _defineProperty(UniverDrawingUIPlugin, "packageName", name);
|
|
|
2434
2522
|
_defineProperty(UniverDrawingUIPlugin, "version", version);
|
|
2435
2523
|
UniverDrawingUIPlugin = __decorate([__decorateParam(1, (0, _univerjs_core.Inject)(_univerjs_core.Injector)), __decorateParam(2, _univerjs_core.IConfigService)], UniverDrawingUIPlugin);
|
|
2436
2524
|
|
|
2525
|
+
//#endregion
|
|
2526
|
+
//#region src/views/object-list-panel/object-list-panel-layer.ts
|
|
2527
|
+
const OBJECT_LIST_FLOATING_SECTION_ID = "floating";
|
|
2528
|
+
const OBJECT_LIST_CANVAS_SECTION_ID = "canvas";
|
|
2529
|
+
function isFloatingObjectListDrawingType(drawingType) {
|
|
2530
|
+
return drawingType === _univerjs_core.DrawingTypeEnum.DRAWING_CHART || drawingType === _univerjs_core.DrawingTypeEnum.DRAWING_DOM || drawingType === _univerjs_core.DrawingTypeEnum.DRAWING_UNIT;
|
|
2531
|
+
}
|
|
2532
|
+
function getObjectListPanelSectionIdForDrawingType(drawingType) {
|
|
2533
|
+
return isFloatingObjectListDrawingType(drawingType) ? OBJECT_LIST_FLOATING_SECTION_ID : OBJECT_LIST_CANVAS_SECTION_ID;
|
|
2534
|
+
}
|
|
2535
|
+
|
|
2536
|
+
//#endregion
|
|
2537
|
+
//#region src/views/object-list-panel/ObjectListPanelBase.tsx
|
|
2538
|
+
const objectListPanelLabelKeys = {
|
|
2539
|
+
title: "drawing-ui.objectListPanel.title",
|
|
2540
|
+
empty: "drawing-ui.objectListPanel.empty",
|
|
2541
|
+
showAll: "drawing-ui.objectListPanel.showAll",
|
|
2542
|
+
hideAll: "drawing-ui.objectListPanel.hideAll",
|
|
2543
|
+
moveForward: "drawing-ui.objectListPanel.moveForward",
|
|
2544
|
+
moveBackward: "drawing-ui.objectListPanel.moveBackward",
|
|
2545
|
+
close: "drawing-ui.objectListPanel.close",
|
|
2546
|
+
show: "drawing-ui.objectListPanel.show",
|
|
2547
|
+
hide: "drawing-ui.objectListPanel.hide",
|
|
2548
|
+
lock: "drawing-ui.objectListPanel.lock",
|
|
2549
|
+
unlock: "drawing-ui.objectListPanel.unlock",
|
|
2550
|
+
name: "drawing-ui.objectListPanel.name",
|
|
2551
|
+
nameInput: "drawing-ui.objectListPanel.nameInput",
|
|
2552
|
+
description: "drawing-ui.objectListPanel.description",
|
|
2553
|
+
descriptionPlaceholder: "drawing-ui.objectListPanel.descriptionPlaceholder",
|
|
2554
|
+
details: "drawing-ui.objectListPanel.details",
|
|
2555
|
+
noSelection: "drawing-ui.objectListPanel.noSelection",
|
|
2556
|
+
locate: "drawing-ui.objectListPanel.locate",
|
|
2557
|
+
expand: "drawing-ui.objectListPanel.expand",
|
|
2558
|
+
collapse: "drawing-ui.objectListPanel.collapse",
|
|
2559
|
+
dragToReorder: "drawing-ui.objectListPanel.dragToReorder",
|
|
2560
|
+
search: "drawing-ui.objectListPanel.search",
|
|
2561
|
+
filterAll: "drawing-ui.objectListPanel.filterAll",
|
|
2562
|
+
filterHidden: "drawing-ui.objectListPanel.filterHidden",
|
|
2563
|
+
filterLocked: "drawing-ui.objectListPanel.filterLocked",
|
|
2564
|
+
sectionCanvas: "drawing-ui.objectListPanel.sectionCanvas",
|
|
2565
|
+
sectionFloating: "drawing-ui.objectListPanel.sectionFloating"
|
|
2566
|
+
};
|
|
2567
|
+
function getObjectListPanelLabels(localeService) {
|
|
2568
|
+
return Object.fromEntries(Object.entries(objectListPanelLabelKeys).map(([labelKey, localeKey]) => [labelKey, localeService.t(localeKey)]));
|
|
2569
|
+
}
|
|
2570
|
+
function getObjectListPanelTypeName(localeService, typeName) {
|
|
2571
|
+
return localeService.t(`drawing-ui.objectListPanel.typeNames.${typeName}`);
|
|
2572
|
+
}
|
|
2573
|
+
const iconButtonClassName = `
|
|
2574
|
+
univer-flex univer-size-7 univer-shrink-0 univer-items-center univer-justify-center univer-rounded-md
|
|
2575
|
+
univer-border-0 univer-bg-transparent univer-p-0 univer-text-gray-500 univer-outline-none univer-transition-colors
|
|
2576
|
+
hover:univer-bg-gray-100 hover:univer-text-gray-900
|
|
2577
|
+
disabled:univer-cursor-not-allowed disabled:univer-opacity-40
|
|
2578
|
+
dark:!univer-text-gray-300 dark:hover:!univer-bg-gray-800 dark:hover:!univer-text-gray-100
|
|
2579
|
+
`;
|
|
2580
|
+
const sectionOrder = /* @__PURE__ */ new Map([
|
|
2581
|
+
[OBJECT_LIST_FLOATING_SECTION_ID, 0],
|
|
2582
|
+
[OBJECT_LIST_CANVAS_SECTION_ID, 1],
|
|
2583
|
+
["", 2]
|
|
2584
|
+
]);
|
|
2585
|
+
function normalizeText(value) {
|
|
2586
|
+
return value.trim();
|
|
2587
|
+
}
|
|
2588
|
+
function hasCapability(panelCapabilities, item, key, fallback = true) {
|
|
2589
|
+
var _ref, _item$capabilities$ke, _item$capabilities;
|
|
2590
|
+
return (_ref = (_item$capabilities$ke = item === null || item === void 0 || (_item$capabilities = item.capabilities) === null || _item$capabilities === void 0 ? void 0 : _item$capabilities[key]) !== null && _item$capabilities$ke !== void 0 ? _item$capabilities$ke : panelCapabilities === null || panelCapabilities === void 0 ? void 0 : panelCapabilities[key]) !== null && _ref !== void 0 ? _ref : fallback;
|
|
2591
|
+
}
|
|
2592
|
+
function ObjectListPanelBase(props) {
|
|
2593
|
+
var _selectedItem$canMove, _selectedItem$canMove2, _capabilities$reorder;
|
|
2594
|
+
const { items, selectedIds, allObjectIds, focusedId, labels, showHeader = true, capabilities, onSelect, onSetVisible, onCommitName, onCommitDescription, onMoveForward, onMoveBackward, onToggleExpanded, onToggleSelectable, onLocate, onReorder } = props;
|
|
2595
|
+
const selectedIdSet = (0, react.useMemo)(() => new Set(selectedIds), [selectedIds]);
|
|
2596
|
+
const [draggingId, setDraggingId] = (0, react.useState)(null);
|
|
2597
|
+
const [searchQuery, setSearchQuery] = (0, react.useState)("");
|
|
2598
|
+
const [filterMode, setFilterMode] = (0, react.useState)("all");
|
|
2599
|
+
const [collapsedSectionIds, setCollapsedSectionIds] = (0, react.useState)(() => /* @__PURE__ */ new Set());
|
|
2600
|
+
const selectedItem = (0, react.useMemo)(() => {
|
|
2601
|
+
var _ref2, _items$find;
|
|
2602
|
+
return (_ref2 = (_items$find = items.find((item) => item.id === focusedId)) !== null && _items$find !== void 0 ? _items$find : items.find((item) => selectedIdSet.has(item.id))) !== null && _ref2 !== void 0 ? _ref2 : null;
|
|
2603
|
+
}, [
|
|
2604
|
+
focusedId,
|
|
2605
|
+
items,
|
|
2606
|
+
selectedIdSet
|
|
2607
|
+
]);
|
|
2608
|
+
const visibleItems = (0, react.useMemo)(() => {
|
|
2609
|
+
const normalizedQuery = normalizeText(searchQuery).toLocaleLowerCase();
|
|
2610
|
+
return items.filter((item) => {
|
|
2611
|
+
var _item$description;
|
|
2612
|
+
if (filterMode === "hidden" && item.visible !== false) return false;
|
|
2613
|
+
if (filterMode === "locked" && item.selectable !== false) return false;
|
|
2614
|
+
if (!normalizedQuery) return true;
|
|
2615
|
+
return item.name.toLocaleLowerCase().includes(normalizedQuery) || ((_item$description = item.description) !== null && _item$description !== void 0 ? _item$description : "").toLocaleLowerCase().includes(normalizedQuery);
|
|
2616
|
+
});
|
|
2617
|
+
}, [
|
|
2618
|
+
filterMode,
|
|
2619
|
+
items,
|
|
2620
|
+
searchQuery
|
|
2621
|
+
]);
|
|
2622
|
+
const visibleItemSections = (0, react.useMemo)(() => {
|
|
2623
|
+
const sectionMap = /* @__PURE__ */ new Map();
|
|
2624
|
+
visibleItems.forEach((item) => {
|
|
2625
|
+
var _item$sectionId, _item$sectionTitle;
|
|
2626
|
+
const sectionId = (_item$sectionId = item.sectionId) !== null && _item$sectionId !== void 0 ? _item$sectionId : "";
|
|
2627
|
+
const existingSection = sectionMap.get(sectionId);
|
|
2628
|
+
if (existingSection) {
|
|
2629
|
+
existingSection.items.push(item);
|
|
2630
|
+
return;
|
|
2631
|
+
}
|
|
2632
|
+
sectionMap.set(sectionId, {
|
|
2633
|
+
id: sectionId,
|
|
2634
|
+
title: (_item$sectionTitle = item.sectionTitle) !== null && _item$sectionTitle !== void 0 ? _item$sectionTitle : "",
|
|
2635
|
+
items: [item]
|
|
2636
|
+
});
|
|
2637
|
+
});
|
|
2638
|
+
return [...sectionMap.values()].sort((a, b) => {
|
|
2639
|
+
var _sectionOrder$get, _sectionOrder$get2;
|
|
2640
|
+
return ((_sectionOrder$get = sectionOrder.get(a.id)) !== null && _sectionOrder$get !== void 0 ? _sectionOrder$get : 3) - ((_sectionOrder$get2 = sectionOrder.get(b.id)) !== null && _sectionOrder$get2 !== void 0 ? _sectionOrder$get2 : 3);
|
|
2641
|
+
});
|
|
2642
|
+
}, [visibleItems]);
|
|
2643
|
+
const showSectionHeaders = visibleItemSections.length > 1 || visibleItemSections.some((section) => section.id === "floating");
|
|
2644
|
+
const allIds = (0, react.useMemo)(() => allObjectIds !== null && allObjectIds !== void 0 ? allObjectIds : items.map((item) => item.id), [allObjectIds, items]);
|
|
2645
|
+
const selectedIndex = selectedItem ? items.findIndex((item) => item.id === selectedItem.id) : -1;
|
|
2646
|
+
const canMoveForward = !!selectedItem && !!onMoveForward && !selectedItem.disabled && ((_selectedItem$canMove = selectedItem.canMoveForward) !== null && _selectedItem$canMove !== void 0 ? _selectedItem$canMove : selectedIndex > 0) && hasCapability(capabilities, selectedItem, "arrange");
|
|
2647
|
+
const canMoveBackward = !!selectedItem && !!onMoveBackward && !selectedItem.disabled && ((_selectedItem$canMove2 = selectedItem.canMoveBackward) !== null && _selectedItem$canMove2 !== void 0 ? _selectedItem$canMove2 : selectedIndex >= 0 && selectedIndex < items.length - 1) && hasCapability(capabilities, selectedItem, "arrange");
|
|
2648
|
+
const showArrangeControls = hasCapability(capabilities, selectedItem, "arrange") && (!!onMoveForward || !!onMoveBackward);
|
|
2649
|
+
const showLocateControl = !!onLocate && hasCapability(capabilities, selectedItem, "locate");
|
|
2650
|
+
const canReorder = !!onReorder && ((_capabilities$reorder = capabilities === null || capabilities === void 0 ? void 0 : capabilities.reorder) !== null && _capabilities$reorder !== void 0 ? _capabilities$reorder : true);
|
|
2651
|
+
const findItem = (objectId) => {
|
|
2652
|
+
var _items$find2;
|
|
2653
|
+
return objectId ? (_items$find2 = items.find((item) => item.id === objectId)) !== null && _items$find2 !== void 0 ? _items$find2 : null : null;
|
|
2654
|
+
};
|
|
2655
|
+
const handleDrop = (targetId) => {
|
|
2656
|
+
var _source$parentId, _target$parentId, _source$sectionId, _target$sectionId;
|
|
2657
|
+
const source = findItem(draggingId);
|
|
2658
|
+
const target = findItem(targetId);
|
|
2659
|
+
setDraggingId(null);
|
|
2660
|
+
if (!source || !target || source.id === target.id || source.disabled || target.disabled) return;
|
|
2661
|
+
if (((_source$parentId = source.parentId) !== null && _source$parentId !== void 0 ? _source$parentId : "") !== ((_target$parentId = target.parentId) !== null && _target$parentId !== void 0 ? _target$parentId : "")) return;
|
|
2662
|
+
if (((_source$sectionId = source.sectionId) !== null && _source$sectionId !== void 0 ? _source$sectionId : "") !== ((_target$sectionId = target.sectionId) !== null && _target$sectionId !== void 0 ? _target$sectionId : "")) return;
|
|
2663
|
+
if (source.canReorder === false || target.canReorder === false) return;
|
|
2664
|
+
onReorder === null || onReorder === void 0 || onReorder(source.id, target.id);
|
|
2665
|
+
};
|
|
2666
|
+
const toggleSectionCollapsed = (sectionId) => {
|
|
2667
|
+
if (!sectionId) return;
|
|
2668
|
+
setCollapsedSectionIds((current) => {
|
|
2669
|
+
const next = new Set(current);
|
|
2670
|
+
if (next.has(sectionId)) next.delete(sectionId);
|
|
2671
|
+
else next.add(sectionId);
|
|
2672
|
+
return next;
|
|
2673
|
+
});
|
|
2674
|
+
};
|
|
2675
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2676
|
+
className: "univer-box-border univer-flex univer-size-full univer-min-w-0 univer-max-w-full univer-flex-col univer-gap-3 univer-overflow-hidden univer-text-gray-700 dark:!univer-text-gray-200",
|
|
2677
|
+
"data-drawing-object-list-panel": "true",
|
|
2678
|
+
children: [
|
|
2679
|
+
showHeader && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
2680
|
+
className: "univer-flex univer-h-8 univer-shrink-0 univer-items-center univer-gap-2",
|
|
2681
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
2682
|
+
className: "univer-min-w-0 univer-flex-1 univer-truncate univer-text-sm univer-font-semibold univer-text-gray-900 dark:!univer-text-gray-100",
|
|
2683
|
+
children: labels.title
|
|
2684
|
+
})
|
|
2685
|
+
}),
|
|
2686
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2687
|
+
className: "univer-flex univer-min-w-0 univer-items-center univer-justify-between univer-gap-2",
|
|
2688
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2689
|
+
className: "univer-flex univer-min-w-0 univer-gap-2",
|
|
2690
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_design.Button, {
|
|
2691
|
+
size: "small",
|
|
2692
|
+
disabled: items.length === 0,
|
|
2693
|
+
onClick: () => onSetVisible(allIds, true),
|
|
2694
|
+
children: labels.showAll
|
|
2695
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_design.Button, {
|
|
2696
|
+
size: "small",
|
|
2697
|
+
disabled: items.length === 0,
|
|
2698
|
+
onClick: () => onSetVisible(allIds, false),
|
|
2699
|
+
children: labels.hideAll
|
|
2700
|
+
})]
|
|
2701
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2702
|
+
className: "univer-flex univer-shrink-0 univer-gap-1",
|
|
2703
|
+
children: [showLocateControl && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
2704
|
+
type: "button",
|
|
2705
|
+
className: iconButtonClassName,
|
|
2706
|
+
title: labels.locate,
|
|
2707
|
+
"aria-label": labels.locate,
|
|
2708
|
+
disabled: !(selectedItem === null || selectedItem === void 0 ? void 0 : selectedItem.id),
|
|
2709
|
+
onClick: () => selectedItem && (onLocate === null || onLocate === void 0 ? void 0 : onLocate(selectedItem.id)),
|
|
2710
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_icons.LocateFixedIcon, {})
|
|
2711
|
+
}), showArrangeControls && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
2712
|
+
type: "button",
|
|
2713
|
+
className: iconButtonClassName,
|
|
2714
|
+
title: labels.moveForward,
|
|
2715
|
+
"aria-label": labels.moveForward,
|
|
2716
|
+
disabled: !canMoveForward,
|
|
2717
|
+
onClick: () => selectedItem && (onMoveForward === null || onMoveForward === void 0 ? void 0 : onMoveForward(selectedItem.id)),
|
|
2718
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_icons.ArrowUpIcon, {})
|
|
2719
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
2720
|
+
type: "button",
|
|
2721
|
+
className: iconButtonClassName,
|
|
2722
|
+
title: labels.moveBackward,
|
|
2723
|
+
"aria-label": labels.moveBackward,
|
|
2724
|
+
disabled: !canMoveBackward,
|
|
2725
|
+
onClick: () => selectedItem && (onMoveBackward === null || onMoveBackward === void 0 ? void 0 : onMoveBackward(selectedItem.id)),
|
|
2726
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_icons.ArrowDownIcon, {})
|
|
2727
|
+
})] })]
|
|
2728
|
+
})]
|
|
2729
|
+
}),
|
|
2730
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2731
|
+
className: "univer-flex univer-shrink-0 univer-flex-col univer-gap-2",
|
|
2732
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_design.Input, {
|
|
2733
|
+
value: searchQuery,
|
|
2734
|
+
"aria-label": labels.search,
|
|
2735
|
+
placeholder: labels.search,
|
|
2736
|
+
onChange: setSearchQuery
|
|
2737
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
2738
|
+
className: "univer-flex univer-min-w-0 univer-gap-1",
|
|
2739
|
+
children: [
|
|
2740
|
+
["all", labels.filterAll],
|
|
2741
|
+
["hidden", labels.filterHidden],
|
|
2742
|
+
["locked", labels.filterLocked]
|
|
2743
|
+
].map(([mode, label]) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
2744
|
+
type: "button",
|
|
2745
|
+
className: (0, _univerjs_design.clsx)("univer-h-7 univer-min-w-0 univer-flex-1 univer-rounded-md univer-border univer-border-solid univer-px-2 univer-text-xs univer-outline-none univer-transition-colors dark:!univer-border-gray-700", filterMode === mode ? "dark:!univer-bg-primary-900/30 univer-border-primary-500 univer-bg-primary-50 univer-text-primary-600 dark:!univer-text-primary-200" : "univer-border-gray-200 univer-bg-white univer-text-gray-600 hover:univer-bg-gray-50 dark:!univer-bg-gray-900 dark:!univer-text-gray-300 dark:hover:!univer-bg-gray-800"),
|
|
2746
|
+
"aria-pressed": filterMode === mode,
|
|
2747
|
+
onClick: () => setFilterMode(mode),
|
|
2748
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
2749
|
+
className: "univer-block univer-truncate",
|
|
2750
|
+
children: label
|
|
2751
|
+
})
|
|
2752
|
+
}, mode))
|
|
2753
|
+
})]
|
|
2754
|
+
}),
|
|
2755
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
2756
|
+
className: "univer-min-h-0 univer-flex-1 univer-overflow-y-auto univer-overflow-x-hidden",
|
|
2757
|
+
children: visibleItems.length === 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
2758
|
+
className: "univer-py-6 univer-text-center univer-text-sm univer-text-gray-500",
|
|
2759
|
+
children: labels.empty
|
|
2760
|
+
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
2761
|
+
className: "univer-flex univer-min-w-0 univer-flex-col univer-gap-0.5",
|
|
2762
|
+
children: visibleItemSections.map((section) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2763
|
+
className: "univer-flex univer-min-w-0 univer-flex-col univer-gap-0.5",
|
|
2764
|
+
children: [showSectionHeaders && section.title && (() => {
|
|
2765
|
+
const sectionCollapsed = !!section.id && collapsedSectionIds.has(section.id);
|
|
2766
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
2767
|
+
type: "button",
|
|
2768
|
+
className: "univer-box-border univer-flex univer-h-7 univer-w-full univer-items-center univer-gap-1 univer-rounded-md univer-border-0 univer-bg-transparent univer-px-2 univer-pt-1 univer-text-xs univer-font-semibold univer-uppercase univer-text-gray-400 univer-outline-none hover:univer-bg-gray-50 hover:univer-text-gray-600 disabled:univer-cursor-default disabled:hover:univer-bg-transparent dark:!univer-text-gray-500 dark:hover:!univer-bg-gray-800 dark:hover:!univer-text-gray-300",
|
|
2769
|
+
"aria-label": sectionCollapsed ? labels.expand : labels.collapse,
|
|
2770
|
+
disabled: !section.id,
|
|
2771
|
+
onClick: () => toggleSectionCollapsed(section.id),
|
|
2772
|
+
children: [
|
|
2773
|
+
section.id ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
2774
|
+
className: "univer-flex univer-size-4 univer-shrink-0 univer-items-center univer-justify-center",
|
|
2775
|
+
children: sectionCollapsed ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_icons.MoreRightIcon, {}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_icons.MoreDownIcon, {})
|
|
2776
|
+
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className: "univer-size-4 univer-shrink-0" }),
|
|
2777
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
2778
|
+
className: "univer-min-w-0 univer-flex-1 univer-truncate univer-text-left",
|
|
2779
|
+
children: section.title
|
|
2780
|
+
}),
|
|
2781
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
2782
|
+
className: "univer-shrink-0 univer-text-[10px] univer-font-medium univer-text-gray-400 dark:!univer-text-gray-500",
|
|
2783
|
+
children: section.items.length
|
|
2784
|
+
})
|
|
2785
|
+
]
|
|
2786
|
+
});
|
|
2787
|
+
})(), (!section.id || !collapsedSectionIds.has(section.id)) && section.items.map((item) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ObjectListRow, {
|
|
2788
|
+
item,
|
|
2789
|
+
selected: selectedIdSet.has(item.id),
|
|
2790
|
+
labels,
|
|
2791
|
+
showLock: !!onToggleSelectable && hasCapability(capabilities, item, "selectable"),
|
|
2792
|
+
showName: hasCapability(capabilities, item, "name"),
|
|
2793
|
+
showVisible: hasCapability(capabilities, item, "visible"),
|
|
2794
|
+
draggable: canReorder && hasCapability(capabilities, item, "reorder") && !item.disabled && item.canReorder !== false,
|
|
2795
|
+
dragging: draggingId === item.id,
|
|
2796
|
+
onSelect: (multiSelect) => onSelect(item.id, multiSelect),
|
|
2797
|
+
onToggleExpanded: () => onToggleExpanded === null || onToggleExpanded === void 0 ? void 0 : onToggleExpanded(item.id),
|
|
2798
|
+
onToggleVisible: () => onSetVisible([item.id], !item.visible),
|
|
2799
|
+
onToggleSelectable: () => onToggleSelectable === null || onToggleSelectable === void 0 ? void 0 : onToggleSelectable(item.id),
|
|
2800
|
+
onCommitName: (value) => onCommitName(item.id, value),
|
|
2801
|
+
onDragStart: () => setDraggingId(item.id),
|
|
2802
|
+
onDragEnd: () => setDraggingId(null),
|
|
2803
|
+
onDrop: () => handleDrop(item.id)
|
|
2804
|
+
}, item.id))]
|
|
2805
|
+
}, section.id || "default"))
|
|
2806
|
+
})
|
|
2807
|
+
}),
|
|
2808
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(ObjectDetailsEditor, {
|
|
2809
|
+
item: selectedItem,
|
|
2810
|
+
labels,
|
|
2811
|
+
showName: hasCapability(capabilities, selectedItem, "name"),
|
|
2812
|
+
showDescription: hasCapability(capabilities, selectedItem, "description"),
|
|
2813
|
+
onCommitName: (value) => selectedItem && onCommitName(selectedItem.id, value),
|
|
2814
|
+
onCommitDescription: (value) => selectedItem && onCommitDescription(selectedItem.id, value)
|
|
2815
|
+
})
|
|
2816
|
+
]
|
|
2817
|
+
});
|
|
2818
|
+
}
|
|
2819
|
+
function ObjectListRow(props) {
|
|
2820
|
+
var _item$level;
|
|
2821
|
+
const { item, selected, labels, showLock, showName, showVisible, draggable, dragging, onSelect, onToggleExpanded, onToggleVisible, onToggleSelectable, onCommitName, onDragStart, onDragEnd, onDrop } = props;
|
|
2822
|
+
const [draftName, setDraftName] = (0, react.useState)(item.name);
|
|
2823
|
+
const skipCommitOnBlurRef = (0, react.useRef)(false);
|
|
2824
|
+
const disabled = item.disabled === true;
|
|
2825
|
+
const level = (_item$level = item.level) !== null && _item$level !== void 0 ? _item$level : 0;
|
|
2826
|
+
const locked = item.selectable === false;
|
|
2827
|
+
(0, react.useEffect)(() => {
|
|
2828
|
+
setDraftName(item.name);
|
|
2829
|
+
}, [item.name]);
|
|
2830
|
+
const handleBlur = (event) => {
|
|
2831
|
+
if (disabled) return;
|
|
2832
|
+
if (skipCommitOnBlurRef.current) {
|
|
2833
|
+
skipCommitOnBlurRef.current = false;
|
|
2834
|
+
return;
|
|
2835
|
+
}
|
|
2836
|
+
if (event.currentTarget.value !== item.name) onCommitName(event.currentTarget.value);
|
|
2837
|
+
};
|
|
2838
|
+
const handleKeyDown = (event) => {
|
|
2839
|
+
if (event.key === "Enter") {
|
|
2840
|
+
event.currentTarget.blur();
|
|
2841
|
+
return;
|
|
2842
|
+
}
|
|
2843
|
+
if (event.key === "Escape") {
|
|
2844
|
+
skipCommitOnBlurRef.current = true;
|
|
2845
|
+
setDraftName(item.name);
|
|
2846
|
+
event.currentTarget.blur();
|
|
2847
|
+
}
|
|
2848
|
+
};
|
|
2849
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2850
|
+
className: (0, _univerjs_design.clsx)("univer-box-border univer-flex univer-h-8 univer-w-full univer-min-w-0 univer-max-w-full univer-items-center univer-gap-1.5 univer-overflow-hidden univer-rounded-md univer-pr-1.5 univer-transition-colors", !disabled && "hover:univer-bg-gray-100 dark:hover:!univer-bg-gray-800", selected && "univer-bg-gray-100 dark:!univer-bg-gray-800", disabled && "univer-text-gray-400 dark:!univer-text-gray-500", dragging && "univer-opacity-50"),
|
|
2851
|
+
style: { paddingLeft: level * 14 + 4 },
|
|
2852
|
+
draggable,
|
|
2853
|
+
title: draggable ? labels.dragToReorder : void 0,
|
|
2854
|
+
onClick: disabled ? void 0 : (event) => onSelect(event.ctrlKey || event.metaKey),
|
|
2855
|
+
onDragStart: (event) => {
|
|
2856
|
+
if (!draggable) {
|
|
2857
|
+
event.preventDefault();
|
|
2858
|
+
return;
|
|
2859
|
+
}
|
|
2860
|
+
event.dataTransfer.effectAllowed = "move";
|
|
2861
|
+
event.dataTransfer.setData("text/plain", item.id);
|
|
2862
|
+
onDragStart();
|
|
2863
|
+
},
|
|
2864
|
+
onDragEnd,
|
|
2865
|
+
onDragOver: (event) => {
|
|
2866
|
+
if (draggable) {
|
|
2867
|
+
event.preventDefault();
|
|
2868
|
+
event.dataTransfer.dropEffect = "move";
|
|
2869
|
+
}
|
|
2870
|
+
},
|
|
2871
|
+
onDrop: (event) => {
|
|
2872
|
+
event.preventDefault();
|
|
2873
|
+
onDrop();
|
|
2874
|
+
},
|
|
2875
|
+
children: [
|
|
2876
|
+
item.isGroup ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
2877
|
+
type: "button",
|
|
2878
|
+
className: "univer-flex univer-size-5 univer-shrink-0 univer-items-center univer-justify-center univer-rounded univer-border-0 univer-bg-transparent univer-p-0 univer-text-gray-500 univer-outline-none univer-transition-transform hover:univer-bg-gray-100 hover:univer-text-gray-900 dark:!univer-text-gray-300 dark:hover:!univer-bg-gray-800 dark:hover:!univer-text-gray-100",
|
|
2879
|
+
title: item.expanded ? labels.collapse : labels.expand,
|
|
2880
|
+
"aria-label": item.expanded ? labels.collapse : labels.expand,
|
|
2881
|
+
onClick: (event) => {
|
|
2882
|
+
event.stopPropagation();
|
|
2883
|
+
onToggleExpanded();
|
|
2884
|
+
},
|
|
2885
|
+
children: item.expanded ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_icons.MoreDownIcon, {}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_icons.MoreRightIcon, {})
|
|
2886
|
+
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className: "univer-size-5 univer-shrink-0" }),
|
|
2887
|
+
showName ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_design.Input, {
|
|
2888
|
+
className: (0, _univerjs_design.clsx)("univer-h-7 univer-w-0 univer-min-w-0 univer-flex-1", disabled && "univer-cursor-not-allowed"),
|
|
2889
|
+
inputClass: (0, _univerjs_design.clsx)("!univer-h-7 univer-min-w-0 univer-overflow-hidden univer-text-ellipsis univer-whitespace-nowrap !univer-rounded !univer-border-transparent !univer-bg-transparent !univer-px-1 univer-text-sm univer-text-gray-900 !univer-shadow-none focus:!univer-border-primary-500 focus:!univer-bg-white focus:!univer-ring-1 focus:!univer-ring-primary-100 disabled:!univer-bg-transparent disabled:univer-opacity-100 dark:!univer-text-gray-100 dark:focus:!univer-bg-gray-900 dark:focus:!univer-ring-primary-900", disabled && "univer-text-gray-400 dark:!univer-text-gray-500"),
|
|
2890
|
+
inputStyle: {
|
|
2891
|
+
maxWidth: "100%",
|
|
2892
|
+
boxSizing: "border-box"
|
|
2893
|
+
},
|
|
2894
|
+
value: draftName,
|
|
2895
|
+
disabled,
|
|
2896
|
+
"aria-label": labels.nameInput,
|
|
2897
|
+
onChange: setDraftName,
|
|
2898
|
+
onBlur: handleBlur,
|
|
2899
|
+
onKeyDown: handleKeyDown,
|
|
2900
|
+
onClick: (event) => {
|
|
2901
|
+
event.stopPropagation();
|
|
2902
|
+
if (!disabled) onSelect(event.ctrlKey || event.metaKey);
|
|
2903
|
+
}
|
|
2904
|
+
}, item.name) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
2905
|
+
className: "univer-min-w-0 univer-flex-1 univer-truncate univer-px-1 univer-text-sm",
|
|
2906
|
+
children: item.name
|
|
2907
|
+
}),
|
|
2908
|
+
showLock && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
2909
|
+
type: "button",
|
|
2910
|
+
className: (0, _univerjs_design.clsx)(iconButtonClassName, !locked && "univer-opacity-70"),
|
|
2911
|
+
disabled,
|
|
2912
|
+
title: locked ? labels.unlock : labels.lock,
|
|
2913
|
+
"aria-label": locked ? labels.unlock : labels.lock,
|
|
2914
|
+
onClick: (event) => {
|
|
2915
|
+
event.stopPropagation();
|
|
2916
|
+
onToggleSelectable();
|
|
2917
|
+
},
|
|
2918
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_icons.LockIcon, {})
|
|
2919
|
+
}),
|
|
2920
|
+
showVisible && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
2921
|
+
type: "button",
|
|
2922
|
+
className: iconButtonClassName,
|
|
2923
|
+
disabled,
|
|
2924
|
+
title: item.visible ? labels.hide : labels.show,
|
|
2925
|
+
"aria-label": item.visible ? labels.hide : labels.show,
|
|
2926
|
+
onClick: (event) => {
|
|
2927
|
+
event.stopPropagation();
|
|
2928
|
+
onToggleVisible();
|
|
2929
|
+
},
|
|
2930
|
+
children: item.visible ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_icons.EyeIcon, {}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_icons.EyelashIcon, {})
|
|
2931
|
+
})
|
|
2932
|
+
]
|
|
2933
|
+
});
|
|
2934
|
+
}
|
|
2935
|
+
function ObjectDetailsEditor(props) {
|
|
2936
|
+
var _item$name, _item$description2;
|
|
2937
|
+
const { item, labels, showName, showDescription, onCommitName, onCommitDescription } = props;
|
|
2938
|
+
const [draftName, setDraftName] = (0, react.useState)((_item$name = item === null || item === void 0 ? void 0 : item.name) !== null && _item$name !== void 0 ? _item$name : "");
|
|
2939
|
+
const [draftDescription, setDraftDescription] = (0, react.useState)((_item$description2 = item === null || item === void 0 ? void 0 : item.description) !== null && _item$description2 !== void 0 ? _item$description2 : "");
|
|
2940
|
+
const disabled = (item === null || item === void 0 ? void 0 : item.disabled) === true;
|
|
2941
|
+
(0, react.useEffect)(() => {
|
|
2942
|
+
var _item$name2, _item$description3;
|
|
2943
|
+
setDraftName((_item$name2 = item === null || item === void 0 ? void 0 : item.name) !== null && _item$name2 !== void 0 ? _item$name2 : "");
|
|
2944
|
+
setDraftDescription((_item$description3 = item === null || item === void 0 ? void 0 : item.description) !== null && _item$description3 !== void 0 ? _item$description3 : "");
|
|
2945
|
+
}, [
|
|
2946
|
+
item === null || item === void 0 ? void 0 : item.description,
|
|
2947
|
+
item === null || item === void 0 ? void 0 : item.id,
|
|
2948
|
+
item === null || item === void 0 ? void 0 : item.name
|
|
2949
|
+
]);
|
|
2950
|
+
if (!item) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
2951
|
+
className: "univer-rounded-md univer-border univer-border-solid univer-border-gray-200 univer-p-3 univer-text-sm univer-text-gray-500 dark:!univer-border-gray-700 dark:!univer-text-gray-400",
|
|
2952
|
+
children: labels.noSelection
|
|
2953
|
+
});
|
|
2954
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2955
|
+
className: "univer-flex univer-shrink-0 univer-flex-col univer-gap-2 univer-border-0 univer-border-t univer-border-solid univer-border-gray-200 univer-pt-3 dark:!univer-border-gray-700",
|
|
2956
|
+
children: [
|
|
2957
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
2958
|
+
className: "univer-text-xs univer-font-semibold univer-uppercase univer-text-gray-500 dark:!univer-text-gray-400",
|
|
2959
|
+
children: labels.details
|
|
2960
|
+
}),
|
|
2961
|
+
showName && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
|
|
2962
|
+
className: "univer-flex univer-flex-col univer-gap-1",
|
|
2963
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
2964
|
+
className: "univer-text-xs univer-text-gray-500 dark:!univer-text-gray-400",
|
|
2965
|
+
children: labels.name
|
|
2966
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_design.Input, {
|
|
2967
|
+
value: draftName,
|
|
2968
|
+
"aria-label": labels.nameInput,
|
|
2969
|
+
disabled,
|
|
2970
|
+
onChange: setDraftName,
|
|
2971
|
+
onBlur: () => {
|
|
2972
|
+
if (!disabled && normalizeText(draftName) !== item.name) onCommitName(draftName);
|
|
2973
|
+
},
|
|
2974
|
+
onKeyDown: (event) => {
|
|
2975
|
+
if (event.key === "Enter") event.currentTarget.blur();
|
|
2976
|
+
}
|
|
2977
|
+
})]
|
|
2978
|
+
}),
|
|
2979
|
+
showDescription && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
|
|
2980
|
+
className: "univer-flex univer-flex-col univer-gap-1",
|
|
2981
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
2982
|
+
className: "univer-text-xs univer-text-gray-500 dark:!univer-text-gray-400",
|
|
2983
|
+
children: labels.description
|
|
2984
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("textarea", {
|
|
2985
|
+
className: "univer-box-border univer-min-h-16 univer-w-full univer-resize-none univer-rounded-md univer-border univer-border-solid univer-border-gray-200 univer-bg-white univer-p-2 univer-text-sm univer-text-gray-900 univer-outline-none focus:univer-border-primary-500 focus:univer-ring-1 focus:univer-ring-primary-100 disabled:univer-cursor-not-allowed disabled:univer-opacity-70 dark:!univer-border-gray-700 dark:!univer-bg-gray-900 dark:!univer-text-gray-100 dark:focus:!univer-ring-primary-900",
|
|
2986
|
+
value: draftDescription,
|
|
2987
|
+
disabled,
|
|
2988
|
+
placeholder: labels.descriptionPlaceholder,
|
|
2989
|
+
"aria-label": labels.description,
|
|
2990
|
+
onChange: (event) => setDraftDescription(event.currentTarget.value),
|
|
2991
|
+
onBlur: () => {
|
|
2992
|
+
var _item$description4;
|
|
2993
|
+
if (!disabled && normalizeText(draftDescription) !== ((_item$description4 = item.description) !== null && _item$description4 !== void 0 ? _item$description4 : "")) onCommitDescription(draftDescription);
|
|
2994
|
+
}
|
|
2995
|
+
})]
|
|
2996
|
+
})
|
|
2997
|
+
]
|
|
2998
|
+
});
|
|
2999
|
+
}
|
|
3000
|
+
|
|
2437
3001
|
//#endregion
|
|
2438
3002
|
//#region src/views/panel/DrawingAlign.tsx
|
|
2439
3003
|
const DrawingAlign = (props) => {
|
|
@@ -2644,6 +3208,29 @@ const DrawingGroup = (props) => {
|
|
|
2644
3208
|
//#region src/utils/config.ts
|
|
2645
3209
|
const RANGE_DRAWING_ROTATION_LIMIT = [-360, 360];
|
|
2646
3210
|
|
|
3211
|
+
//#endregion
|
|
3212
|
+
//#region src/views/panel/drawing-transform-rotation.ts
|
|
3213
|
+
function isDrawingTransformRotationDisabled(rotateEnabled) {
|
|
3214
|
+
return !rotateEnabled;
|
|
3215
|
+
}
|
|
3216
|
+
function createDrawingTransformRotationChangeHandler(options) {
|
|
3217
|
+
return (val) => {
|
|
3218
|
+
if (isDrawingTransformRotationDisabled(options.rotateEnabled)) return;
|
|
3219
|
+
if (val == null) return;
|
|
3220
|
+
const { unitId, subUnitId, drawingId, drawingType } = options.drawingParam;
|
|
3221
|
+
const updateParam = {
|
|
3222
|
+
unitId,
|
|
3223
|
+
subUnitId,
|
|
3224
|
+
drawingId,
|
|
3225
|
+
drawingType,
|
|
3226
|
+
transform: { angle: val }
|
|
3227
|
+
};
|
|
3228
|
+
options.setRotation(val);
|
|
3229
|
+
options.emitUpdate([updateParam]);
|
|
3230
|
+
options.notifyChange();
|
|
3231
|
+
};
|
|
3232
|
+
}
|
|
3233
|
+
|
|
2647
3234
|
//#endregion
|
|
2648
3235
|
//#region src/views/panel/DrawingTransform.tsx
|
|
2649
3236
|
const INPUT_DEBOUNCE_TIME = 300;
|
|
@@ -2671,6 +3258,8 @@ const DrawingTransform = (props) => {
|
|
|
2671
3258
|
const [yPosition, setYPosition] = (0, react.useState)(originY);
|
|
2672
3259
|
const [rotation, setRotation] = (0, react.useState)(originRotation);
|
|
2673
3260
|
const [lockRatio, setLockRatio] = (0, react.useState)(transformer.keepRatio);
|
|
3261
|
+
const rotateEnabled = resolveDrawingUIRotateEnabled(drawingParam, { getChildren: (drawing) => drawingManagerService.getDrawingsByGroup(drawing) });
|
|
3262
|
+
const rotationDisabled = isDrawingTransformRotationDisabled(rotateEnabled);
|
|
2674
3263
|
const checkMoveBoundary = (left, top, width, height) => {
|
|
2675
3264
|
const { width: topSceneWidth, height: topSceneHeight } = topScene;
|
|
2676
3265
|
const { ancestorLeft, ancestorTop } = scene;
|
|
@@ -2811,19 +3400,18 @@ const DrawingTransform = (props) => {
|
|
|
2811
3400
|
drawingManagerService.featurePluginUpdateNotification([updateParam]);
|
|
2812
3401
|
transformer.refreshControls().changeNotification();
|
|
2813
3402
|
}, INPUT_DEBOUNCE_TIME);
|
|
2814
|
-
const handleRotationChange = (
|
|
2815
|
-
|
|
2816
|
-
|
|
3403
|
+
const handleRotationChange = createDrawingTransformRotationChangeHandler({
|
|
3404
|
+
rotateEnabled,
|
|
3405
|
+
drawingParam: {
|
|
2817
3406
|
unitId,
|
|
2818
3407
|
subUnitId,
|
|
2819
3408
|
drawingId,
|
|
2820
|
-
drawingType
|
|
2821
|
-
|
|
2822
|
-
|
|
2823
|
-
|
|
2824
|
-
|
|
2825
|
-
|
|
2826
|
-
};
|
|
3409
|
+
drawingType
|
|
3410
|
+
},
|
|
3411
|
+
setRotation,
|
|
3412
|
+
emitUpdate: (updateParams) => drawingManagerService.featurePluginUpdateNotification(updateParams),
|
|
3413
|
+
notifyChange: () => transformer.refreshControls().changeNotification()
|
|
3414
|
+
});
|
|
2827
3415
|
const handleLockRatioChange = (val) => {
|
|
2828
3416
|
setLockRatio(val);
|
|
2829
3417
|
transformer.keepRatio = val;
|
|
@@ -2885,6 +3473,7 @@ const DrawingTransform = (props) => {
|
|
|
2885
3473
|
value: rotation,
|
|
2886
3474
|
min: RANGE_DRAWING_ROTATION_LIMIT[0],
|
|
2887
3475
|
max: RANGE_DRAWING_ROTATION_LIMIT[1],
|
|
3476
|
+
disabled: rotationDisabled,
|
|
2888
3477
|
onChange: handleRotationChange
|
|
2889
3478
|
})] })
|
|
2890
3479
|
]
|
|
@@ -3142,9 +3731,13 @@ Object.defineProperty(exports, 'DrawingRenderService', {
|
|
|
3142
3731
|
return DrawingRenderService;
|
|
3143
3732
|
}
|
|
3144
3733
|
});
|
|
3734
|
+
exports.DrawingUIMenuSchema = menuSchema;
|
|
3145
3735
|
exports.IMAGE_CLIP_SHAPE_PICKER_COMPONENT = IMAGE_CLIP_SHAPE_PICKER_COMPONENT;
|
|
3146
3736
|
exports.ImageCropperObject = ImageCropperObject;
|
|
3147
3737
|
exports.ImageResetSizeOperation = ImageResetSizeOperation;
|
|
3738
|
+
exports.OBJECT_LIST_CANVAS_SECTION_ID = OBJECT_LIST_CANVAS_SECTION_ID;
|
|
3739
|
+
exports.OBJECT_LIST_FLOATING_SECTION_ID = OBJECT_LIST_FLOATING_SECTION_ID;
|
|
3740
|
+
exports.ObjectListPanelBase = ObjectListPanelBase;
|
|
3148
3741
|
exports.OpenImageCropOperation = OpenImageCropOperation;
|
|
3149
3742
|
exports.SetDrawingAlignOperation = SetDrawingAlignOperation;
|
|
3150
3743
|
exports.SetDrawingArrangeOperation = SetDrawingArrangeOperation;
|
|
@@ -3155,6 +3748,12 @@ Object.defineProperty(exports, 'UniverDrawingUIPlugin', {
|
|
|
3155
3748
|
return UniverDrawingUIPlugin;
|
|
3156
3749
|
}
|
|
3157
3750
|
});
|
|
3751
|
+
exports.disposeDrawingRenderObject = disposeDrawingRenderObject;
|
|
3158
3752
|
exports.getCurrentUnitInfo = getCurrentUnitInfo;
|
|
3753
|
+
exports.getDrawingRenderObject = getDrawingRenderObject;
|
|
3754
|
+
exports.getObjectListPanelLabels = getObjectListPanelLabels;
|
|
3755
|
+
exports.getObjectListPanelSectionIdForDrawingType = getObjectListPanelSectionIdForDrawingType;
|
|
3756
|
+
exports.getObjectListPanelTypeName = getObjectListPanelTypeName;
|
|
3159
3757
|
exports.getUpdateParams = getUpdateParams;
|
|
3160
|
-
exports.insertGroupObject = insertGroupObject;
|
|
3758
|
+
exports.insertGroupObject = insertGroupObject;
|
|
3759
|
+
exports.isFloatingObjectListDrawingType = isFloatingObjectListDrawingType;
|