Skip to content

Commit 26d53ed

Browse files
committed
fix stage elements drag bug
1 parent da2f87e commit 26d53ed

File tree

3 files changed

+31
-9
lines changed

3 files changed

+31
-9
lines changed

src/modules/stage/StageShield.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -638,10 +638,8 @@ export default class StageShield extends DrawerBase implements IStageShield, ISt
638638
this.store.updateElements(selectedElements, {
639639
isDragging: true,
640640
});
641-
selectedElements.forEach(element => {
642-
element.translateBy(this.movingOffset);
643-
element.onTranslating();
644-
});
641+
this.store.updateElementsTranslate(selectedElements, this.movingOffset);
642+
selectedElements.forEach(element => element.onTranslating());
645643
this.selection.refresh();
646644
}
647645

src/modules/stage/StageStore.ts

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1213,6 +1213,19 @@ export default class StageStore implements IStageStore {
12131213
});
12141214
}
12151215

1216+
/**
1217+
* 组件移动
1218+
*
1219+
* @param elements
1220+
* @param offset
1221+
*/
1222+
updateElementsTranslate(elements: IElement[], offset: IPoint): void {
1223+
elements.forEach(element => {
1224+
element.translateBy(offset);
1225+
this._updateElementStageStatusIfy(element);
1226+
});
1227+
}
1228+
12161229
/**
12171230
* 遍历所有节点
12181231
*
@@ -1281,15 +1294,22 @@ export default class StageStore implements IStageStore {
12811294
ids = null;
12821295
}
12831296

1297+
/**
1298+
* 更新组件舞台状态
1299+
*
1300+
* @param element
1301+
*/
1302+
private _updateElementStageStatusIfy(element: IElement): void {
1303+
const isOnStage = element.isModelPolygonOverlap(this.shield.stageWordRectCoords);
1304+
this.updateElementById(element.id, { isOnStage });
1305+
}
1306+
12841307
/**
12851308
* 刷新舞台上的所有组件,超出舞台范围的组件不予展示
12861309
*/
12871310
refreshStageElements(): void {
1288-
const stageWordRectCoords = this.shield.stageWordRectCoords;
1289-
this._elementList.forEach(node => {
1290-
const element = node.value;
1291-
const isOnStage = element.isModelPolygonOverlap(stageWordRectCoords);
1292-
this.updateElementById(element.id, { isOnStage });
1311+
this._elementList.forEach(({ value: element }) => {
1312+
this._updateElementStageStatusIfy(element);
12931313
element.refresh({ points: true, rotation: true, originals: true, outline: true, strokes: true });
12941314
});
12951315
}
@@ -1393,9 +1413,11 @@ export default class StageStore implements IStageStore {
13931413
angle = MathUtils.mirrorAngle(element.originalAngle + angle - originalAngle);
13941414
angle = MathUtils.precise(angle, 1);
13951415
element.setAngle(angle);
1416+
this._updateElementStageStatusIfy(element);
13961417
if (element.isGroup) {
13971418
(element as IElementGroup).deepSubs.forEach(sub => {
13981419
sub.rotateBy(angle - element.originalAngle, centerCoord);
1420+
this._updateElementStageStatusIfy(sub);
13991421
});
14001422
}
14011423
});

src/types/IStageStore.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,8 @@ export default interface IStageStore extends IStageSetter {
8989
updateElementsTransform(elements: IElement[], offset: IPoint): void;
9090
// 更新组件圆角半径
9191
updateElementsCorner(elements: IElement[], offset: IPoint): void;
92+
// 更新组件移动
93+
updateElementsTranslate(elements: IElement[], offset: IPoint): void;
9294
// 计算旋转组件中心
9395
refreshRotatingStates(point: IPoint): void;
9496
// 计算给定组件旋转状态

0 commit comments

Comments
 (0)