Layout helpers, регистрация экранов и основной цикл.

Страница повторяет разделы PipKit API про layout helpers, экраны, цикл, input model, redraw и transitions.

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.