Zpět na projekty
TUIX v0.1Alfa

Naposledy aktualizováno: 2026-05-20

Systém stylů

Třída Styles spravuje vizuální témata vaší aplikace TUIX. Je dostupná přes engine.styles a podporuje preset styly, vlastní přepisy a cache stylů pro render pipeline.

Typy stylů

TUIX podporuje dva render typy: 'adaptive' a 'strict'. Aktivní typ nastavíte přes engine.styles.set_type(type).

engine.styles.set_type('strict')  # default

Preset styly

Vestavěný preset je 'classic'. Presety přepnete přes engine.styles.set_style(name). Classic preset používá bílé okraje a text na černém pozadí.

Hodnoty presetu Classic

VlastnostVýchozí hodnota
shadowFalse
background0
prompt_background(0, 0, 0)
border(255, 255, 255)
text_color(255, 255, 255)
text_backgroundFalse
unselected_backgroundFalse
unselected_text(255, 255, 255)
selected_background(255, 255, 255)
selected_text(0, 0, 0)
text.boldFalse
text.italicFalse
text.underlineFalse
text.dimFalse

Vlastní styly

Přepište libovolnou vlastnost stylu pomocí set_custom_style(). Vlastní hodnoty mají přednost před presetem. Cache stylů se po každé změně automaticky přepočítá.

Vlastnosti pouze pro RGB

Tyto vlastnosti přijímají pouze RGB trojice: background, prompt_background, border, text_color, unselected_text, selected_background, selected_text.

engine.styles.set_custom_style(key='border', value=(0, 200, 100))
engine.styles.set_custom_style(key='selected_background', value=(50, 50, 200))

Boolean/RGB vlastnosti

Tyto vlastnosti přijímají buď boolean, nebo RGB trojici: shadow, text_background, unselected_background. Nastavení shadow na True automaticky spočítá blend mezi background a prompt_background pomocí blend_shadow(). text_background a unselected_background nelze nastavit na True — pouze False nebo RGB trojici.

engine.styles.set_custom_style(key='shadow', value=True)
engine.styles.set_custom_style(key='unselected_background', value=(30, 30, 30))

Textové volby

Klíč 'text' má podvolby (bold, italic, underline, dim), které přijímají boolean hodnoty.

engine.styles.set_custom_style(key='text', option='bold', value=True)
engine.styles.set_custom_style(key='text', option='underline', value=True)

Odebrání vlastních stylů

Resetujte vlastní přepisy pomocí remove_custom_style(). Předávejte jeden klíč, seznam klíčů, nebo u klíče 'text' volbu/volby k resetu.

engine.styles.remove_custom_style('border')
engine.styles.remove_custom_style(['shadow', 'selected_background'])
engine.styles.remove_custom_style('text', option='bold')
engine.styles.remove_custom_style('text', option=['bold', 'italic'])

Definice vlastních presetů

Vytvořte vlastní preset styl pomocí define_style(). Konfigurační slovník musí obsahovat přesně stejné klíče jako classic preset. Po definici jej přepnete přes set_style().

engine.styles.define_style(name='dark', config={
    'shadow': True,
    'background': 0,
    'prompt_background': (20, 20, 30),
    'border': (100, 100, 200),
    'text_color': (200, 200, 255),
    'text_background': False,
    'unselected_background': False,
    'unselected_text': (150, 150, 200),
    'selected_background': (100, 100, 200),
    'selected_text': (255, 255, 255),
    'text': {'bold': False, 'italic': False, 'underline': False, 'dim': False}
})

engine.styles.set_style('dark')

Kaskáda stylů

Styly se řeší ve dvou vrstvách: (1) aktivní preset poskytuje základní hodnoty, (2) custom_styles přepíše všechny non-None hodnoty. Výsledek se cachuje v engine.styles.cached_styles a používá jej RenderEngine. Cache se automaticky přepočítá po každém volání set_custom_style(), remove_custom_style(), set_style() nebo define_style().

Příklad celého workflow

from tuix.core import TuixEngine

engine = TuixEngine()

# Use classic preset (default)
engine.styles.set_style('classic')
engine.styles.set_type('strict')

# Override specific colors
engine.styles.set_custom_style(key='border', value=(0, 200, 100))
engine.styles.set_custom_style(key='selected_background', value=(50, 50, 200))
engine.styles.set_custom_style(key='text', option='bold', value=True)

# Check resolved styles
print(engine.styles.cached_styles['border'])  # (0, 200, 100)

# Reset border to preset default
engine.styles.remove_custom_style('border')
print(engine.styles.cached_styles['border'])  # (255, 255, 255)