GTK 4.8 ๊ทธ๋ž˜ํ”ฝ ํˆดํ‚ท ์‚ฌ์šฉ ๊ฐ€๋Šฅ

4.8.0๊ฐœ์›” ๊ฐ„์˜ ๊ฐœ๋ฐœ ๋์— ๊ทธ๋ž˜ํ”ฝ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ์ƒ์„ฑ์„ ์œ„ํ•œ ๋‹ค์ค‘ ํ”Œ๋žซํผ ํˆดํ‚ท์ธ GTK 4์ด ์ถœ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. GTK XNUMX๋Š” ๋‹ค์Œ GTK์˜ API ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•ด XNUMX๊ฐœ์›”๋งˆ๋‹ค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋‹ค์‹œ ์ž‘์„ฑํ•ด์•ผ ํ•˜๋Š” ๊ฑฑ์ • ์—†์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์•ˆ์ •์ ์ด๊ณ  ์ง€์›๋˜๋Š” API๋ฅผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์ˆ˜๋…„ ๋™์•ˆ ์ œ๊ณตํ•˜๋ ค๋Š” ์ƒˆ๋กœ์šด ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค์˜ ์ผ๋ถ€๋กœ ๊ฐœ๋ฐœ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋ญ‡๊ฐ€์ง€.

