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) — всё после текста необязательно, а alert() работает так же, но с одной кнопкой. Ставьте destructive для того, что нельзя отменить: кнопка подтверждения становится залитой кнопкой GoStyle.Tone.DANGER_SOLID. В светлой теме подкрашенная подпись опасного действия вынуждена темнеть, пока не станет читаться как чёрный текст; залитая кнопка оставляет белый текст на красном. Тон применяется заново при каждом вызове, потому что окно переиспользуется, а второй confirm() при открытом первом сразу возвращает false. confirm_key() принимает ключи перевода.

Раскладка кнопок. action_layout по умолчанию равен VERTICAL (безопасно для длинных переводов), HORIZONTAL даёт один ряд с половиной ширины на каждую, а AUTO ставит их в один ряд только тогда, когда обе подписи умещаются в половину карточки одной строкой, и складывает их столбиком в остальных случаях. action_gap — это расстояние между кнопками, а body_gap — расстояние над ними; сделайте его больше, чем зазор между кнопками, чтобы вопрос и выбор читались как две части. Для одного-единственного диалога вызовите set_next_action_layout() перед его открытием. Ряд собирается при первом открытии диалога, поэтому GoDialogs в автозагрузке ничего не добавляет к старту.

GoForm — форма с ограниченной шириной

Она гарантирует перенос строк у вложенных подписей. Без этого одно длинное предложение вытягивается в одну строку, минимальная ширина которой превосходит экран, и края обрезаются — становится не понять даже, на каком вы экране. Включать перенос вручную в каждой сцене забываешь каждый раз.

GoScroll — сенсорная прокрутка

Кладите внутрь одну вещь. Шапки и ряды кнопок место снаружи — длинный список не должен выталкивать их за экран. use_panel_edge() переносит полосу прокрутки во внутренние отступы карточки, а содержимое сохраняет свой отступ.