Dokumentace CLua
🎨 Barvy a schémata
CLua poskytuje komplexní systém pro práci s barvami v GUI. Barevné hodnoty jsou jednoduché Lua tabulky, použitelné kdekoliv — v přímém nastavení prvků nebo ve schématech.
🏗️ Barevné konstruktory
Základní funkce pro vytvoření barevné hodnoty:
RGB(r, g, b) -- {red, green, blue}
GRAY(v) -- šedá: RGB(v, v, v)
BLACK() -- RGB(0, 0, 0)
WHITE() -- RGB(255, 255, 255)
Všechny funkce vracejí tabulku kompatibilní s jakoukoliv funkcí, která přijímá barevnou hodnotu.
🎨 Předdefinované barvy — COLOR
Globální tabulka COLOR obsahuje pojmenované barevné konstanty.
Lze je použít kdekoliv místo RGB(...):
setColor(el, COLOR.PureCyan, COLOR.DarkBlue)
Barvy jsou rozděleny do skupin:
| Skupina | Příklady |
|---|---|
| Standard | Black Red Green Yellow Blue Magenta Cyan White |
| Bright | BrightBlack BrightRed BrightGreen BrightYellow … |
| Dark | DarkGray DarkRed DarkGreen DarkBlue DarkCyan |
| Pure | PureRed PureGreen PureBlue PureYellow PureMagenta PureCyan |
| Grays | Gray LightGray Silver Gainsboro |
| Reds & pinks | Crimson Tomato Coral Salmon Pink HotPink DeepPink |
| Oranges & browns | OrangeRed Orange Gold Chocolate SaddleBrown Brown Tan |
| Greens | ForestGreen Olive LimeGreen Lime SpringGreen |
| Blues | Navy RoyalBlue SteelBlue DodgerBlue SkyBlue LightBlue |
| Purples | Indigo DarkViolet Purple MediumPurple Violet Orchid Plum |
| Teals & cyans | Teal Turquoise Aquamarine |
Skupiny Dark, Bright a Pure jsou konzistentně odvozené od základní terminálové palety:
| Tmavá (~60 %) | Základní (~50 %) | Jasná (mix) | Čistá (255) |
|---|---|---|---|
DarkRed |
Red |
BrightRed |
PureRed |
DarkGreen |
Green |
BrightGreen |
PureGreen |
DarkBlue |
Blue |
BrightBlue |
PureBlue |
DarkCyan |
Cyan |
BrightCyan |
PureCyan |
Některé záznamy jsou aliasy (označeno komentářem v kódu): Navy = Blue, Teal = Cyan, Lime = PureGreen atd.
🖌️ Přímé nastavení barev prvku
Každý prvek dědí z ElementClass metody pro nastavení barev konkrétních stavů.
Všechny přijímají fg (barva textu) a bg (barva pozadí).
Nastavením přímé barvy se celý prvek vytrhne ze schématu — ostatní stavy si zachová tak, jak je měl ze schématu v tu chvíli, ale nadále na žádné změny schématu nereaguje.
| Metoda | Nastaví stav(y) |
|---|---|
el:SetColor(fg, bg) |
Všechny stavy najednou |
el:SetColorNormal(fg, bg) |
Normal |
el:SetColorFocus(fg, bg) |
Focus |
el:SetColorHot(fg, bg) |
HotNormal + HotFocus |
el:SetColorHotNormal(fg, bg) |
HotNormal |
el:SetColorHotFocus(fg, bg) |
HotFocus |
el:SetColorDisabled(fg, bg) |
Disabled |
el:SetColorHighlight(fg, bg) |
Highlight |
lbl:SetColor(COLOR.BrightWhite, COLOR.DarkBlue);
btn:SetColorFocus(COLOR.PureYellow, COLOR.DarkGreen);
btn:SetColorDisabled(COLOR.Gray, COLOR.DarkGray);
🗂️ Schémata
Schéma je pojmenovaná sada barev pro všechny stavy prvku najednou. Jedno schéma lze sdílet mezi více prvky — stačí ho jednou definovat a aplikovat opakovaně.
Konstruktor SchemeColors
Vytvoří barevnou tabulku schématu z pozičních argumentů. Argumenty musí být předány v kompletních skupinách:
| Počet argumentů | Co se nastaví |
|---|---|
| 2 — normalFg, normalBg | Všechny stavy = normal |
| 4 — + focusFg, focusBg | Normal + Focus; Hot* odvozeny |
| 10 — + hotNormalFg/Bg, hotFocusFg/Bg, disabledFg/Bg | + HotNormal, HotFocus, Disabled |
| 12 — + highlightFg, highlightBg | Plné schéma |
SchemeColors(normalFg, normalBg
[, focusFg, focusBg
[, hotNormalFg, hotNormalBg, hotFocusFg, hotFocusBg,
disabledFg, disabledBg
[, highlightFg, highlightBg]]])
COLOR.* konstanty a RGB() lze libovolně kombinovat:
local myColors = SchemeColors(
COLOR.BrightWhite, COLOR.DarkBlue, -- normalFg, normalBg
COLOR.PureCyan, RGB(10, 10, 60) -- focusFg, focusBg
);
Funkce SetScheme
Vytvoří nebo přepíše pojmenované schéma:
SetScheme(name, schemeColors)
| Parametr | Typ | Popis |
|---|---|---|
name |
string | Název schématu |
schemeColors |
SchemeColors | Tabulka z SchemeColors(...) |
local uiColors = SchemeColors(
COLOR.PureMagenta, COLOR.DarkRed, -- normalFg, normalBg
COLOR.Magenta, COLOR.Gray, -- focusFg, focusBg
COLOR.PureBlue, COLOR.DarkGreen, -- hotNormalFg, hotNormalBg
COLOR.PureCyan, COLOR.DarkBlue, -- hotFocusFg, hotFocusBg
COLOR.BrightBlack, COLOR.DarkCyan, -- disabledFg, disabledBg
COLOR.Green, COLOR.DarkRed -- highlightFg, highlightBg
);
SetScheme("Base", uiColors);
SetScheme("Button", uiColors);
Standardní schémata definovaná v kódu: Base, Menu, Dialog, Label, Button, ProgressBar, Checkbox, TextField, logView.
Každé z nich je automaticky výchozí pro příslušný typ prvku — Button pro tlačítka, Label pro popisky atd. (Base je výchozí pro okna, rámy a scrollbary.)
Přepsáním schématu přes SetScheme se změna projeví u všech prvků, které ho stále používají — včetně již vytvořených.
✅ Aplikace schématu na prvek
Metodou
el:ApplyScheme(schemeName)
btn:ApplyScheme("Button");
frame:ApplyScheme("Base");
Přes el parametr při vytvoření
Každá get* funkce přijímá v posledním parametru el volitelné pole schemeName.
Pokud je přítomno, schéma se aplikuje automaticky ihned po vytvoření prvku:
local btn = getButton(win, XYWH(2, 3, 20, 1), "OK", onOk, {
schemeName = "Button"
});
local frame = getFrame(win, XYWH(0, 0, 40, 10), "Panel", {
schemeName = "Base"
});
✍️ Příklad: kompletní nastavení barev
-- Definice schématu
local dark = SchemeColors(
COLOR.BrightWhite, RGB(20, 20, 40), -- Normal
COLOR.PureCyan, RGB(10, 10, 60) -- Focus
);
SetScheme("DarkTheme", dark);
-- Aplikace při vytvoření prvků
local win = getWindow("Nástroj", true, {});
local frame = getFrame(win, XYWH(0, 0, 60, 20), "Výsledky", {
schemeName = "DarkTheme"
});
local btn = getButton(frame, XYWH(2, 16, 15, 1), "Spustit", runMacro, {
schemeName = "DarkTheme"
});
-- Přímé barvy bez schématu
local lbl = getLabel(frame, XYWH(2, 1, 40, 1), "Stav:", {});
lbl:SetColor(COLOR.Gold, RGB(20, 20, 40));