GTK 4.8์˜ ๊ฐ€์žฅ ์ฃผ๋ชฉํ• ๋งŒํ•œ ๊ฐœ์„  ์‚ฌํ•ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์ƒ‰์ƒ ์„ ํƒ ์ธํ„ฐํŽ˜์ด์Šค ์Šคํƒ€์ผ์ด ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค(GtkColorChooser).
  • ๊ธ€๊ผด ์„ ํƒ ์ธํ„ฐํŽ˜์ด์Šค(GtkFontChooser)์—์„œ๋Š” OpenType ํ˜•์‹ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์ง€์›์ด ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • CSS ์—”์ง„์€ ๋™์ผํ•œ ์ƒ์œ„ ์š”์†Œ์™€ ์—ฐ๊ด€๋œ ์š”์†Œ์˜ ์žฌ๊ทธ๋ฃนํ™”๋ฅผ ์ตœ์ ํ™”ํ–ˆ์œผ๋ฉฐ ๋ฌธ์ž ์‚ฌ์ด์˜ ๊ฐ„๊ฒฉ ํฌ๊ธฐ๋ฅผ ๊ฒฐ์ •ํ•  ๋•Œ ์ •์ˆ˜๊ฐ€ ์•„๋‹Œ ๊ฐ’์˜ ์‚ฌ์šฉ์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ์ด๋ชจํ‹ฐ์ฝ˜ ๋ฐ์ดํ„ฐ๊ฐ€ CLDR 40(์œ ๋‹ˆ์ฝ”๋“œ 14)์œผ๋กœ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ๋กœ์ผ€์ผ์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ํ…Œ๋งˆ์˜ ์•„์ด์ฝ˜์ด ์—…๋ฐ์ดํŠธ๋˜์—ˆ์œผ๋ฉฐ ๊ฐ•์กฐ ํ‘œ์‹œ๋œ ํ…์ŠคํŠธ ๋ ˆ์ด๋ธ”์˜ ๊ฐ€๋…์„ฑ์ด ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • GTK์™€ ๊ทธ๋ž˜ํ”ฝ ํ•˜์œ„ ์‹œ์Šคํ…œ ์‚ฌ์ด์— ๋ ˆ์ด์–ด๋ฅผ ์ œ๊ณตํ•˜๋Š” GDK ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ํ”ฝ์…€ ํ˜•์‹ ๋ณ€ํ™˜์„ ์ตœ์ ํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค. NVIDIA ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ์žˆ๋Š” ์‹œ์Šคํ…œ์—์„œ๋Š” EGL ํ™•์žฅ EGL_KHR_swap_buffers_with_damage๊ฐ€ ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค.
  • OpenGL ๋ฐ Vulkan์„ ํ†ตํ•ด ๊ทธ๋ž˜ํ”ฝ ์žฅ๋ฉด์„ ๋ Œ๋”๋งํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” GSK ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(GTK Scene Kit)๋Š” ๋„“์€ ๊ฐ€์‹œ ์˜์—ญ(๋ทฐํฌํŠธ) ์ฒ˜๋ฆฌ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ํ…์Šค์ฒ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ž ๋ชจ์–‘์„ ๋ Œ๋”๋งํ•˜๊ธฐ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ œ์•ˆ๋ฉ๋‹ˆ๋‹ค.
  • Wayland๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ์ฒซ ๋ฒˆ์งธ ์ˆ˜์ค€ ํ‘œ๋ฉด ๊ฐ„์— ํฌ์ปค์Šค๋ฅผ ์ „์†กํ•  ์ˆ˜ ์žˆ๋Š” "xdg-activation" ํ”„๋กœํ† ์ฝœ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด xdg-activation์„ ์‚ฌ์šฉํ•˜๋ฉด ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋‹ค๋ฅธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ํฌ์ปค์Šค๋ฅผ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • GtkTextView ์œ„์ ฏ์€ ๋‹ค์‹œ ๊ทธ๋ฆฌ๊ธฐ๊ฐ€ ๋ฐ˜๋ณต๋˜๋Š” ์ƒํ™ฉ์˜ ์ˆ˜๋ฅผ ์ค„์ด๊ณ  GetCharacterExtents ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ ํ…์ŠคํŠธ์˜ ๋ฌธ์ž๋ฅผ ์ •์˜ํ•˜๋Š” ๊ธ€๋ฆฌํ”„๊ฐ€ ์žˆ๋Š” ์˜์—ญ์„ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค(์žฅ์• ์ธ์„ ์œ„ํ•œ ๋„๊ตฌ์—์„œ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ํ•จ์ˆ˜).
  • ์œ„์ ฏ์—์„œ ์Šคํฌ๋กค๋ง์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” GtkViewport ํด๋ž˜์Šค์—๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ '์Šคํฌ๋กค ํˆฌ ํฌ์ปค์Šค' ๋ชจ๋“œ๊ฐ€ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์œผ๋ฉฐ, ์ด ๋ชจ๋“œ์—์„œ๋Š” ์ž…๋ ฅ ํฌ์ปค์Šค๊ฐ€ ์žˆ๋Š” ์š”์†Œ๋ฅผ ๋ทฐ์— ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ฝ˜ํ…์ธ ๊ฐ€ ์ž๋™์œผ๋กœ ์Šคํฌ๋กค๋ฉ๋‹ˆ๋‹ค.
  • ๊ฒ€์ƒ‰์–ด ์ž…๋ ฅ ์˜์—ญ์„ ํ‘œ์‹œํ•˜๋Š” GtkSearchEntry ์œ„์ ฏ์€ ๋งˆ์ง€๋ง‰ ํ‚ค ์ž…๋ ฅ๊ณผ ์ฝ˜ํ…์ธ  ๋ณ€๊ฒฝ์— ๋Œ€ํ•œ ์‹ ํ˜ธ ์ „์†ก(GtkSearchEntry::search-changed) ์‚ฌ์ด์˜ ์ง€์—ฐ์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • ์ด์ œ GtkCheckButton ์œ„์ ฏ์—๋Š” ๋ฒ„ํŠผ์ด ์žˆ๋Š” ์ž์ฒด ํ•˜์œ„ ์œ„์ ฏ์„ ํ• ๋‹นํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ฝ˜ํ…์ธ ๋ฅผ ์ฃผ์–ด์ง„ ์˜์—ญ ํฌ๊ธฐ์— ๋งž๊ฒŒ ์กฐ์ •ํ•˜๊ธฐ ์œ„ํ•ด GtkPicture ์œ„์ ฏ์— "content-fit" ์†์„ฑ์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • GtkColumnView ์œ„์ ฏ์—์„œ ์Šคํฌ๋กค ์„ฑ๋Šฅ์ด ์ตœ์ ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • GtkTreeStore ์œ„์ ฏ์„ ์‚ฌ์šฉํ•˜๋ฉด UI ํ˜•์‹์˜ ํŒŒ์ผ์—์„œ ํŠธ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํŠน์ • ์˜์—ญ์˜ ํ…์ŠคํŠธ ํ‘œ์‹œ๋ฅผ ๋‹ด๋‹นํ•˜๋Š” GtkInscription ํด๋ž˜์Šค์— ๋ชฉ๋ก ํ‘œ์‹œ๋ฅผ ์œ„ํ•œ ์ƒˆ๋กœ์šด ์œ„์ ฏ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. GtkInscription ์‚ฌ์šฉ ์˜ˆ์‹œ๊ฐ€ ํฌํ•จ๋œ ๋ฐ๋ชจ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • GtkTreePopover ์œ„์ ฏ์— ์Šคํฌ๋กค ์ง€์›์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • GtkLabel ์œ„์ ฏ์—๋Š” ํƒญ์— ๋Œ€ํ•œ ์ง€์›๊ณผ ํ‚ค๋ณด๋“œ์˜ ๋ผ๋ฒจ๊ณผ ์—ฐ๊ด€๋œ ๊ธฐํ˜ธ๋ฅผ ํด๋ฆญํ•˜์—ฌ ๋ผ๋ฒจ์„ ํ™œ์„ฑํ™”ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • GtkListView ์œ„์ ฏ์€ ์ด์ œ "::n-items" ๋ฐ "::item-type" ์†์„ฑ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • ์ž…๋ ฅ ์‹œ์Šคํ…œ์€ ์Šคํฌ๋กค ์ฐจ์› ๋งค๊ฐœ๋ณ€์ˆ˜ ํ•ธ๋“ค๋Ÿฌ(GDK_SCROLL_UNIT_WHEEL, GDK_SCROLL_UNIT_SURFACE)์— ๋Œ€ํ•œ ์ง€์›์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • macOS ํ”Œ๋žซํผ์˜ ๊ฒฝ์šฐ OpenGL์„ ์‚ฌ์šฉํ•œ ์ „์ฒด ํ™”๋ฉด ๋ชจ๋“œ ๋ฐ ๋น„๋””์˜ค ์žฌ์ƒ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ–ฅ์ƒ๋œ ๋ชจ๋‹ˆํ„ฐ ๊ฐ์ง€, ๋‹ค์ค‘ ๋ชจ๋‹ˆํ„ฐ ๊ตฌ์„ฑ ์ž‘์—…, ํŒŒ์ผ ๋Œ€ํ™” ์ƒ์ž์˜ ์ฐฝ ๋ฐฐ์น˜ ๋ฐ ํฌ๊ธฐ ์„ ํƒ. ๋ Œ๋”๋ง์—๋Š” CALayer์™€ IOSurface๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์‹คํ–‰๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Windows ํ”Œ๋žซํผ์—์„œ๋Š” HiDPI ํ™”๋ฉด์˜ ์ฐฝ ๋ฐฐ์น˜๊ฐ€ ๊ฐœ์„ ๋˜์—ˆ๊ณ , ์ƒ‰์ƒ ๊ฐ์ง€ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์œผ๋ฉฐ, ๊ณ ํ•ด์ƒ๋„ ๋งˆ์šฐ์Šค ํœ  ์ด๋ฒคํŠธ ์ง€์›์ด ๊ตฌํ˜„๋˜์—ˆ์œผ๋ฉฐ, ํ„ฐ์น˜ํŒจ๋“œ ์ง€์›์ด ๊ฐœ์„ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฌธ์„œ์šฉ ์Šคํฌ๋ฆฐ์ƒท์„ ์ƒ์„ฑํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ์Šคํฌ๋ฆฐ์ƒท์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ์Šคํฌ๋ฆฐ์ƒท ๋ช…๋ น์ด gtk4-builder-tool ์œ ํ‹ธ๋ฆฌํ‹ฐ์— ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • gtk4-node-editor ์œ ํ‹ธ๋ฆฌํ‹ฐ ์„ค์น˜๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.
  • ๋””๋ฒ„๊ฑฐ ๊ธฐ๋Šฅ์ด ํ™•์žฅ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ถ”๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐ์ดํ„ฐ ํ‘œ์‹œ๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ๊ฒ€์‚ฌ ์ค‘์— PangoAttrList ์†์„ฑ ๋ณด๊ธฐ๋ฅผ ํ—ˆ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฒ€์‚ฌ๊ด€์˜ ๊ฒ€์‚ฌ๊ฐ€ ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค. "GTK_DEBUG=invert-text-dir" ๋ชจ๋“œ์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. GTK_USE_PORTAL ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๋Œ€์‹  "GDK_DEBUG=portals" ๋ชจ๋“œ๊ฐ€ ์ œ์•ˆ๋ฉ๋‹ˆ๋‹ค. ๊ฒ€์‚ฌ ์ธํ„ฐํŽ˜์ด์Šค์˜ ์‘๋‹ต์„ฑ์ด ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ffmpeg ๋ฐฑ์—”๋“œ์— ์‚ฌ์šด๋“œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • JPEG ์ด๋ฏธ์ง€ ๋‹ค์šด๋กœ๋”์˜ ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ์ด 300MB๋กœ ๋Š˜์–ด๋‚ฌ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

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