Button.new() を直に呼ぶと、余白も高さも折り返しも画面ごとに少しずつずれていく。
そのずれはコードレビューでは見えず、スクリーンショットでは一目で分かる。
| 分類 | 関数 |
|---|---|
| 構造 | column row wrap_row padding spacer divider responsive_grid aspect foldable |
| 文字 | label label_key line section typography |
| ボタン | button button_key icon_button list_button list_row apply_icon style_choice_card style_chip_button style_chip_label |
| 入力 | line_edit textarea toggle checkbox slider picker select dropdown radio_group segmented choice_grid |
| 表示 | card chip hud_panel chip_panel avatar skeleton alert table tabs breadcrumb progress empty_state |
| サーフェスの部品 | surface box floating disc face_padding |
| 補助 | form fit_words natural_width tooltip_node card_body let_input_through |
box() は必ず StyleBoxFlat を返す。 呼び出し側が受け取って
bg_color や corner_radius を調整するからだ。独自の形を保ったままにしたいときは
surface() を使う。
説明の付いたリスト行
GoStyle.list_button(GoIconSet.SWORD, "誓いの剣", _inspect, Color.TRANSPARENT,
"ロングソード / 攻撃力 42", false)
2行目のある行は上下の余白が等しくなり、1行の行より広めにとられる。タイトルと説明の組は アイコンの脇で上下中央に保たれる — コンテナが行を縦に引き伸ばしたときも、説明が複数行に折り返した あとも同じだ。行全体は1つのタップ対象のままである。
medieval_light の下での、同じファクトリ呼び出し。折り返して流れる行
コントロールは自然な幅のまま wrap_row に入れる。折り返しを有効にしたままだと、
ボタンの最小幅はほとんど 0 まで落ち、行はその値でセルの大きさを決めてしまう — ラベルが1文字ずつ改行される。
ファクトリがこれを防いでくれる。
空のリストを空のまま見せない
page.add_child(GoStyle.empty_state(GoIconSet.BOX, "まだ何もない"))
人は何もない画面を壊れていると読む。
継承用のフック
子ウィジェットを作るところはすべて上書き可能なメソッドを通る。だから gohud の型を継承したプロジェクトは、 コードを複製せずに自分のサブクラスをウィジェットの内側へ入れられる。
| フック | ウィジェット | 既定 |
|---|---|---|
_make_scroll() | GoCoachMark, GoSurface | GoScroll.new() |
_make_close_button() | GoPromptCard, GoSurface | GoIconButton.new() |
_make_surface() | GoSheet, GoDialogs | GoSurface.new() |
_should_pause() | GoCoachMark | モーダルが開いている間はカードを隠す |