From 6eacc1947aacfd30e5d63d2d3fe4798adef3463b Mon Sep 17 00:00:00 2001 From: perditavojo <117562794+perditavojo@users.noreply.github.com> Date: Fri, 17 Apr 2026 10:28:12 +0800 Subject: [PATCH 1/4] =?UTF-8?q?feat(gamepad):=20=E8=A3=9C=E5=BC=B7?= =?UTF-8?q?=E7=89=87=E8=AA=9E=E5=88=86=E9=A0=81=E5=BF=AB=E6=8D=B7=E8=88=87?= =?UTF-8?q?=E7=84=A1=E9=9A=9C=E7=A4=99=E8=AA=AA=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增片語子選單的 LB/RB/LT/RT 分頁快捷與回饋。 - 補上主輸入框 LT/RT 游標跳位、多語系資源與 README 說明。 - 清理不必要的 pragma 抑制並補上相關回歸測試。 --- README.md | 4 +- .../Core/Controls/GamepadMessageBox.cs | 5 +- .../Core/Feedback/VibrationPatterns.cs | 6 + .../Core/Input/GameInputGamepadController.cs | 14 ++ src/InputBox/Core/Input/GamepadEventBinder.cs | 13 ++ src/InputBox/Core/Input/IGamepadController.cs | 10 + .../Core/Input/XInputGamepadController.cs | 26 +++ .../Core/Services/RestartMenuTextResolver.cs | 2 +- .../Core/Services/RestartRequestDecider.cs | 2 +- .../Services/RestartRequirementSnapshot.cs | 2 +- src/InputBox/MainForm.ContextMenu.cs | 127 ++++++++++-- src/InputBox/MainForm.Gamepad.cs | 103 ++++++++++ src/InputBox/Resources/Strings.Designer.cs | 16 +- src/InputBox/Resources/Strings.de.resx | 9 +- src/InputBox/Resources/Strings.fr.resx | 9 +- src/InputBox/Resources/Strings.ja.resx | 9 +- src/InputBox/Resources/Strings.ko.resx | 9 +- src/InputBox/Resources/Strings.resx | 9 +- src/InputBox/Resources/Strings.zh-Hans.resx | 9 +- src/InputBox/Resources/Strings.zh-Hant.resx | 9 +- .../AppSettingsTestCollection.cs | 4 +- .../InputBox.Tests/GamepadEventBinderTests.cs | 192 ++++++++++++++++++ .../InputBox.Tests/GamepadMessageBoxTests.cs | 56 ++++- tests/InputBox.Tests/README.md | 3 +- .../InputBox.Tests/RestartPromptStateTests.cs | 2 +- .../RestartRequestDeciderTests.cs | 2 +- tests/InputBox.Tests/TaskExtensionsTests.cs | 6 +- 27 files changed, 610 insertions(+), 48 deletions(-) create mode 100644 tests/InputBox.Tests/GamepadEventBinderTests.cs diff --git a/README.md b/README.md index 8e0156e..403c66c 100644 --- a/README.md +++ b/README.md @@ -128,6 +128,7 @@ - **左搖桿**:功能等同鍵盤**方向鍵**。 - 用於瀏覽輸入歷程記錄或移動游標。 - **右搖桿 ←**/**→**:**虛擬選取模式**。直接擴張或縮減文字選取範圍。 +- **LT/RT**:快速將游標跳到文字開頭/結尾。 - **Start/Menu 鍵**:開啟 Windows 觸控式鍵盤(`TabTip.exe`),可在已有內容時直接叫出鍵盤進行修正。 - **Back/View 鍵**:在放開按鍵時,嘗試將焦點切換回先前的前景視窗。 - **按住 LB 與 RB 不放,再按下目前配置下的取消鍵**:功能等同於控制器 **Back/View 鍵**。 @@ -146,6 +147,7 @@ - **方向鍵 ←/→**:進入(或按目前配置下的**確認鍵**)或退出(或按目前配置下的**取消鍵**)子選單。 - **確認鍵/Start/Menu 鍵**:執行選取的項目。 - **取消鍵/Back/View 鍵**:關閉選單。 + - **片語子選單開啟時**:可使用 **LB/RB** 快速切換上一頁/下一頁,並以 **LT/RT** 直接跳至首頁/末頁。 - **數值輸入對話框操作** 🔢: - **方向鍵 ↑/↓**:增加或減少數值。 - **方向鍵 ←/→**:移動游標(或 **LB** + 方向鍵進行單字跳轉)。 @@ -191,7 +193,7 @@ - **片語數量提示**:片語管理對話框會顯示目前數量(例如 `12/50`);接近上限時會提供額外視覺提醒,協助避免新增失敗。 - **片語編輯對話框中的取消鍵行為**:若焦點位於名稱或內容輸入框且有文字,先清空該輸入框;若輸入框已為空或焦點不在輸入框,則執行取消關閉。 - **片語編輯對話框中的 Enter 行為**:在名稱或內容輸入框中,按下 **Enter** 時,若目前欄位為空會開啟 Windows 觸控式鍵盤;若目前欄位已有內容則執行確認驗證。於內容欄位可使用 **Shift + Enter** 換行。 - - **分頁行為**:若片語項目超過單頁容量,子選單會顯示 ◀/▶ 分頁控制;每次重新開啟片語子選單時,會回到第 1 頁。 + - **分頁行為**:若片語項目超過單頁容量,子選單會顯示 ◀/▶ 分頁控制;每次重新開啟片語子選單時,會回到第 1 頁。控制器可直接使用 **LB/RB** 快速切頁,並以 **LT/RT** 跳至首頁或末頁。 - **快速鍵設定** ⚙️: - **修飾鍵組合**:可直接勾選 **Alt**、**Ctrl**、**Shift** 或 **Win** 鍵作為快速鍵的修飾部分。 - **擷取主要按鍵**:點選後,應用程式會進入擷取狀態,此時按下鍵盤上的任一按鍵即可將其設定為喚出快速鍵的主要按鍵(按下鍵盤 **ESC 鍵** 或控制器目前配置下的**取消鍵**可取消擷取)。 diff --git a/src/InputBox/Core/Controls/GamepadMessageBox.cs b/src/InputBox/Core/Controls/GamepadMessageBox.cs index 57b2c29..b4d645c 100644 --- a/src/InputBox/Core/Controls/GamepadMessageBox.cs +++ b/src/InputBox/Core/Controls/GamepadMessageBox.cs @@ -366,10 +366,7 @@ private void BuildButtons( { // 決定按鈕清單(由右至左順序,因為 FlowDirection = RightToLeft)。 List<(string label, DialogResult result, bool isPrimary, bool isCancel)> specs = GetButtonSpecs(buttons); - -#pragma warning disable IDE0028 // 簡化集合初始化 - List