01 · Вікно #window

Головне вікно оголошується через /mainwindow. Всі GUI елементи — label і button — оголошуються всередині вікна. Запуск — через Main.return в ::start::.

Мінімальне вікно ✓ компілюється
Gui_Test.terra
app (/mainwindow) Main:
    /size = 400x300
    /background = (93, 138, 168)
    ! ... label і button тут ...
    end Main

::start::
Main.return
/size — розміри в пікселях. /background — RGB або HEX колір фону. Main.return запускає вікно і передає керування GPU.
Параметр Синтаксис Опис
/size /size = 400x300 Ширина × висота в пікселях
/background /background = (93, 138, 168) або #RRGGBB Колір фону вікна
02 · Label #label

Label відображає значення /var змінної в реальному часі. GPU автоматично оновлює текст при зміні змінної — CPU не бере участі в рендері.

Динамічний label ✓ компілюється
Gui_Test.terra
app (/intbyte, /var) intbyte = 42

app (/mainwindow) Main:
    /size = 400x300
    /background = (93, 138, 168)
    app (/label) onelabel = (intbyte)
    end Main
Label onelabel відображає поточне значення intbyte. Коли intbyte змінюється — GPU оновлює текст автоматично.
Підтримувані типи для label: /intbyte, /int2, /int4, /int8 та їх знакові варіанти. Значення відображається як ціле число.
03 · Button #button

Кнопка оголошується з текстом і прив'язкою до події через #event_name. При натисканні — виконується відповідний perform блок.

Кнопка з подією ✓ компілюється
приклад
app (/mainwindow) Main:
    app (/button) onebutton = "Натисни мене"#click
    end Main
Текст кнопки — у подвійних лапках. #click — ім'я події. Кнопка може існувати без події.
Кирилиця обов'язкова для тестування: Текст кнопок і label має містити кирилицю — це єдиний спосіб перевірити CP1251 font pipeline на GPU.
04 · Perform + подія #perform

Perform блок прив'язується до GUI події через :#event_name. Коли кнопка з цією подією натискається — виконуються всі операції всередині perform.

Perform з прив'язкою до кнопки ✓ компілюється
Gui_Test.terra
app (/intbyte, /var) intbyte = 42
app (/intbyte, /var) inta = 28

perform Click()(intbyte, inta)():#click
    intbyte + (inta)
    /display(intbyte)
    end Click

app (/mainwindow) Main:
    /size = 400x300
    /background = (93, 138, 168)
    app (/label) onelabel = (intbyte)
    app (/button) onebutton = "Натисни мене будь ласка"#click
    end Main

::start::
Main.return
При натисканні: intbyte збільшується на inta, label оновлюється, значення виводиться в консоль.
Зв'язок button ↔ perform: Одне ім'я події (#click) з'єднує кнопку і perform. Ім'я довільне — головне щоб збігалось в обох місцях.
05 · &mm_color #mm_color

Модифікатор &mm_color задає умовне забарвлення label залежно від значення змінної. Колір змінюється автоматично — без додаткового коду.

Label з умовним кольором ✓ компілюється
Gui_mmcolor_test.terra
app (/intbyte, /var) intbyte = 42

app (/mainwindow) Main:
    app (/label) presslabel = (intbyte)&mm_color((100+, #E32636), (5-, (93, 138, 168)))
    end Main
intbyte ≥ 100 → червоний  |  intbyte ≤ 5 → синій  |  6..99 → чорний (дефолт)
Синтаксис умови Значення
(100+, #E32636) якщо значення ≥ 100 → колір #E32636
(5-, (93,138,168)) якщо значення ≤ 5 → колір RGB
(без умови) дефолтний колір — чорний
Кількість умов: &mm_color приймає довільну кількість умов. Умови перевіряються зліва направо — перша що виконується визначає колір.
06 · Повний приклад #full-example

Програма з двома label, кнопкою і умовним кольором. Натискання кнопки збільшує intbyte — label оновлюється, колір змінюється автоматично.

Повна GUI програма ✓ компілюється
Gui_mmcolor_test.terra
app (/intbyte, /var) intbyte = 42

app (/mainwindow) Main:
    /size = 800x600
    /background = (20, 20, 30)
    app (/label) presslabel = (intbyte)&mm_color((100+, #E32636), (5-, (93, 138, 168)))
    app (/button) BtnUp   = "Більше"#up
    app (/button) BtnDown = "Менше"#down
    end Main

perform Up()(intbyte)():#up
    intbyte + (10)
    end Up

perform Down()(intbyte)():#down
    intbyte - (10)
    end Down

::start::
Main.return
"Більше" +10, "Менше" -10. При ≥100 → червоний, при ≤5 → синій. GPU рендерить автоматично.