6. Layout helpers
Это лёгкие helper-ы для раскладки UI без тяжёлой layout-системы.
Базовые типы:
UiSize size{120, 40};
UiRect rect{0, 0, 240, 320};
UiInsets insets{10, 10, 10, 10};
6.1. Slicing API
UiRect root{0, 0, 240, 320};
UiRect work = inset(root, 10);
UiRect header = takeTop(work, 24, 8);
UiRect footer = takeBottom(work, 28, 8);
UiRect content = work;
Доступно: inset(), takeTop(), takeBottom(), takeLeft(), takeRight(), placeInside(), centerIn().
6.2. Cursor-based API
UiFlowRow<3> row(area, 10, layout::SpaceEvenly, Center);
row.next(40, 24);
row.next(60, 24);
row.next(40, 24);
row.finish();
next(w, h)резервирует следующий слот- после всех
next(...)нужно вызватьfinish() - для позиционирования используются шорткаты:
center,Left,Center,Right,Top,Bottom.
11. Экраны и цикл
11.1. Регистрация экранов
Экраны регистрируются через макрос SCREEN(name, order):
SCREEN(ScreenHome, 0)
{
ui.clear(ui.rgb(0, 0, 0));
}
nameстановится константой id.orderзадаёт порядок регистрации.
11.2. Основной цикл
void loop()
{
ui.loopWithInput(Next, Prev, Select);
}
loopWithInput(...) обновляет объекты кнопок, обрабатывает встроенный ввод и вызывает ui.loop().
Если нужен готовый snapshot ввода для собственного state-machine:
InputState input = ui.pollInput(Next, Prev, Select);
Где библиотека использует кнопки:
Next/Prev— навигация по меню и виджетам.- Удержание
Next(2-button) илиSelect(3-button) — подтверждение. - Удержание
Prev— кнопка "Назад".
Если вы используете Next/Prev под свою логику на конкретном экране, вызовите ui.consumeAutoNav().
11.3. Управление экранами
ui.setScreen(ScreenHome); // переключает на указанный экран
ui.nextScreen(); // следующий по порядку
ui.prevScreen(); // предыдущий по порядку
ui.backScreen(); // назад по history
11.4. Принудительная перерисовка
ui.requestRedraw();
11.5. Анимация переходов
ui.setScreenAnim(SlideX, 250);
Доступные режимы: None, SlideX, SlideY.