From 32c6e4ced8e5208b870f482ae9e9c90caef8e700 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BE=B7=E5=AE=87?= Date: Thu, 3 Sep 2026 14:27:48 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=96=B9=E5=90=91=E9=94=AE?= =?UTF-8?q?=E9=95=BF=E6=8C=89=E5=8F=96=E6=B6=88=E5=90=8E=E7=9A=84=E7=82=B9?= =?UTF-8?q?=E5=87=BB=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 重置 pointercancel 和 pointerleave 的重复触发标记。 补充长按取消后点击仍可调整的回归测试。 --- .../Inspector/Transform/TransformEditor.tsx | 10 ++++++-- .../tests/TransformEditor.test.tsx | 23 +++++++++++++++++-- 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/apps/ai-game-creator-shell/src/view/ui-editor/components/Inspector/Transform/TransformEditor.tsx b/apps/ai-game-creator-shell/src/view/ui-editor/components/Inspector/Transform/TransformEditor.tsx index 62e68347c..a1e8e5cd9 100644 --- a/apps/ai-game-creator-shell/src/view/ui-editor/components/Inspector/Transform/TransformEditor.tsx +++ b/apps/ai-game-creator-shell/src/view/ui-editor/components/Inspector/Transform/TransformEditor.tsx @@ -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); diff --git a/apps/ai-game-creator-shell/tests/TransformEditor.test.tsx b/apps/ai-game-creator-shell/tests/TransformEditor.test.tsx index 62683bea3..f672a9068 100644 --- a/apps/ai-game-creator-shell/tests/TransformEditor.test.tsx +++ b/apps/ai-game-creator-shell/tests/TransformEditor.test.tsx @@ -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); + }); });