gohud

浮動視窗

← 控制項

GoSurface — 外殼

彈出視窗、面板與下拉選單全都用這一個。它負責安全區域、虛擬鍵盤、 固定的頁首與頁尾、可捲動的本文、哪一層視窗在最上面、焦點還原、返回鍵的歸屬 以及拖曳改變大小。

擺放看起來像用在哪
CENTER正中央的一張卡片確認、設定
BOTTOM從下方升起的面板清單、管理頁
ANCHOR釘在某個控制項旁邊的卡片下拉選單、快顯選單
它不會自己移除。close_requested 做出反應 — 隱藏或釋放 — 是 持有它的畫面的責任,因為外殼無從得知它為什麼要關(是存檔後關閉,還是捨棄)。

GoSheet — 從底部上來的頁面

var sheet := GoSheet.new()
add_child(sheet)
sheet.open("背包")
sheet.toolbar().add_child(GoStyle.line_edit("搜尋…"))
sheet.toolbar().visible = true
sheet.footer().add_child(GoStyle.button("關閉", sheet.close, GoStyle.Tone.PRIMARY))
sheet.footer().visible = true

它自己持有一個 CanvasLayer,所以能穩穩地待在 HUD 之上。open() 會清空 本文,並關掉返回鍵與固定列 — 在一個無處可回的畫面上擺一顆按不動的按鈕,看起來就像壞了。

GoDialogs — 可以 await 的確認

if await dialogs.confirm("刪除存檔", "此動作無法復原。"):
    delete_save()

confirm(title, body, ok_text, cancel_text, extra, args, destructive) — body 之後的全部 都是選用的,而 alert() 用法相同,只是只有一顆按鈕。碰到無法復原的事情就設定 destructive:確認按鈕會變成實心的 GoStyle.Tone.DANGER_SOLID 按鈕。在淺色佈景主題上,著色的危險標籤必須一路變深到看起來像黑字;實心按鈕則維持紅底白字。 因為同一個視窗會被重複使用,所以每次呼叫都會重新套用色調;而在一個對話方塊開著時再呼叫 confirm(),會立刻回傳 falseconfirm_key() 收的是 翻譯鍵。

按鈕排列。action_layout 預設是 VERTICAL(對長翻譯比較安全), HORIZONTAL 會排成一列、各佔一半寬度,而 AUTO 只在兩個標籤都能在單行內 塞進卡片一半寬度時才排成一列,否則就上下堆疊。action_gap 是按鈕之間的間距, body_gap 是按鈕上方的間距 — 把後者調得比按鈕間距更寬,問題與選項才會讀起來像兩個部分。 只想改某一個對話方塊時,在開啟之前呼叫 set_next_action_layout()。 按鈕列是在對話方塊第一次開啟時才建立的,所以自動載入的 GoDialogs 在啟動時不會多做任何事。

GoForm — 限制寬度的表單

它保證底下的標籤會換行。沒有這一點,一個長句子就會拉成單獨一行, 其最小寬度超過螢幕,兩側被裁掉 — 你甚至看不出自己在哪個畫面。 靠人工在每個場景手動打開換行,每次都會忘。

GoScroll — 觸控捲動

裡面只放一樣東西。頁首與按鈕列要放在外面 — 長清單絕不能把它們推出畫面。 use_panel_edge() 會把捲軸移進卡片原有的內距裡,而內容仍保持它的縮排。