GTK๋ฅผ ์œ„ํ•œ ์ƒˆ๋กœ์šด ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ์–ธ์–ด์ธ Blueprint๋ฅผ ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค.

GNOME ์ง€๋„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์ž์ธ James Westman์€ GTK ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌ์ถ•ํ•˜๋„๋ก ์„ค๊ณ„๋œ ์ƒˆ๋กœ์šด ๋งˆํฌ์—… ์–ธ์–ด์ธ Blueprint๋ฅผ ์†Œ๊ฐœํ–ˆ์Šต๋‹ˆ๋‹ค. Blueprint ๋งˆํฌ์—…์„ GTK UI ํŒŒ์ผ๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•œ ์ปดํŒŒ์ผ๋Ÿฌ ์ฝ”๋“œ๋Š” Python์œผ๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ LGPLv3 ๋ผ์ด์„ ์Šค์— ๋”ฐ๋ผ ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ด์œ ๋Š” GTK์—์„œ ์‚ฌ์šฉํ•˜๋Š” UI ์ธํ„ฐํŽ˜์ด์Šค ์„ค๋ช… ํŒŒ์ผ์„ XML ํ˜•์‹์œผ๋กœ ๋ฐ”์ธ๋”ฉํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์˜ค๋ฒ„๋กœ๋“œ๋˜์–ด ์ˆ˜๋™์œผ๋กœ ๋งˆํฌ์—…์„ ์ž‘์„ฑํ•˜๊ฑฐ๋‚˜ ํŽธ์ง‘ํ•˜๋Š” ๋ฐ ํŽธ๋ฆฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Blueprint ํ˜•์‹์€ ์ •๋ณด๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ํ‘œ์‹œํ•˜๋Š” ๊ฒƒ์ด ํŠน์ง•์ด๋ฉฐ ์ฝ๊ธฐ ์‰ฌ์šด ๊ตฌ๋ฌธ ๋•๋ถ„์— ์ธํ„ฐํŽ˜์ด์Šค ์š”์†Œ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ƒ์„ฑ, ํŽธ์ง‘ ๋ฐ ํ‰๊ฐ€ํ•  ๋•Œ ์ „๋ฌธ์ ์ธ ์‹œ๊ฐ์  ์ธํ„ฐํŽ˜์ด์Šค ํŽธ์ง‘๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ ๋„ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋™์‹œ์— Blueprint๋Š” GTK๋ฅผ ๋ณ€๊ฒฝํ•  ํ•„์š”๊ฐ€ ์—†๊ณ  GTK ์œ„์ ฏ ๋ชจ๋ธ์„ ์™„์ „ํžˆ ๋ณต์ œํ•˜๋ฉฐ ๋งˆํฌ์—…์„ GtkBuilder์šฉ ํ‘œ์ค€ XML ํ˜•์‹์œผ๋กœ ์ปดํŒŒ์ผํ•˜๋Š” ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์œผ๋กœ ๋ฐฐ์น˜๋ฉ๋‹ˆ๋‹ค. Blueprint์˜ ๊ธฐ๋Šฅ์€ GtkBuilder์™€ ์™„์ „ํžˆ ์ผ์น˜ํ•˜๋ฉฐ ์ •๋ณด๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๋ฐฉ๋ฒ•๋งŒ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ๋ฅผ ๋ธ”๋ฃจํ”„๋ฆฐํŠธ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋ ค๋ฉด ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ์— ๋ธ”๋ฃจํ”„๋ฆฐํŠธ ์ปดํŒŒ์ผ๋Ÿฌ ํ˜ธ์ถœ์„ ์ถ”๊ฐ€ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. Gtk 4.0 ์‚ฌ์šฉ; template MyAppWindow : Gtk.ApplicationWindow { title: _("๋‚ด ์•ฑ ์ œ๋ชฉ"); [titlebar] HeaderBar header_bar {} Label { styles ["heading"] label: _("Hello, world!"); } }

Blueprint ๋„์ž… - GTK์šฉ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌ์ถ•์„ ์œ„ํ•œ ์ƒˆ๋กœ์šด ์–ธ์–ด

ํ‘œ์ค€ GTK XML ํ˜•์‹์˜ ์ปดํŒŒ์ผ๋Ÿฌ ์™ธ์—๋„ GNOME Builder ํ†ตํ•ฉ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ์œ„ํ•œ Blueprint ์ง€์› ํ”Œ๋Ÿฌ๊ทธ์ธ๋„ ๊ฐœ๋ฐœ ์ค‘์ž…๋‹ˆ๋‹ค. Visual Studio Code๋ฅผ ํฌํ•จํ•˜์—ฌ LSP๋ฅผ ์ง€์›ํ•˜๋Š” ์ฝ”๋“œ ํŽธ์ง‘๊ธฐ์—์„œ ๊ฐ•์กฐ ํ‘œ์‹œ, ์˜ค๋ฅ˜ ๋ถ„์„, ํžŒํŠธ ํ‘œ์‹œ ๋ฐ ์ฝ”๋“œ ์™„์„ฑ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” Blueprint์šฉ ๋ณ„๋„์˜ LSP ์„œ๋ฒ„(์–ธ์–ด ์„œ๋ฒ„ ํ”„๋กœํ† ์ฝœ)๊ฐ€ ๊ฐœ๋ฐœ ์ค‘์ž…๋‹ˆ๋‹ค.

๋ธ”๋ฃจํ”„๋ฆฐํŠธ ๊ฐœ๋ฐœ ๊ณ„ํš์—๋Š” GTK4์—์„œ ์ œ๊ณต๋˜๋Š” Gtk.Expression ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„๋œ ๋งˆํฌ์—…์— ๋ฐ˜์‘ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์ œ์•ˆ๋œ ๋ฐฉ๋ฒ•์€ JavaScript ์›น ์ธํ„ฐํŽ˜์ด์Šค ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋” ์นœ์ˆ™ํ•˜๋ฉฐ, ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ฐ•์ œ๋กœ ์—…๋ฐ์ดํŠธํ•  ํ•„์š” ์—†์ด ์ธํ„ฐํŽ˜์ด์Šค ํ‘œ์‹œ์™€ ๊ด€๋ จ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์„ ์ž๋™์œผ๋กœ ๋™๊ธฐํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

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