Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,10 @@
- **不透明度調整組合鍵**:
- **按住 Back/View 鍵 + 方向鍵 ↑/↓**:即時增加或減少視窗不透明度(每次增減 5%)。
- **按住 Back/View 鍵 + 目前配置下的刪除鍵**:將視窗不透明度重設為 100%。
- **Back/View 鍵 + 下側鍵(A/×/B)**:復原(Undo)上一步輸入操作。
- **Back/View 鍵 + 上側鍵(Y/△/X)**:全選輸入框中的所有文字。
- **右搖桿按壓(R3)**:重讀輸入框中的全部文字內容(無障礙輔助功能)。
- **打字觸感回饋**:字元插入時會觸發輕柔脈衝,使打字節奏具有可感知的觸覺確認。批次貼上、片語插入、接近字數上限,或透過觸控式鍵盤搭配注音等輸入法(IME)輸入時不觸發此回饋。
Comment thread
perditavojo marked this conversation as resolved.

### 3. 右鍵選單與對話框控制器操作 🖱️

Expand Down
29 changes: 16 additions & 13 deletions src/InputBox/Core/Controls/HelpDialog.cs
Original file line number Diff line number Diff line change
Expand Up @@ -781,19 +781,22 @@ private void UpdateMinimumSize(bool forceRecalculate = false)

int desiredMinWidth = (int)(BaseDialogMinWidth * scale);

(int maxFitWidth, _) = DialogLayoutHelper.GetMaxFitSize(workArea);

formW = Math.Max(formW, desiredMinWidth);
formW = Math.Min(formW, maxFitWidth);

// 視窗高度:內容高度 + 底部按鈕列 + 表單 Padding + 標題列 + 框架。
// 上限設為可用高度的 45%,確保在 ROG Ally X 等小螢幕裝置(約 760px 高)開啟 OSK 時仍能完整顯示。
int naturalH = contentPref.Height + footerH + Padding.Vertical + captionH + frameH + 8,
maxH = Math.Max(320, (int)(workArea.Height * 0.45f)),
desiredMinHeight = (int)(300 * scale),
// 邊界檢查:確保最小值不超過最大值,防止 Math.Clamp 拋出異常。
finalMaxH = Math.Max(desiredMinHeight, maxH),
formH = Math.Clamp(naturalH, desiredMinHeight, finalMaxH);
(int maxFitWidth, int maxFitHeight) = DialogLayoutHelper.GetMaxFitSize(workArea);

formW = Math.Clamp(formW, desiredMinWidth, maxFitWidth);

// 視窗高度:依實際內容偏好尺寸計算。
// 上限取「工作區 65%」與「工作區可用高度」的較小值:
// - 65% 上限:確保在 ROG Ally X 等手持裝置開啟 OSK 時 dialog 仍可見(OSK 約佔 50%);
// 同時避免在大螢幕(2K/4K)上 dialog 幾乎填滿整個畫面。
// Screen.GetWorkingArea 不感知 OSK 存在,因此需以百分比手工補償。
// - maxFitHeight:確保 dialog 永遠不超出螢幕工作區邊界(保留 40px 邊界)。
// 說明文字以捲動面板呈現,任何超出上限的內容均可捲動瀏覽。
int desiredMinHeight = (int)(300 * scale),
naturalH = contentPref.Height + footerH + Padding.Vertical + captionH + frameH + 8,
oskAwareMaxH = Math.Max(320, (int)(workArea.Height * 0.65f)),
cappedMaxH = Math.Min(oskAwareMaxH, maxFitHeight),
formH = Math.Clamp(naturalH, desiredMinHeight, Math.Max(desiredMinHeight, cappedMaxH));

Size = new Size(formW, formH);
}
Expand Down
34 changes: 16 additions & 18 deletions src/InputBox/Core/Controls/NumericInputDialog.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1574,24 +1574,22 @@ private void UpdateMinimumSize()
// 計算邊框與標題列所需的額外空間(比照 HelpDialog.cs)。
int frameW = SystemInformation.FrameBorderSize.Width * 2,
frameH = SystemInformation.FrameBorderSize.Height * 2,
captionH = SystemInformation.CaptionHeight,
// 視窗寬度:內容寬度 + 表單 Padding + 框架。
formW = contentPref.Width + Padding.Horizontal + frameW + 8,
desiredMinWidth = (int)(450 * scale),
maxFitW = DialogLayoutHelper.GetMaxFitSize(workArea).MaxFitWidth;

formW = Math.Clamp(formW, desiredMinWidth, maxFitW);

// 視窗高度:內容高度 + 表單 Padding + 標題列 + 框架。
// 上限設為可用高度的 45%,確保在手持裝置(如 ROG Ally)開啟 OSK 時仍能完整顯示。
int naturalH = contentPref.Height + Padding.Vertical + captionH + frameH + 8,
maxH = Math.Max(320, (int)(workArea.Height * 0.45f)),
desiredMinHeight = (int)(300 * scale),
// 邊界檢查:確保最小值不超過最大值,防止 Math.Clamp 拋出異常。
finalMaxH = Math.Max(desiredMinHeight, maxH),
formH = Math.Clamp(naturalH, desiredMinHeight, finalMaxH);

MinimumSize = new Size(Math.Min(desiredMinWidth, maxFitW), desiredMinHeight);
captionH = SystemInformation.CaptionHeight;

(int maxFitW, int maxFitH) = DialogLayoutHelper.GetMaxFitSize(workArea);

// 視窗寬度:內容寬度 + 表單 Padding + 框架,以工作區上限為準。
int formW = Math.Clamp(
contentPref.Width + Padding.Horizontal + frameW + 8,
(int)(450 * scale),
maxFitW);

// 視窗高度:依實際內容偏好尺寸計算,上限為工作區可用高度(保留 40px 邊界)。
int desiredMinHeight = (int)(300 * scale),
naturalH = contentPref.Height + Padding.Vertical + captionH + frameH + 8,
formH = Math.Clamp(naturalH, desiredMinHeight, Math.Max(desiredMinHeight, maxFitH));

MinimumSize = new Size(Math.Min((int)(450 * scale), maxFitW), desiredMinHeight);

Size = new Size(formW, formH);

Expand Down
Loading
Loading