From 415240faa7bb8108ab5c877df33cd1b75bb4eeeb 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:31:04 +0800 Subject: [PATCH] =?UTF-8?q?=E9=99=90=E5=88=B6=E6=96=B9=E5=90=91=E9=94=AE?= =?UTF-8?q?=E9=95=BF=E6=8C=89=E4=BB=85=E5=93=8D=E5=BA=94=E4=B8=BB=E6=8C=87?= =?UTF-8?q?=E9=92=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 忽略非主指针按钮的 pointerdown,避免右键触发连续调整。 补充非主键长按不产生调整的回归测试。 --- .../Inspector/Transform/TransformEditor.tsx | 3 +++ .../tests/TransformEditor.test.tsx | 21 ++++++++++++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) 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 a1e8e5cd9..20dc6f4bd 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 @@ -473,6 +473,9 @@ function DirectionButton({ disabled={disabled} className="grid size-8 place-items-center rounded-lg border border-(--platform-subpanel-border) bg-white/70 text-(--platform-text-soft) transition hover:border-orange-300 hover:bg-orange-50 hover:text-orange-700 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-orange-200 disabled:cursor-default disabled:opacity-40" onPointerDown={(event) => { + if (event.button !== 0) { + return; + } event.preventDefault(); startRepeating(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 f672a9068..9145db48b 100644 --- a/apps/ai-game-creator-shell/tests/TransformEditor.test.tsx +++ b/apps/ai-game-creator-shell/tests/TransformEditor.test.tsx @@ -13,6 +13,12 @@ const transform: Transform = { offset_max: [30, 40], }; +function firePointerDown(element: HTMLElement, button: number) { + const event = new Event('pointerdown', { bubbles: true }); + Object.defineProperty(event, 'button', { value: button }); + fireEvent(element, event); +} + function renderEditor(onChange = vi.fn()) { return { onChange, @@ -84,7 +90,7 @@ describe('TransformEditor corner offset controls', () => { const { onChange } = renderEditor(); const button = screen.getByRole('button', { name: '左上角向右' }); - fireEvent.pointerDown(button, { button: 0 }); + firePointerDown(button, 0); act(() => { vi.advanceTimersByTime(350); }); @@ -93,4 +99,17 @@ describe('TransformEditor corner offset controls', () => { expect(onChange).toHaveBeenCalledTimes(2); }); + + it('does not start repeating for non-primary pointer buttons', () => { + vi.useFakeTimers(); + const { onChange } = renderEditor(); + const button = screen.getByRole('button', { name: '左上角向右' }); + + firePointerDown(button, 2); + act(() => { + vi.advanceTimersByTime(350); + }); + + expect(onChange).not.toHaveBeenCalled(); + }); });