修复方向键长按取消后的点击状态

重置 pointercancel 和 pointerleave 的重复触发标记。

补充长按取消后点击仍可调整的回归测试。
This commit is contained in:
2026-09-03 14:27:48 +08:00
parent 7a66527b5e
commit 32c6e4ced8
2 changed files with 29 additions and 4 deletions
@@ -477,8 +477,14 @@ function DirectionButton({
startRepeating(event.shiftKey ? 10 : 1);
}}
onPointerUp={stopRepeating}
onPointerCancel={stopRepeating}
onPointerLeave={stopRepeating}
onPointerCancel={() => {
repeated.current = false;
stopRepeating();
}}
onPointerLeave={() => {
repeated.current = false;
stopRepeating();
}}
onClick={(event) => {
if (!repeated.current) {
onAdjust(event.shiftKey ? 10 : 1);
@@ -1,7 +1,7 @@
// @vitest-environment jsdom
import { fireEvent, render, screen } from '@testing-library/react';
import { describe, expect, it, vi } from 'vitest';
import { act, fireEvent, render, screen } from '@testing-library/react';
import { afterEach, describe, expect, it, vi } from 'vitest';
import type { Transform } from '../src/features/ui-editor/types/Transform';
import { TransformEditor } from '../src/view/ui-editor/components/Inspector/Transform/TransformEditor';
@@ -21,6 +21,10 @@ function renderEditor(onChange = vi.fn()) {
}
describe('TransformEditor corner offset controls', () => {
afterEach(() => {
vi.useRealTimers();
});
it('uses one X/Y input pair for the selected corner', () => {
renderEditor();
@@ -74,4 +78,19 @@ describe('TransformEditor corner offset controls', () => {
offset_max: [30, 30],
});
});
it('allows a click adjustment after a cancelled long press', () => {
vi.useFakeTimers();
const { onChange } = renderEditor();
const button = screen.getByRole('button', { name: '左上角向右' });
fireEvent.pointerDown(button, { button: 0 });
act(() => {
vi.advanceTimersByTime(350);
});
fireEvent.pointerCancel(button);
fireEvent.click(button);
expect(onChange).toHaveBeenCalledTimes(2);
});
});