ΠΠΎΡΠ°Π³ΠΎΠ²ΠΎΠ΅ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΠΏΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° WUI
ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
Π Π°Π±ΠΎΡΡ Π½Π°ΡΠ°Π»ΠΈΡΡ Π² Π΄Π΅ΠΊΠ°Π±ΡΠ΅ 2021 Π³ΠΎΠ΄Π°. ΠΠ°Ρ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΏΡΠΎΠ΅ΠΊΡ (Π²ΠΈΠ΄Π΅ΠΎΠΌΠ΅ΡΡΠ΅Π½Π΄ΠΆΠ΅Ρ) ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» WTL Π΄Π»Ρ Windows ΠΈ GTKmm Π΄Π»Ρ Linux. ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ Mac Π½Π΅ Π±ΡΠ»ΠΎ. Π’Π°ΡΠΊΠ°ΡΡ Π·Π° ΡΠΎΠ±ΠΎΠΉ Π΄Π²Π΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½ΡΠ΅ ΠΊΠΎΠ΄ΠΎΠ²ΡΠ΅ Π±Π°Π·Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π΄Π΅Π»Π°ΡΡ Π²ΡΡ ΡΡΡΠΎΠ³ΠΎ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ, Π±ΡΠ»ΠΎ ΠΎΠ³ΡΠΎΠΌΠ½ΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ. ΠΠΎΠ½Π΅ΡΠ½ΠΎ, ΡΡΠΎ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π»ΠΎ ΠΊΠ°ΠΊ Π½Π°Π΄ΠΎ. ΠΡΡΠ»Ρ ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ Π΅ΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π½Π°ΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° Π΄Π»Ρ Mac Π²ΡΠ·ΡΠ²Π°Π»Π° Π½Π΅ΡΠ²Π½ΡΠΉ ΡΠΈΠΊ...
ΠΠ° ΡΠ°Π·ΡΠΌΠ½ΡΠΉ Π²ΠΎΠΏΡΠΎΡ β ΠΏΠΎΡΠ΅ΠΌΡ ΡΡΠ°Π·Ρ Π½Π΅ ΡΠ΄Π΅Π»Π°Π»ΠΈ Π½Π° Qt, ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΡΠ²Π΅ΡΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ°ΠΊ: ΡΡΠΎ ΡΠ²ΡΠ·Π°Π½ΠΎ, ΡΠΊΠ°ΠΆΠ΅ΠΌ ΡΠ°ΠΊ, Ρ Π³Π°ΡΡΡΠΎΠ½ΠΎΠΌΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ ΠΏΡΠ΅Π΄ΠΏΠΎΡΡΠ΅Π½ΠΈΡΠΌΠΈ ΠΈ, ΠΎΡΡΠ°ΡΡΠΈ, Ρ Π»ΡΠ±ΠΎΠ²ΡΡ ΠΊ ΠΌΠΎΠ½ΠΎΠ»ΠΈΡΠ½ΡΠΌ exe. ΠΠ° ΠΈ Π² Π½Π°ΡΠ°Π»Π΅ Π½Π°ΠΌ Π½Π΅ Π½ΡΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π½ΠΈΡΠ΅Π³ΠΎ, ΠΊΡΠΎΠΌΠ΅ Windows.
ΠΠ° ΡΠ΅ΡΡΡ Π»Π΅Ρ ΠΆΠΈΠ·Π½ΠΈ Ρ Π΄Π²ΡΠΌΡ ΠΊΠΎΠ΄ΠΎΠ²ΡΠΌΠΈ Π±Π°Π·Π°ΠΌΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΠΏΡΠΎΠ΄ΡΠΊΡΠ°, ΠΌΡ ΠΏΠΎΡΡΠ΅ΠΏΠ΅Π½Π½ΠΎ ΠΏΠΎΠ΄Π±ΠΈΡΠ°Π»ΠΈ Π»ΡΠ³ΠΊΠΈΠ΅ UI-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠ΅ Ρ ΠΎΡΡ Π±Ρ Π² ΡΡΠΈΠ»Π΅ C++17.
ΠΠΎΠ»ΠΆΠ½Ρ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ ΠΌΡ Π°ΠΊΡΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ boost ΠΈ Π»ΡΠ±ΠΈΠΌ Π΅Π³ΠΎ Π½Π°ΡΡΠΎΠ»ΡΠΊΠΎ, Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π»ΡΠ±ΠΈΡΡ Π²ΡΠ΅ΠΉ Π΄ΡΡΠΎΠΉ...
Π 2021 Π³ΠΎΠ΄Ρ, Π²ΠΈΠ΄ΠΈΠΌΠΎ, Google ΠΏΠ»ΠΎΡ ΠΎ ΡΠ°Π±ΠΎΡΠ°Π» ΠΈΠ»ΠΈ Π·Π²ΡΠ·Π΄Ρ Π½Π΅ ΡΠΎΡΠ»ΠΈΡΡ, Π½ΠΎ Π½ΠΈΡΠ΅Π³ΠΎ ΡΡΠΎΡΡΠ΅Π³ΠΎ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ Π½Π΅ Π±ΡΠ»ΠΎ. ΠΡΡ, ΡΡΠΎ ΡΠ΄Π°Π²Π°Π»ΠΎΡΡ Π½Π°ΠΉΡΠΈ β ΠΏΡΠΎΠ΅ΠΊΡΡ Π½Π° Π±Π°Π·Π΅ HTML-ΡΠ΅Π½Π΄Π΅ΡΠΈΠ½Π³Π° ΠΈ ΠΎΠ±ΡΡΡΠΊΠΈ Π½Π°Π΄ wxWidgets. Π’Π΅ΠΏΠ΅ΡΡ ΠΌΡ Π·Π½Π°Π΅ΠΌ ΠΎ lvgl, Π΄Π°... ΠΠΎ Π² ΡΠ΅Π»ΠΎΠΌ ΠΈΡ ΡΡΡΡΡΠΈ.
wxWidgets Π½Π΅ΠΏΠ»ΠΎΡ , Π½ΠΎ Π½Π°ΠΌ Ρ ΠΎΡΠ΅Π»ΠΎΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ, Π±Π΅Π· ΡΠ°ΠΌΠΎΠΊ Π΄Π»Ρ ΠΊΠ½ΠΎΠΏΠΎΠΊ, ΠΏΠΎΠ»Π΅ΠΉ Π²Π²ΠΎΠ΄Π° ΠΈ ΡΠΏΠΈΡΠΊΠΎΠ², Π»ΠΈΡΠ΅Π½Π·ΠΈΠΈ ΡΠΈΠΏΠ° boost/BSD, ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ Π»Π°ΠΊΠΎΠ½ΠΈΡΠ½ΡΠΉ, ΠΈ Π² ΠΈΠ΄Π΅Π°Π»Π΅ ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΠΉ ΠΎΡ Windows XP / CentOS 6 Π½Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΌ GDI / X11 Π΄ΠΎ Vulkan Π½Π° ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΌΠ°ΡΠΈΠ½Π°Ρ .
Π ΠΈΡΠΎΠ³Π΅ Π±ΡΠ»ΠΎ ΡΠ΅ΡΠ΅Π½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ UI-ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΈ ΡΡΠ°Π·Ρ Π²ΡΠΏΡΡΡΠΈΡΡ Π΅Π³ΠΎ Π² Open Source ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½Π·ΠΈΠ΅ΠΉ Boost.
ΠΠ°Π΄Π°ΡΠΈ Π΄Π»Ρ UI ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ°
- Π Π°Π±ΠΎΡΠ°ΡΡ Π½Π° Windows (ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ 7, Π½ΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΈ Π½Π° XP)
- Π Π°Π±ΠΎΡΠ°ΡΡ Π½Π° Linux (Π½Π°ΡΠΈΠ½Π°Ρ Ρ Ubuntu 16 / CentOS 6)
- Π Π°Π±ΠΎΡΠ°ΡΡ Π½Π° macOS
- ΠΡΠΊΡΡΠ²Π°ΡΡ ΠΎΠΊΠ½Π° ΠΈ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡ Π½Π° Π½ΠΈΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ
- ΠΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ ΠΎΠ±ΡΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΊ ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠ΅ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΡΠΊΡΡΠ²Π°ΡΡΠΈΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠΎΠ·Π°Π²ΠΈΡΠΈΠΌΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ
- ΠΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ ΠΎΠ±ΡΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΊ ΡΠΎΠ±ΡΡΠΈΡΠΌ
- ΠΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ, ΡΠ΅Π°Π³ΠΈΡΠΎΠ²Π°ΡΡ Π½Π° ΠΌΡΡΡ, ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ ΠΈ ΠΏΡΠΎΡΠΈΠ΅ ΡΠΎΠ±ΡΡΠΈΡ
- ΠΠΌΠ΅ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΌΠ΅Π½ΡΡΡ ΡΠ²Π΅ΡΠΎΠ²ΡΡ Π³Π°ΠΌΠΌΡ / ΡΡΠΈΠ»Ρ / ΠΈΠΊΠΎΠ½ΠΊΠΈ / ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π²ΡΠ΅Ρ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΎΠ²/ΠΎΠΊΠΎΠ½ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΡΠ°
- ΠΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ ΡΠΈΡΡΠ΅ΠΌΡ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½Ρ Π΄Π»Ρ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² ΠΈ Π½Π°Π΄ΠΏΠΈΡΠ΅ΠΉ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ°
- ΠΠΌΠ΅ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΎΡΠΊΡΠ΅ΠΏΠ»ΡΡΡ / ΠΏΡΠΈΠΊΡΠ΅ΠΏΠ»ΡΡΡ ΠΎΠΊΠ½Π° Π΄ΡΡΠ³ ΠΎΡ Π΄ΡΡΠ³Π°
- ΠΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ UI ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΎΠ²
- ΠΠΌΠ΅ΡΡ ΡΠ΄ΠΎΠ±Π½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΊΠΎΠ½ΡΠΈΠ³Π°ΠΌΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ
ΠΠ±ΡΠ°Ρ ΡΡ Π΅ΠΌΠ° ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ°

