10๊ฐ์ ํ
์ฃผ์
- API์์
GSK OpenGL ๋ฐ Vulkan์ ํตํด ๊ทธ๋ํฝ ์ฅ๋ฉด ๋ ๋๋ง์ ์ ๊ณตํ๋ (GTK Scene Kit) ์ค๋ฅ์ ๋ํ ์์ ์ด ์ํ๋์์ผ๋ฉฐ, ์ค๋ฅ๋ฅผ ๋ก๋ํ๊ณ ํ์ํ ์ ์๋ ์๋ก์ด ๋๋ฒ๊น ๋๊ตฌ gtk4-node-editor ๋๋ถ์ ์๋ณ์ด ๋ ์ฌ์์ก์ต๋๋ค. ์ง๋ ฌํ๋ ํ์์ ๋ ๋๋ง ๋ ธ๋(๊ฒ์ฌ ๋ชจ๋ GTK ๊ฒ์ฌ๊ธฐ์์ ์ ์ฅ ๊ฐ๋ฅ), ๋ํ ๋ค๋ฅธ ๋ฐฑ์๋๋ฅผ ์ฌ์ฉํ ๋ ๋ ๋๋ง ๊ฒฐ๊ณผ๋ฅผ ๋น๊ตํฉ๋๋ค. - 3D ๋ณํ ๊ธฐ๋ฅ์ ํ์ ํ๋ ํ๋ธ์ ๊ฐ์ ์ ๋๋ฉ์ด์
ํจ๊ณผ๋ฅผ ๋ง๋ค ์ ์๋ ์์ค์ผ๋ก ํฅ์๋์์ต๋๋ค.
- ์์ ํ
๋ค์ ์ด ์น ๋ธ๋ผ์ฐ์ ์ฐฝ์์ GTK ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ถ๋ ฅ์ ๋ ๋๋งํ๋๋ก ์ค๊ณ๋ Broadway GDK ๋ฐฑ์๋. ์ด์ ๋ธ๋ก๋์จ์ด ๊ตฌํ์ GTK 4์์ ์ ์๋ ๋ ๋๋ง ๋ฐฉ๋ฒ์ ๋ง์ง ์์์ต๋๋ค(๋ฒํผ๋ก ์ถ๋ ฅํ๋ ๋์ ์ด์ ์ถ๋ ฅ์ด ์์ ์์ค ์์ ํธ๋ฆฌ ํ์์ผ๋ก ๊ตฌ์ฑ๋๋ ๋ ๋ ๋ ธ๋ ๊ธฐ๋ฐ ๋ชจ๋ธ์ ์ฌ์ฉํฉ๋๋ค. OpenGL ๋ฐ Vulkan์ ์ฌ์ฉํ์ฌ GPU์์ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค.
์๋ก์ด Broadway ์ต์ ์ ๋ธ๋ผ์ฐ์ ์์ ์ธํฐํ์ด์ค๋ฅผ ๋ ๋๋งํ๊ธฐ ์ํด CSS ์คํ์ผ์ ์ฌ์ฉํ์ฌ ๋ ๋ ๋ ธ๋๋ฅผ DOM ๋ ธ๋๋ก ๋ณํํฉ๋๋ค. ๊ฐ๊ฐ์ ์๋ก์ด ํ๋ฉด ์ํ๋ ์ด์ ์ํ์ ๊ด๋ จ๋ DOM ํธ๋ฆฌ์ ๋ณ๊ฒฝ์ผ๋ก ์ฒ๋ฆฌ๋์ด ์๊ฒฉ ํด๋ผ์ด์ธํธ๋ก ์ ์ก๋๋ ๋ฐ์ดํฐ์ ํฌ๊ธฐ๋ฅผ ์ค์ ๋๋ค. 3D ๋ณํ ๋ฐ ๊ทธ๋ํฝ ํจ๊ณผ๋ CSS ๋ณํ ์์ฑ์ ํตํด ๊ตฌํ๋ฉ๋๋ค. - GDK๋ Wayland ํ๋กํ ์ฝ์ ์ผ๋์ ๋๊ณ ์ค๊ณ๋ API๋ฅผ ๊ณ์ ๊ตฌํํ๊ณ X11 ๊ธฐ๋ฐ API๋ฅผ ์ ๋ฆฌํ๊ฑฐ๋ ๋ณ๋์ X11 ๋ฐฑ์๋๋ก ์ด๋ํฉ๋๋ค. ํ์ ํ๋ฉด๊ณผ ์ ์ญ ์ขํ๋ฅผ ์ฌ์ฉํ์ง ์๋ ์์ ์ด ์งํ ์ค์ ๋๋ค. GDK_SURFACE_SUBSURFACE์ ๋ํ ์ง์์ด GDK์์ ์ ๊ฑฐ๋์์ต๋๋ค.
- ์ ์๋ ๋ณ๋์ GdkDrag ๋ฐ GdkDrop ๊ฐ์ฒด๋ฅผ ํฌํจํ์ฌ ๋๋๊ทธ ์ค ๋๋กญ ์์ ์ํ๊ณผ ๊ด๋ จ๋ ์ฝ๋ ๋ฆฌํฉํ ๋ง์ด ๊ณ์๋์์ต๋๋ค.
- ์ด๋ฒคํธ ์ฒ๋ฆฌ๊ฐ ๋จ์ํ๋์์ผ๋ฉฐ ์ด์ ์ ๋ ฅ์๋ง ์ฌ์ฉ๋ฉ๋๋ค. ๋๋จธ์ง ์ด๋ฒคํธ๋ ๋ณ๋์ ์ ํธ๋ก ๋์ฒด๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด ์ถ๋ ฅ ์ด๋ฒคํธ ๋์ ๊ตฌ์ฑ ์ด๋ฒคํธ("GdkSurface::size-changed") ๋์ ๋งคํ ์ด๋ฒคํธ("GdkSurface:") ๋์ "GdkSurface::render" ์ ํธ๊ฐ ์ ์๋ฉ๋๋ค. :mappedโ, gdk_event_handler_set() ๋์ - "GdkSurface::event";
- Wayland์ฉ GDK ๋ฐฑ์๋์๋ GtkSettings ์ค์ ์ ์ก์ธ์คํ๊ธฐ ์ํ ํฌํธ ์ธํฐํ์ด์ค์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค. ์ ๋ ฅ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๊ธฐ ์ํด text-input-unstable-v3 ํ๋กํ ์ฝ ํ์ฅ์ ๋ํ ์ง์์ด ์ ์๋์์ต๋๋ค.
- ์์ ฏ ๊ฐ๋ฐ์ ์ํด ๊ฐ์ ์์ญ์ ๋ ์ด์์์ ๋ฐ๋ผ ์์์ ๋ ์ด์์์ ์ ์ดํ๋ โโ์์คํ ๊ตฌํ๊ณผ ํจ๊ป ์๋ก์ด GtkLayoutManager ๊ฐ์ฒด๊ฐ ๋์ ๋์์ต๋๋ค. GtkLayoutManager๋ GtkBox ๋ฐ GtkGrid์ ๊ฐ์ GTK ์ปจํ ์ด๋์ ํ์ ์์ฑ์ ๋์ฒดํฉ๋๋ค. ์ฌ๋ฌ ๊ฐ์ง ๋ฏธ๋ฆฌ ๋ง๋ค์ด์ง ๋ ์ด์์ ๊ด๋ฆฌ์๊ฐ ์ ์๋ฉ๋๋ค: ํ๋์ ํ์ ์์๋ฅผ ๊ฐ์ง ๊ฐ๋จํ ์ปจํ ์ด๋๋ฅผ ์ํ GtkBinLayout, ์ ํ์ผ๋ก ์ ๋ ฌ๋ ํ์ ์์๋ฅผ ์ํ GtkBoxLayout, ํ์ ์์๋ฅผ ๊ทธ๋ฆฌ๋์ ์ ๋ ฌํ๊ธฐ ์ํ GtkGridLayout, ํ์ ์์์ ์์ ์์น ์ง์ ์ ์ํ GtkFixedLayout, size_allocate๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ธฐ์กด ์์๋ฅผ ๋ณํํ๋ GtkCustomLayout ํธ๋ค๋ฌ;
- ํ์ ์์์ ํ์ด์ง ํ์๋ฅผ ์ํด ๊ณต๊ฐ์ ์ผ๋ก ์ ๊ทผ ๊ฐ๋ฅํ ๊ฐ์ฒด๊ฐ GtkAssistant, GtkStack ๋ฐ GtkNotebook ์์ ฏ์ ์ถ๊ฐ๋์์ผ๋ฉฐ, ์ด๋ค ์์ ฏ์ ๋ ์ด์์๊ณผ ๊ด๋ จ๋์ง ์์ ํ์ ์์ฑ์ด ์ ์ก๋์์ต๋๋ค. ๊ธฐ์กด์ ๋ชจ๋ ํ์ ์์ฑ์ด ์ผ๋ฐ ์์ฑ, ๋ ์ด์์ ์์ฑ์ผ๋ก ๋ณํ๋๊ฑฐ๋ ํ์ด์ง ๊ฐ์ฒด๋ก ์ด๋๋์์ผ๋ฏ๋ก ํ์ ์์ฑ์ ๋ํ ์ง์์ด GtkContainer์์ ์์ ํ ์ ๊ฑฐ๋์์ต๋๋ค.
- ํต์ฌ GtkEntry ๊ธฐ๋ฅ์ ํฅ์๋ GtkEditable ํธ์ง ์ธํฐํ์ด์ค๋ ํฌํจํ๋ ์๋ก์ด GtkText ์์ ฏ์ผ๋ก ์ด๋๋์์ต๋๋ค. ๊ธฐ์กด์ ๋ชจ๋ ๋ฐ์ดํฐ ์ ๋ ฅ ํ์ ํด๋์ค๋ ์๋ก์ด GtkText ์์ ฏ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ GtkEditable ๊ตฌํ์ผ๋ก ๋ค์ ๋ง๋ค์ด์ก์ต๋๋ค.
- ๋น๋ฐ๋ฒํธ ์ ๋ ฅ ์์์ ์ํ ์๋ก์ด GtkPasswordEntry ์์ ฏ์ ์ถ๊ฐํ์ต๋๋ค.
- GtkWidgets์๋ CSS ๋๋ gtk_widget_allocate ์ธ์๋ฅผ ํตํด ์ง์ ๋ ์ ํ ๋ณํ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ฌ ํ์ ์์๋ฅผ GskTransform์ ๋ณํํ๋ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์์ต๋๋ค. ์ง์ ๋ ๊ธฐ๋ฅ์ ์ด๋ฏธ GtkFixed ์์ ฏ์ ์ ์ฉ๋์ด ์์ต๋๋ค.
- ์๋ก์ด ๋ชฉ๋ก ์์ฑ ๋ชจ๋ธ์ด ์ถ๊ฐ๋์์ต๋๋ค: GtkMapListModel, GtkSliceListModel, GtkSortListModel, GtkSelectionModel ๋ฐ GtkSingleSelection. ์์ผ๋ก ์ฐ๋ฆฌ๋ GtkListView์ ๋ชฉ๋ก ๋ชจ๋ธ์ ๋ํ ์ง์์ ์ถ๊ฐํ ๊ณํ์ ๋๋ค.
- GtkBuilder๋ ์๋ณ์๋ณ ๋งํฌ๋ฅผ ์ฌ์ฉํ๋ ๋์ ๊ฐ์ฒด ์์ฑ์ ๋ก์ปฌ(์ธ๋ผ์ธ)๋ก ์ค์ ํ๋ ๊ธฐ๋ฅ์ ์ถ๊ฐํ์ต๋๋ค.
- UI ํ์ผ์ GTK 4์์ GTK 3๋ก ๋ณํํ๊ธฐ ์ํด gtk4-builder-tool์ ๋ช ๋ น์ ์ถ๊ฐํ์ต๋๋ค.
- ์ฃผ์ ํ
๋ง, ํ ํ์ ๋ฉ๋ด ๋ฐ ์ฝค๋ณด ์์์ ๋ํ ์ง์์ด ์ค๋จ๋์์ต๋๋ค. GtkInvisible ์์ ฏ์ด ์ ๊ฑฐ๋์์ต๋๋ค.
์ถ์ฒ : opennet.ru