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ě.
| Parametr | Typ | Popis |
|---|---|---|
| id | str | ID cílové komponenty |
| width_modifier | float | None | Podíl šířky terminálu (0.0–1.0) |
| height_modifier | float | None | Podíl výšky terminálu (0.0–1.0) |
| margin_top | float | None | Horní okraj jako podíl výšky terminálu |
| margin_left | float | None | Levý 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.
| Parametr | Typ | Popis |
|---|---|---|
| id | str | ID cílové komponenty |
| param | str | list | 'margin_top', 'margin_left' nebo seznam obou |
| mode | str | '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')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.