GTK 3.96, GTK 4์˜ ์‹คํ—˜์  ๋ฆด๋ฆฌ์Šค ์ถœ์‹œ

10๊ฐœ์›” ํ›„ ๊ณผ๊ฑฐ์˜ ํ…Œ์ŠคํŠธ ๋ฆด๋ฆฌ์Šค ์ œ์‹œ๋œ GTK 3.96, ๊ณง ์ถœ์‹œ๋  GTK 4์˜ ์•ˆ์ •์ ์ธ ๋ฆด๋ฆฌ์Šค์˜ ์ƒˆ๋กœ์šด ์‹คํ—˜ ๋ฆด๋ฆฌ์Šค์ž…๋‹ˆ๋‹ค. GTK 4 ๋ธŒ๋žœ์น˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋‘๋ ค์›€ ์—†์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์•ˆ์ •์ ์ด๊ณ  ์ง€์›๋˜๋Š” API๋ฅผ ์ˆ˜๋…„ ๋™์•ˆ ์ œ๊ณตํ•˜๋ ค๋Š” ์ƒˆ๋กœ์šด ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค์˜ ์ผ๋ถ€๋กœ ๊ฐœ๋ฐœ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ GTK ๋ธŒ๋žœ์น˜์˜ API ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•ด 4๊ฐœ์›”๋งˆ๋‹ค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋‹ค์‹œ ์ž‘์„ฑํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. GTK XNUMX๊ฐ€ ์™„์ „ํžˆ ์•ˆ์ •ํ™”๋  ๋•Œ๊นŒ์ง€ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ œ๊ณต๋˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๊ณ„์†ํ•ด์„œ ๋ธŒ๋žœ์น˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. GTK 3.24.

์ฃผ์š” ๋ณ€๊ฒฝ GTK 3.96์—์„œ:

  • API์—์„œ GSK OpenGL ๋ฐ Vulkan์„ ํ†ตํ•ด ๊ทธ๋ž˜ํ”ฝ ์žฅ๋ฉด ๋ Œ๋”๋ง์„ ์ œ๊ณตํ•˜๋Š” (GTK Scene Kit) ์˜ค๋ฅ˜์— ๋Œ€ํ•œ ์ž‘์—…์ด ์ˆ˜ํ–‰๋˜์—ˆ์œผ๋ฉฐ, ์˜ค๋ฅ˜๋ฅผ ๋กœ๋“œํ•˜๊ณ  ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ๋Š” ์ƒˆ๋กœ์šด ๋””๋ฒ„๊น… ๋„๊ตฌ gtk4-node-editor ๋•๋ถ„์— ์‹๋ณ„์ด ๋” ์‰ฌ์›Œ์กŒ์Šต๋‹ˆ๋‹ค. ์ง๋ ฌํ™”๋œ ํ˜•์‹์˜ ๋ Œ๋”๋ง ๋…ธ๋“œ(๊ฒ€์‚ฌ ๋ชจ๋“œ GTK ๊ฒ€์‚ฌ๊ธฐ์—์„œ ์ €์žฅ ๊ฐ€๋Šฅ), ๋˜ํ•œ ๋‹ค๋ฅธ ๋ฐฑ์—”๋“œ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋ Œ๋”๋ง ๊ฒฐ๊ณผ๋ฅผ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค.

    GTK 3.96, GTK 4์˜ ์‹คํ—˜์  ๋ฆด๋ฆฌ์Šค ์ถœ์‹œ

  • 3D ๋ณ€ํ™˜ ๊ธฐ๋Šฅ์€ ํšŒ์ „ํ•˜๋Š” ํ๋ธŒ์™€ ๊ฐ™์€ ์• ๋‹ˆ๋ฉ”์ด์…˜ ํšจ๊ณผ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์ˆ˜์ค€์œผ๋กœ ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

    GTK 3.96, GTK 4์˜ ์‹คํ—˜์  ๋ฆด๋ฆฌ์Šค ์ถœ์‹œ

  • ์™„์ „ํžˆ ๋‹ค์‹œ ์“ด ์›น ๋ธŒ๋ผ์šฐ์ € ์ฐฝ์—์„œ 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

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€