CLua Documentation
🎨 Colors & Schemes
CLua provides a comprehensive system for working with colors in the GUI. Color values are simple Lua tables, usable anywhere — in direct element styling or in named color schemes.
🏗️ Color constructors
Basic functions for creating a color value:
RGB(r, g, b) -- {red, green, blue}
GRAY(v) -- gray: RGB(v, v, v)
BLACK() -- RGB(0, 0, 0)
WHITE() -- RGB(255, 255, 255)
All functions return a table compatible with any function that accepts a color value.
🎨 Predefined colors — COLOR
The global COLOR table contains named color constants.
They can be used anywhere instead of RGB(...):
setColor(el, COLOR.PureCyan, COLOR.DarkBlue)
Colors are organized into groups:
| Group | Examples |
|---|---|
| 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 |
The Dark, Bright and Pure groups are consistently derived from the base terminal palette:
| Dark (~60 %) | Base (~50 %) | Bright (mixed) | Pure (255) |
|---|---|---|---|
DarkRed |
Red |
BrightRed |
PureRed |
DarkGreen |
Green |
BrightGreen |
PureGreen |
DarkBlue |
Blue |
BrightBlue |
PureBlue |
DarkCyan |
Cyan |
BrightCyan |
PureCyan |
Some entries are aliases (noted in source comments): Navy = Blue, Teal = Cyan, Lime = PureGreen, etc.
🖌️ Direct element color setters
Every element inherits from ElementClass methods for setting colors on specific states.
All accept fg (foreground/text color) and bg (background color).
Setting a direct color detaches the entire element from its scheme — the remaining states keep whatever colors they had from the scheme at that moment, but the element no longer reacts to any scheme changes.
| Method | Sets state(s) |
|---|---|
el:SetColor(fg, bg) |
All states at once |
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);
🗂️ Color schemes
A scheme is a named set of colors covering all element states at once. One scheme can be shared across many elements — define it once, apply repeatedly.
Constructor SchemeColors
Creates a color scheme table from positional arguments. Arguments must be passed in complete groups:
| Argument count | What is set |
|---|---|
| 2 — normalFg, normalBg | All states = normal |
| 4 — + focusFg, focusBg | Normal + Focus; Hot* derived |
| 10 — + hotNormalFg/Bg, hotFocusFg/Bg, disabledFg/Bg | + HotNormal, HotFocus, Disabled |
| 12 — + highlightFg, highlightBg | Full scheme |
SchemeColors(normalFg, normalBg
[, focusFg, focusBg
[, hotNormalFg, hotNormalBg, hotFocusFg, hotFocusBg,
disabledFg, disabledBg
[, highlightFg, highlightBg]]])
COLOR.* constants and RGB() calls can be freely mixed:
local myColors = SchemeColors(
COLOR.BrightWhite, COLOR.DarkBlue, -- normalFg, normalBg
COLOR.PureCyan, RGB(10, 10, 60) -- focusFg, focusBg
);
Function SetScheme
Creates or overwrites a named scheme:
SetScheme(name, schemeColors)
| Parameter | Type | Description |
|---|---|---|
name |
string | Scheme name |
schemeColors |
SchemeColors | Table created via 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);
Built-in scheme names: Base, Menu, Dialog, Label, Button, ProgressBar, Checkbox, TextField, logView.
Each is automatically the default for its corresponding element type — Button for buttons, Label for labels, etc. (Base is the default for windows, frames, and scrollbar areas.)
Overwriting a scheme via SetScheme applies immediately to all elements that still use it — including ones already created.
✅ Applying a scheme to an element
Via method
el:ApplyScheme(schemeName)
btn:ApplyScheme("Button");
frame:ApplyScheme("Base");
Via el parameter at creation
Every get* function accepts an optional schemeName field in its last el parameter.
When present, the scheme is applied automatically right after the element is created:
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"
});
✍️ Example: full color setup
-- Define a scheme
local dark = SchemeColors(
COLOR.BrightWhite, RGB(20, 20, 40), -- Normal
COLOR.PureCyan, RGB(10, 10, 60) -- Focus
);
SetScheme("DarkTheme", dark);
-- Apply at element creation
local win = getWindow("Tool", true, {});
local frame = getFrame(win, XYWH(0, 0, 60, 20), "Results", {
schemeName = "DarkTheme"
});
local btn = getButton(frame, XYWH(2, 16, 15, 1), "Run", runMacro, {
schemeName = "DarkTheme"
});
-- Direct color without a scheme
local lbl = getLabel(frame, XYWH(2, 1, 40, 1), "Status:", {});
lbl:SetColor(COLOR.Gold, RGB(20, 20, 40));