5bcaca7233
统一主画布与子画布的可见渲染层和 viewport 状态管理。 将子画布改为固定视口加无限平移 world,并保证首次 fit 的可读比例。 补充转场、滚轮、viewport 和资源画本回归测试,更新技术方案文档。
72 lines
2.0 KiB
TypeScript
72 lines
2.0 KiB
TypeScript
import { describe, expect, it } from 'vitest';
|
|
|
|
import {
|
|
createResourceCanvasPageWheelState,
|
|
queueResourceCanvasPageWheel,
|
|
resetResourceCanvasPageWheel,
|
|
takeResourceCanvasPageWheelStep,
|
|
} from '../src/view/project-development/resourceCanvasController';
|
|
|
|
describe('resource canvas page wheel controller', () => {
|
|
it('keeps the 20px threshold and converts wheel deltas into page steps', () => {
|
|
const state = createResourceCanvasPageWheelState<'document'>();
|
|
queueResourceCanvasPageWheel(state, {
|
|
deltaY: 10,
|
|
deltaMode: 0,
|
|
canvasHeight: 600,
|
|
maxQueuedSteps: 3,
|
|
});
|
|
expect(state.pendingStepCount).toBe(0);
|
|
|
|
queueResourceCanvasPageWheel(state, {
|
|
deltaY: 120,
|
|
deltaMode: 0,
|
|
canvasHeight: 600,
|
|
maxQueuedSteps: 3,
|
|
});
|
|
expect(takeResourceCanvasPageWheelStep(state, 1_000)).toMatchObject({
|
|
stepOffset: 1,
|
|
waitMs: 0,
|
|
});
|
|
});
|
|
|
|
it('reverses and clamps queued steps without leaking the old direction', () => {
|
|
const state = createResourceCanvasPageWheelState<'document'>();
|
|
queueResourceCanvasPageWheel(state, {
|
|
deltaY: 480,
|
|
deltaMode: 0,
|
|
canvasHeight: 600,
|
|
maxQueuedSteps: 2,
|
|
});
|
|
queueResourceCanvasPageWheel(state, {
|
|
deltaY: -120,
|
|
deltaMode: 0,
|
|
canvasHeight: 600,
|
|
maxQueuedSteps: 2,
|
|
});
|
|
expect(state.pendingStepCount).toBe(-1);
|
|
|
|
resetResourceCanvasPageWheel(state, 'document');
|
|
expect(state).toMatchObject({
|
|
activeCategory: 'document',
|
|
accumulatedDeltaY: 0,
|
|
pendingStepCount: 0,
|
|
pendingTimerId: null,
|
|
});
|
|
});
|
|
|
|
it('honors the 180ms switch interval for queued steps', () => {
|
|
const state = createResourceCanvasPageWheelState<'document'>();
|
|
state.pendingStepCount = 1;
|
|
state.lastSwitchAt = 900;
|
|
expect(takeResourceCanvasPageWheelStep(state, 1_000)).toEqual({
|
|
stepOffset: 0,
|
|
waitMs: 80,
|
|
});
|
|
expect(takeResourceCanvasPageWheelStep(state, 1_080)).toEqual({
|
|
stepOffset: 1,
|
|
waitMs: 0,
|
|
});
|
|
});
|
|
});
|