fix(scence): support scence can set negtive offset (#7013)

This commit is contained in:
VicKun
2026-06-03 19:54:50 +08:00
committed by GitHub
parent 0a453590f3
commit 2804895e89
3 changed files with 32 additions and 0 deletions
@@ -447,6 +447,26 @@ describe('engine scene viewport extra', () => {
expect(moveBoundary.moveLeft).toBeLessThanOrEqual(0);
expect(moveBoundary.moveTop).toBeLessThanOrEqual(0);
const freeMoveTransformer = new Transformer(sceneMock, {
moveBoundaryEnabled: false,
} as any);
const freeMoveBoundary = (freeMoveTransformer as any)._checkMoveBoundary(
{
left: 820,
top: -28,
width: 520,
height: 520,
},
0,
40,
0,
0,
1280,
720
);
expect(freeMoveBoundary.moveLeft).toBe(0);
expect(freeMoveBoundary.moveTop).toBe(40);
(transformer as any)._startOffsetX = 10;
(transformer as any)._startOffsetY = 10;
expect((transformer as any)._moveBufferBlocker(11, 11)).toBe(true);
@@ -74,4 +74,5 @@ export interface ITransformerConfig {
zeroLeft?: number;
zeroTop?: number;
moveBoundaryEnabled?: boolean;
}
@@ -206,6 +206,7 @@ export class Transformer extends Disposable implements ITransformerConfig {
zeroLeft = 0;
zeroTop = 0;
moveBoundaryEnabled = true;
/**
* leftTop centerTop rightTop
@@ -400,6 +401,7 @@ export class Transformer extends Disposable implements ITransformerConfig {
boundBoxFunc,
useSingleNodeRotation,
shouldOverdrawWholeArea,
moveBoundaryEnabled,
} = this;
if (objectTransformerConfig != null) {
isCropper = objectTransformerConfig.isCropper ?? isCropper;
@@ -447,6 +449,7 @@ export class Transformer extends Disposable implements ITransformerConfig {
boundBoxFunc = objectTransformerConfig.boundBoxFunc ?? boundBoxFunc;
useSingleNodeRotation = objectTransformerConfig.useSingleNodeRotation ?? useSingleNodeRotation;
shouldOverdrawWholeArea = objectTransformerConfig.shouldOverdrawWholeArea ?? shouldOverdrawWholeArea;
moveBoundaryEnabled = objectTransformerConfig.moveBoundaryEnabled ?? moveBoundaryEnabled;
}
return {
@@ -495,6 +498,7 @@ export class Transformer extends Disposable implements ITransformerConfig {
boundBoxFunc,
useSingleNodeRotation,
shouldOverdrawWholeArea,
moveBoundaryEnabled,
};
}
@@ -652,6 +656,13 @@ export class Transformer extends Disposable implements ITransformerConfig {
}
private _checkMoveBoundary(moveObject: BaseObject, moveLeft: number, moveTop: number, ancestorLeft: number, ancestorTop: number, topSceneWidth: number, topSceneHeight: number) {
if (this._getConfig(moveObject).moveBoundaryEnabled === false) {
return {
moveLeft,
moveTop,
};
}
const { left, top, width, height } = moveObject;
let resultMoveLeft = moveLeft;
let resultMoveTop = moveTop;