Zpět na projekty
TUIX v0.1Alfa

Naposledy aktualizováno: 2026-05-20

Reference API LayoutEngine

Kompletní API reference pro třídu LayoutEngine, dostupnou přes engine.layout. LayoutEngine sdílí slovník objects s ComponentAPI a počítá pozice na úrovni pixelů z proporčních modifikátorů.

set_dimensions(*, id, width_modifier=None, height_modifier=None, margin_top=None, margin_left=None)

Nastaví jeden nebo více layout modifikátorů u existující komponenty. Všechny hodnoty musí být float v rozsahu 0.0–1.0 včetně.

ParametrTypPopis
idstrID cílové komponenty
width_modifierfloat | NonePodíl šířky terminálu (0.0–1.0)
height_modifierfloat | NonePodíl výšky terminálu (0.0–1.0)
margin_topfloat | NoneHorní okraj jako podíl výšky terminálu
margin_leftfloat | NoneLevý okraj jako podíl šířky terminálu

Vyhodí ValueError, pokud: (1) id komponenty neexistuje, (2) nebyly předány žádné parametry, (3) hodnota je mimo 0.0–1.0, nebo (4) je nastaven margin, když je odpovídající margin mode 'centered'.

engine.layout.set_dimensions(
    id='menu_1',
    width_modifier=0.6,
    height_modifier=0.4
)

# Set custom margins
engine.layout.set_dimensions(
    id='menu_1',
    margin_top=0.1,
    margin_left=0.2
)

margin_mode(*, id, param, mode)

Nastaví režim výpočtu okraje pro jednu nebo obě osy.

ParametrTypPopis
idstrID cílové komponenty
paramstr | list'margin_top', 'margin_left' nebo seznam obou
modestr'centered' (auto-center) nebo 'custom' (ruční okraje)
# Center both axes
engine.layout.margin_mode(
    id='menu_1',
    param=['margin_top', 'margin_left'],
    mode='centered'
)

# Custom top margin, centered horizontally
engine.layout.margin_mode(id='menu_1', param='margin_top', mode='custom')
engine.layout.margin_mode(id='menu_1', param='margin_left', mode='centered')
Omezení centered režimuKdyž je osa nastavená na 'centered', nelze tento margin ručně nastavit přes set_dimensions(). Pokus vyhodí ValueError. Pokud potřebujete ruční kontrolu, přepněte nejprve na 'custom'.

Detaily výpočtu layoutu

Layout počítá interní metoda _compute_all() (automaticky volaná z RenderEngine.draw()). Pro každou komponentu dopočítá:

  • x = int(width_modifier * terminal_cols)
  • y = int(height_modifier * terminal_rows)
  • margin_top: int(margin_modifier * rows) při custom, nebo (rows - y) // 2 při centered
  • margin_left: int(margin_modifier * cols) při custom, nebo (cols - x) // 2 při centered
  • corners.top_left a corners.bottom_right n-tice

Rozměry terminálu se načítají při každém volání přes shutil.get_terminal_size(), takže se layout automaticky přizpůsobí změnám velikosti terminálu mezi rendery.