ΠΡΡ Π±Π°Π·ΠΈΡΡΠ΅ΡΡΡ Π½Π° Π΄Π²ΡΡ ΡΡΡΠ½ΠΎΡΡΡΡ β Window ΠΈ Control. ΠΠΊΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ, ΡΠ°ΠΊΠΆΠ΅ ΡΠ°ΠΌΠΎ ΠΎΠΊΠ½ΠΎ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΎΠΌ.
Control β ΡΡΠΎ Π»ΡΠ±ΠΎΠΉ Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π΄Π»Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ: ΠΊΠ½ΠΎΠΏΠΊΠ°, ΠΏΠΎΠ»Π΅ Π²Π²ΠΎΠ΄Π°, ΡΠΏΠΈΡΠΎΠΊ, ΠΌΠ΅Π½Ρ ΠΈ Ρ.Π΄. Control Π·Π½Π°Π΅Ρ, ΠΊΠ°ΠΊ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΡΠΎΠ±ΡΡΠΈΡ, ΠΏΠΎΡΡΡΠΏΠ°ΡΡΠΈΠ΅ ΠΎΡ Window, Ρ ΡΠ°Π½ΠΈΡ ΡΠ²ΠΎΠΈ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΈ ΡΠΈΡΡΠ΅Ρ ΡΠ΅Π±Ρ Π½Π° Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΌ Π΅Π³ΠΎ ΠΎΠΊΠ½ΠΎΠΌ.
Window β ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ ΡΠΎΠ±ΡΡΠΈΡ ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ ΠΈΡ ΡΠ°ΡΡΡΠ»ΠΊΡ ΠΏΠΎΠ΄ΠΏΠΈΡΡΠΈΠΊΠ°ΠΌ. Π’Π°ΠΊ ΠΆΠ΅ ΠΎΠΊΠ½ΠΎ Π΄Π°ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π½Π° ΠΏΠ΅ΡΠ΅ΡΠΈΡΠΎΠ²ΠΊΡ ΡΠ²ΠΎΠΈΡ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΎΠ² ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΈΠΌ ΡΠ²ΠΎΠΉ graphic. ΠΡΠΎΠΌΠ΅ ΡΡΠΎΠ³ΠΎ, ΠΎΠΊΠ½ΠΎ ΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠΊΡΡΠΎΠΌ Π²Π²ΠΎΠ΄Π°, ΠΌΠΎΠΆΠ΅Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΠΌΠΎΠ΄Π°Π»ΡΠ½ΠΎΡΡΡ ΠΈ ΠΎΡΠΏΡΠ°Π²ΠΈΡΡ ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Π½Π½ΠΎΠΌΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΈΠ»ΠΈ Π² ΡΠΈΡΡΠ΅ΠΌΡ ΡΠΎΠ±ΡΡΠΈΠ΅.
Graphic β ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΊ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΌ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ. Π Π½Π°ΡΡΠΎΡΡΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Windows GDI/GDI+ ΠΈ Linux xcb/cairo.
Π Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ ΡΠ°ΠΊΠΆΠ΅ Π΅ΡΡΡ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΡΠ΅Π΄ΡΡΠ²Π°: common (rect, color, font), event (ΠΌΡΡΡ, ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠ°, Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠ΅ ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ ΡΠΎΠ±ΡΡΠΈΡ), theme (ΡΠΈΡΡΠ΅ΠΌΠ° ΠΊΠΎΠ½ΡΡΠ°Π½Ρ Π΄Π»Ρ Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΡΡ ΡΠ΅ΠΌ), locale (ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠ° Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ°), config (Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°ΠΌΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ).
ΠΡΠ½ΠΎΠ²ΠΎΠΏΠΎΠ»Π°Π³Π°ΡΡΠΈΠ΅ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ
ΠΠΊΠ½ΠΎ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ ΡΠΎΠ±ΡΡΠΈΡ: Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ, Π²Π²ΠΎΠ΄ Ρ ΠΌΡΡΠΈ ΠΈ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΡΡΡΠΎΠΉΡΡΠ², ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ. ΠΡΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ ΠΏΠΎΠ΄ΠΏΠΈΡΡΠΈΠΊΠ°ΠΌ ΡΠΎΠ±ΡΡΠΈΠΉ ΠΎΠΊΠ½Π° β ΠΊΠΎΠ½ΡΡΠΎΠ»Π°ΠΌ ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠΌΡ ΠΊΠΎΠ΄Ρ.
ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠΎΠ±ΡΡΠΈΠΉ ΠΎΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΡΠΎΠ»Π° ΠΊΠΎΠ»Π»Π±ΡΠΊΠ°ΠΌΠΈ. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ ΡΠΏΡΠΎΡΡΠΈΡΡ ΡΠΈΡΡΠ΅ΠΌΡ ΡΠΎΠ±ΡΡΠΈΠΉ Π±Π΅Π· ΠΏΠΎΡΠ΅ΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠΈ.
ΠΡΠΈ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΡΠ°ΡΡΠΈ ΠΎΠΊΠ½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ ΠΏΠΎΠΈΡΠΊ ΠΏΠΎΠΏΠ°Π΄Π°ΡΡΠΈΡ
Π² ΠΎΠ±Π»Π°ΡΡΡ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΎΠ² ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ draw() ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΡΠΎΠ»Π°. ΠΠΎΠ½ΡΡΠΎΠ»Ρ Ρ topmost() == true ΡΠΈΡΡΡΡΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌΠΈ.
ΠΠ»Π°Π²Π½ΡΠΉ ΡΠΈΠΊΠ» ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
Windows
MSG msg;
while (GetMessage(&msg, nullptr, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
Linux
void window::process_events()
{
xcb_generic_event_t *e = nullptr;
while (started && (e = xcb_wait_for_event(context_.connection)))
{
switch (e->response_type & ~0x80)
{
case XCB_EXPOSE:
// ...
}
}
}
ΠΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΠΈΠΊΠ» ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
int main()
{
wui::framework::init();
MainFrame mainFrame;
mainFrame.Run();
wui::framework::run();
return 0;
}
ΠΠ°ΠΊΡΡΡΠΈΠ΅ ΠΎΠΊΠ½Π°:
void MainFrame::Run()
{
window->init(wui::locale("main_frame", "caption"),
{ -1, -1, width, height },
wui::window_style::frame, [this]() {
wui::framework::stop();
});
}
Π’ΡΠ°Π½Π·ΠΈΠ΅Π½ΡΠ½ΠΎΡΡΡ (ΠΌΠΎΠ΄Π°Π»ΡΠ½ΠΎΡΡΡ)
ΠΠ»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΌΠΎΠ΄Π°Π»ΡΠ½ΡΡ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ² ΠΎΠΊΠ½ΠΎ ΠΈΠΌΠ΅Π΅Ρ ΠΌΠ΅ΡΠΎΠ΄:
void set_transient_for(std::shared_ptr<window> window_, bool docked = true);
Π€Π»Π°Π³ docked ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΡΡΠΎ ΠΌΠΎΠ΄Π°Π»ΡΠ½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡΡΡ Π² Π±Π°Π·ΠΎΠ²ΠΎΠΌ Π±Π΅Π· ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°.
Π Π΅ΡΡΡΡΡ (ΡΠ΅ΠΌΡ ΠΈ Π»ΠΎΠΊΠ°Π»ΠΈ)
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²ΡΠ΅Π³Π΄Π° ΠΈΠΌΠ΅Π΅Ρ ΡΠ΅ΠΊΡΡΡΡ ΡΠ΅ΠΌΡ ΠΈ Π»ΠΎΠΊΠ°Π»Ρ. ΠΡΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ ΠΏΠ°ΡΡ ΡΠ΅ΠΊΡΠΈΡ + ΠΊΠ»ΡΡ.
ΠΡΠΈΠΌΠ΅Ρ ΡΠ΅ΠΌΡ (dark.json)
{
"controls": [
{
"type": "window",
"background": "#131519",
"border": "#404040",
"border_width": 1,
"text": "#f5f5f0",
"caption_font": {
"name": "Segoe UI",
"size": 18
}
},
{
"type": "image",
"resource": "IMAGES_DARK",
"path": "~/.hello_wui/res/images/dark"
}
]
}
ΠΡΠΈΠΌΠ΅Ρ ΡΠ΅ΠΌΡ (light.json)
{
"controls": [
{
"type": "window",
"background": "#fffffe",
"border": "#9a9a9a",
"text": "#191914"
},
{
"type": "image",
"resource": "IMAGES_LIGHT",
"path": "~/.hello_wui/res/images/light"
}
]
}
ΠΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΡ
WUI Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΌΡΡΠ΅ΠΊΡΡ. ΠΡΠ΅ ΠΊΠΎΠ»Π»Π±ΡΠΊΠΈ ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ ΡΠΎΠ±ΡΡΠΈΡ ΠΏΡΠΈΡ ΠΎΠ΄ΡΡ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° (wnd_proc Π½Π° Windows ΠΈΠ»ΠΈ ΠΏΠΎΡΠΎΠΊ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ xcb_wait_for_event() Π½Π° Linux).
Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π²ΡΠ΅ UI-ΠΌΠ°Π½ΠΈΠΏΡΠ»ΡΡΠΈΠΈ Π»ΠΈΠ±ΠΎ Π² ΠΊΠΎΠ»Π»Π±ΡΠΊΠ°Ρ , Π»ΠΈΠ±ΠΎ Π² ΠΎΠ΄Π½ΠΎΠΌ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠΌ UI-ΠΏΠΎΡΠΎΠΊΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
Unicode
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ UTF-8 Π² ΠΎΠ±ΡΡΠ½ΠΎΠΌ std::string / char*.
ΠΠ»Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ WinAPI, ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π½ΡΠΆΠ΅Π½ utf16 Π² wchar_t, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ boost::nowide::widen() / boost::nowide::narrow().
ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΎ ΡΠΎΠΌ, ΠΏΠΎΡΠ΅ΠΌΡ wchar Π½Π΅ Π½ΡΠΆΠ΅Π½: https://utf8everywhere.org/
ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΎΡΠΈΠ±ΠΎΠΊ
WUI Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ. ΠΠ΅ΡΠΎΠ΄Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π·Π°Π²Π΅ΡΡΠΈΡΡΡΡ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ bool. ΠΠ»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π΄Π΅ΡΠ°Π»Π΅ΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ get_error():
struct error
{
error_type type;
std::string component, message;
bool is_ok() const;
};
ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΠΎΡΠΈΠ±ΠΊΠΈ ΠΏΠΎΡΠ»Π΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ°:
auto img = std::make_shared<wui::image>(IMG_LOGO);
if (!img->get_error().is_ok()) {
log("error", img->get_error().str());
}
Hello World ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΎΡΠ½ΠΎΠ²Ρ Π΄Π»Ρ Π»ΡΠ±ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅ΡΡΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΡΠ°Π·Ρ ΡΠ΄Π΅Π»Π°Π½ΠΎ Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ Π΄ΠΎ Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ°.
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π² examples/hello_world ΠΈ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π²ΡΠ΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΠ΅ ΡΠ°ΠΉΠ»Ρ ΡΠ΅ΡΡΡΡΠΎΠ².
ΠΠ΅ΠΌΠΎ-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π»ΠΎΠ³ΠΎΡΠΈΠΏ, ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅Ρ ΠΏΠΎΠ΄ΠΏΠΈΡΡ ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΏΠΎΠ»Π΅ Π²Π²ΠΎΠ΄Π°. ΠΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ Π΄ΠΈΠ°Π»ΠΎΠ³ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π·Π°ΠΊΡΡΠ²Π°Π΅ΡΡΡ.

ΠΠ° ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΡΠΊΡΠΈΠ½ΡΠΎΡΠ΅ ΡΠ΅ΠΌΠ° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π° Π½Π° ΡΠ²Π΅ΡΠ»ΡΡ, ΡΠ·ΡΠΊ Π½Π° ΡΡΡΡΠΊΠΈΠΉ ΠΈ Π½Π°ΠΆΠ°ΡΠ° ΠΊΠ½ΠΎΠΏΠΊΠ° "Nice to meet you"

ΠΠΎΠ½ΡΡΠΎΠ»Ρ
ΠΠ° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ 14 ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΎΠ²:
button
ΠΠ½ΠΎΠΏΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΡ Π²ΠΈΠ΄ΠΎΠ²: - text - image - image_right_text - image_bottom_text - switcher - radio - anchor - sheet

image
ΠΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ Π΅Π΄ΠΈΠ½ΠΎΠΎΠ±ΡΠ°Π·Π½ΠΎΠ³ΠΎ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈΠΊΠΎΠ½ΠΎΠΊ Ρ ΡΡΡΡΠΎΠΌ Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΠΎΠΉ ΡΠ΅ΠΌΡ.
auto logoImage = std::make_shared<wui::image>(IMG_LOGO);
input

Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ΅ ΠΏΠΎΠ»Π΅ Π²Π²ΠΎΠ΄Π° Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠ΅ΠΆΠΈΠΌΠΎΠ².
list
ΠΠ΅ΡΡΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Ρ ΠΏΡΠΎΠΊΡΡΡΠΊΠΎΠΉ.

menu
ΠΠΎΠ½ΡΠ΅ΠΊΡΡΠ½ΠΎΠ΅ ΠΌΠ΅Π½Ρ Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΡ ΠΏΡΠ½ΠΊΡΠΎΠ².

Π Π΄ΡΡΠ³ΠΈΠ΅ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ: panel, progress, select, slider, splitter, tooltip, tray, message, text, scroll.