{"id":453367,"date":"2025-03-26T09:01:03","date_gmt":"2025-03-26T09:01:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=453367"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=453367","title":{"rendered":"<span>\u041d\u0435\u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0421\u043e\u0431\u0440\u0430\u043b \u0434\u043b\u044f \u0432\u0430\u0441 \u043f\u043e\u0434\u0431\u043e\u0440\u043a\u0443 \u0440\u0435\u0434\u043a\u0438\u0445, \u043d\u0435\u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u0438\u00a0\u043c\u0430\u043b\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0445 UI-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u00a0\u2014 \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432 \u0432\u00a0\u0438\u0433\u0440\u0430\u0445, \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0445 \u0438\u00a0\u0434\u0435\u0441\u043a\u0442\u043e\u043f\u043d\u043e\u043c\u00a0\u041f\u041e.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/34f\/aa7\/055\/34faa7055cc1f71138676c5687c99ea4.png\" width=\"1800\" height=\"600\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/34f\/aa7\/055\/34faa7055cc1f71138676c5687c99ea4.png\"\/><\/figure>\n<h3>\u041b\u0438\u043a\u0431\u0435\u0437<\/h3>\n<p>\u0421\u0442\u043e\u0438\u0442 \u0437\u0430\u0434\u0430\u0442\u044c \u043d\u0430 \u043b\u044e\u0431\u043e\u043c \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0444\u043e\u0440\u0443\u043c\u0435 \u0432\u043f\u043e\u043b\u043d\u0435 \u043d\u0435\u0432\u0438\u043d\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441:<\/p>\n<blockquote>\n<p>\u043a\u0430\u043a\u0443\u044e UI-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443\/\u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0434\u043b\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430?<\/p>\n<\/blockquote>\n<p>\u0438 \u0440\u0430\u0437\u0432\u0435\u0440\u0437\u043d\u0443\u0442\u0441\u044f \u043d\u0430\u0442\u0443\u0440\u0430\u043b\u044c\u043d\u043e \u0431\u0435\u0437\u0434\u043d\u044b \u0430\u0434\u0430.<\/p>\n<p>\u0418\u0437\u00a0\u043f\u043e\u0442\u043e\u043a\u0430 \u0438\u0441\u0442\u043e\u0440\u0433\u0430\u0435\u043c\u044b\u0445 \u0433\u043e\u0432\u0435\u043d, \u0441\u00a0\u0431\u043e\u043b\u044c\u0448\u0438\u043c \u0442\u0440\u0443\u0434\u043e\u043c \u0438 \u043e\u0442\u0432\u043b\u0435\u043a\u0430\u044f\u0441\u044c \u043d\u0430 \u043d\u0435\u043d\u0443\u0436\u043d\u044b\u0435\u00a0\u0432\u043e\u043f\u0440\u043e\u0441\u044b \u0440\u043e\u0434\u043e\u0441\u043b\u043e\u0432\u043d\u043e\u0439, \u043f\u043e\u043b\u043e\u0432\u043e\u0439 \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0438\u00a0\u043f\u043e\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0440\u0438\u0441\u0442\u0440\u0430\u0441\u0442\u0438\u0439 \u0432\u0441\u0435 \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u043e\u0432 \u0434\u0438\u0441\u043a\u0443\u0441\u0441\u0438\u0438, \u0432\u044b \u0443\u0437\u043d\u0430\u0435\u0442\u0435 \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u0434\u0432\u0430 <s>\u0441\u0442\u0443\u043b\u0430<\/s> \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430: <a href=\"https:\/\/www.qt.io\/product\/framework\" rel=\"noopener noreferrer nofollow\">QT<\/a>\u00a0\u0438\u00a0<a href=\"https:\/\/www.gtk.org\/\" rel=\"noopener noreferrer nofollow\">GTK<\/a>. <\/p>\n<blockquote>\n<p>\u0418 \u0440\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f \u0432\u0435\u0431-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u0435\u043f\u0435\u0440\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0434\u043b\u044f \u043b\u044e\u0431\u044b\u0445 \u0437\u0430\u0434\u0430\u0447.<\/p>\n<\/blockquote>\n<p>\u0415\u0441\u043b\u0438 \u0432\u043e\u043f\u0440\u043e\u0441\u00a0\u0431\u044b\u043b \u0437\u0430\u0434\u0430\u043d \u043d\u0430\u00a0\u0444\u043e\u0440\u0443\u043c\u0435, \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u043d\u043e\u043c Windows\u00a0\u2014 \u0432\u0441\u0435 \u0431\u0443\u0434\u0435\u0442 \u0435\u0449\u0435 \u043f\u0435\u0447\u0430\u043b\u044c\u043d\u0435\u0435 \u0438 \u0434\u0430\u043b\u044c\u0448\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e <a href=\"https:\/\/learn.microsoft.com\/en-us\/dotnet\/desktop\/wpf\/?view=netdesktop-9.0\" rel=\"noopener noreferrer nofollow\">WPF<\/a> \u0434\u0435\u043b\u043e \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u043d\u0435\u00a0\u0437\u0430\u0439\u0434\u0435\u0442. \u041d\u0443\u00a0\u043c\u043e\u0436\u0435\u0442 \u043f\u0430\u0440\u0430 \u043e\u043f\u044b\u0442\u043d\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0435\u0449\u0435 \u0432\u0441\u043f\u043e\u043c\u043d\u044f\u0442 \u043f\u0440\u043e \u00ab\u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0442\u0430\u043c\u00bb WinAPI \u0438\u043b\u0438\u00a0MFC.<\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u043e\u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0431\u0443\u0434\u0435\u0442 \u0443\u00a0\u043b\u044e\u0431\u0438\u0442\u0435\u043b\u0435\u0439 Mac, \u0433\u0434\u0435 \u0432\u0430\u043c \u043f\u043e\u0441\u043e\u0432\u0435\u0442\u0443\u044e\u0442 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e\u0435 \u00ab\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 Swift\u00bb, \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0441\u0442\u0443\u043f\u044f\u0442 \u0438 \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0435\u0441\u044f \u043d\u0430\u00a0\u0441\u0432\u0435\u0442\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 Delphi, \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0432 \u0447\u0442\u043e \u00abUI \u044d\u0442\u043e Delphi\u00bb, \u0430\u00a0\u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435\u00a0\u2014 \u043e\u0442\u00a0\u043b\u0443\u043a\u0430\u0432\u043e\u0433\u043e.<\/p>\n<p>\u041d\u0435\u00a0\u0442\u043e\u00a0\u0447\u0442\u043e\u0431\u044b \u0432\u0441\u0435 \u0441\u043e\u0432\u0435\u0442\u0443\u044e\u0449\u0438\u0435 \u0431\u044b\u043b\u0438 \u043d\u0430\u00a0\u0437\u0430\u0440\u043f\u043b\u0430\u0442\u0435 \u0443\u00a0\u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0446\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438 \u0441\u0442\u043e\u044f\u0442 \u0437\u0430\u00a0\u043a\u043b\u044e\u0447\u0435\u0432\u044b\u043c\u0438 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f\u043c\u0438, \u043f\u0440\u043e\u0441\u0442\u043e \u043b\u044e\u0434\u0438 \u0432\u00a0\u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0441\u0432\u043e\u0435\u0439 \u043c\u0430\u0441\u0441\u0435\u00a0\u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043b\u044e\u0431\u043e\u0437\u043d\u0430\u0442\u0435\u043b\u044c\u043d\u044b.<\/p>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435\u00a0\u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c, \u0447\u0442\u043e\u00a0\u043a\u043d\u043e\u043f\u043a\u0438 \u0438 \u0444\u043e\u0440\u043c\u044b \u043c\u043e\u0436\u0435\u0442 \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043a\u0440\u043e\u0448\u0435\u0447\u043d\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043d\u0430 2\u043a \u0441\u0442\u0440\u043e\u043a \u043a\u043e\u0434\u0430, \u043d\u0435\u00a0\u0442\u0440\u0435\u0431\u0443\u044e\u0449\u0430\u044f \u043f\u0430\u0440\u044b \u043b\u0435\u0442 \u043d\u0430\u00a0\u0441\u0432\u043e\u0435 \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0435. <\/p>\n<p>\u0418\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a\u0438\u0435 \u0443\u0434\u0438\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u044f \u0432\u0430\u043c \u0441\u0435\u0439\u0447\u0430\u0441 \u0438 \u043f\u043e\u043a\u0430\u0436\u0443.<\/p>\n<h3>\u0422\u0435\u0441\u0442\u043e\u0432\u0430\u044f \u0441\u0440\u0435\u0434\u0430<\/h3>\n<p>\u0412\u00a0\u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0439 \u0441\u0440\u0435\u0434\u044b \u0432\u00a0\u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u043b Debian Linux 12, \u0441\u0431\u043e\u0440\u043a\u0430 \u0438\u00a0\u0437\u0430\u043f\u0443\u0441\u043a \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043b\u0438\u0441\u044c \u043d\u0430\u00a0\u043e\u0447\u0435\u043d\u044c \u0441\u043b\u0430\u0431\u043e\u043c \u0438\u00a0\u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0435\u043c \u043d\u043e\u0443\u0442\u0431\u0443\u043a\u0435\u00a0\u2014 \u0432\u00a0\u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0441 Windows-\u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u043e\u0439 \u0431\u044b\u043b\u0438 \u0441\u043e\u0431\u0440\u0430\u043d\u044b \u0438 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u044b \u043d\u0430 Windows 11.<\/p>\n<blockquote>\n<p>\u0411\u043e\u043b\u044c\u0448\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0438\u0437\u00a0\u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0445 \u043d\u0438\u0436\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0438\u00a0\u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u0432\u00a0\u2014 \u043a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u044b\u0435 \u0438\u00a0\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442 \u0432\u0441\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f: Linux, Windows, Mac.<\/p>\n<\/blockquote>\n<p>\u0410\u00a0\u0441\u00a0\u0443\u0447\u0435\u0442\u043e\u043c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432\u00a0\u2014 \u0432\u043e\u043f\u0440\u043e\u0441 \u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/be2\/a22\/aa5\/be2a22aa530e995c201513c1ae346fb1.png\" alt=\"\u041e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\" title=\"\u041e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\" width=\"1200\" height=\"800\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/be2\/a22\/aa5\/be2a22aa530e995c201513c1ae346fb1.png\"\/><\/p>\n<div><figcaption>\u041e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442<\/figcaption><\/div>\n<\/figure>\n<h2>Nuklear<\/h2>\n<p><a href=\"https:\/\/github.com\/Immediate-Mode-UI\/Nuklear\/tree\/master\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/Immediate-Mode-UI\/Nuklear\/tree\/master<\/a><\/p>\n<p>\u0421\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u044b \u0438\u0437 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0445 \u044d\u0442\u0443 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0435\u0440\u0446\u0430\u0442\u044c \u043d\u0430 \u0437\u0430\u0433\u043b\u0430\u0432\u043d\u043e\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435 \u043a \u0441\u0442\u0430\u0442\u044c\u0435, \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u0438\u0441\u0430\u043d\u0438\u0435:<\/p>\n<blockquote>\n<p>A single-header ANSI C immediate mode cross-platform GUI library<\/p>\n<\/blockquote>\n<p><strong>18\u043a<\/strong> \u0441\u0442\u0440\u043e\u043a \u043a\u043e\u0434\u0430 \u043d\u0430 C, \u0447\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u0434\u043b\u044f \u0442\u0430\u043a\u043e\u0433\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430.<\/p>\n<p>\u0410\u0432\u0442\u043e\u0440\u044b \u043d\u0435\u00a0\u0432\u0440\u0443\u0442 \u0438\u00a0\u043f\u043e\u00a0\u043f\u043e\u0432\u043e\u0434\u0443 \u00absingle-header\u00bb, \u043d\u043e\u00a0\u0435\u0441\u0442\u044c \u043d\u044e\u0430\u043d\u0441:<\/p>\n<blockquote>\n<p>\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0432\u0435\u0434\u0435\u0442\u0441\u044f \u0432\u00a0\u0440\u0430\u0437\u043d\u044b\u0445 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u0430\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u0430\u0442\u0435\u043c \u00ab\u0443\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u044e\u0442\u0441\u044f\u00bb \u0432\u00a0\u043e\u0434\u0438\u043d \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a <a href=\"https:\/\/github.com\/Immediate-Mode-UI\/Nuklear\/blob\/master\/nuklear.h\" rel=\"noopener noreferrer nofollow\">nuklear.h<\/a><\/p>\n<\/blockquote>\n<p>\u041e\u0441\u0442\u043e\u0440\u043e\u0436\u043d\u043e, \u043f\u043e\u00a0\u0441\u0441\u044b\u043b\u043a\u0435 \u0432\u044b\u0448\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0439 .h \u0444\u0430\u0439\u043b \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u0431\u043e\u043b\u044c\u0448\u0435 1 \u041c\u0431\u00a0\u2014 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0434\u0432\u0435\u0441\u0438\u0442\u044c \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u043f\u0440\u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0438.<\/p>\n<p>\u0426\u0438\u0442\u0438\u0440\u0443\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e:<\/p>\n<blockquote>\n<p>It was designed as a simple embeddable user interface for application and does not have any dependencies, a default render backend or OS window\/input handling but instead provides a highly modular, library-based approach<\/p>\n<\/blockquote>\n<p>\u0414\u0443\u043c\u0430\u044e \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u043f\u0440\u0438 \u0442\u0430\u043a\u043e\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u0435 \u0447\u0430\u0441\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0433\u043e \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430 \u043f\u0435\u0440\u0435\u0441\u0430\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u00a0\u0448\u0435\u0438 \u0430\u0432\u0442\u043e\u0440\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043d\u0430\u00a0\u0432\u0430\u0448\u0443 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e\u00a0\u2014 \u0440\u0435\u0447\u044c \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043f\u0440\u043e \u00ab\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0431\u0435\u043a\u044d\u043d\u0434\u044b\u00bb. <\/p>\n<p>\u041a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432\u043d\u0435\u0437\u0430\u043f\u043d\u043e \u043c\u043d\u043e\u0433\u043e:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/929\/1e4\/f90\/9291e4f90c346e80a6e98dad6c54a021.png\" alt=\"\u0415\u0441\u043b\u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0435\u0441\u044c \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0439 - \u0442\u0443\u0442 \u0431\u0443\u0434\u0443\u0442 \u043c\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u043a\u043e\u043c\u044b\u0445 \u0432\u0430\u043c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0439\" title=\"\u0415\u0441\u043b\u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0435\u0441\u044c \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0439 - \u0442\u0443\u0442 \u0431\u0443\u0434\u0443\u0442 \u043c\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u043a\u043e\u043c\u044b\u0445 \u0432\u0430\u043c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0439\" width=\"1142\" height=\"609\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/929\/1e4\/f90\/9291e4f90c346e80a6e98dad6c54a021.png\"\/><\/p>\n<div><figcaption>\u0415\u0441\u043b\u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0435\u0441\u044c \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0439 &#8212; \u0442\u0443\u0442 \u0431\u0443\u0434\u0443\u0442 \u043c\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u043a\u043e\u043c\u044b\u0445 \u0432\u0430\u043c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0439<\/figcaption><\/div>\n<\/figure>\n<p>\u0418\u0437 \u0445\u043e\u0440\u043e\u0448\u0435\u0433\u043e:<\/p>\n<blockquote>\n<p>\u0432\u0441\u0435 \u0447\u0442\u043e \u0432\u0430\u043c \u044f\u0432\u043d\u043e \u043d\u0435 \u043d\u0430\u0434\u043e \u0432 \u043f\u0440\u043e\u0435\u043a\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u0442.<\/p>\n<\/blockquote>\n<p>\u0418\u0437 \u043f\u043b\u043e\u0445\u043e\u0433\u043e:<\/p>\n<blockquote>\n<p>\u0432\u0441\u0435 \u0447\u0442\u043e \u0432\u044b\u00a0\u044f\u0432\u043d\u043e \u043d\u0435\u00a0\u0434\u043e\u0431\u0430\u0432\u0438\u0442\u0435\u00a0\u2014 \u0432\u00a0\u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043d\u0435\u00a0\u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f.<\/p>\n<\/blockquote>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0434\u0430\u0436\u0435 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u00abfallback mode\u00bb\u00a0\u2014 \u043e\u0442\u043a\u0430\u0442 \u043d\u0430\u00a0X11-\u0431\u0435\u043a\u044d\u043d\u0434 \u043f\u0440\u0438 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 3D-\u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f \u043d\u0435\u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443.<\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f (\u0431\u0435\u0437 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432):<\/p>\n<pre><code class=\"cpp\">\/* init gui state *\/ struct nk_context ctx; nk_init_fixed(&amp;ctx, calloc(1, MAX_MEMORY), MAX_MEMORY, &amp;font);  enum {EASY, HARD}; static int op = EASY; static float value = 0.6f; static int i =  20;  if (nk_begin(&amp;ctx, \"Show\", nk_rect(50, 50, 220, 220),     NK_WINDOW_BORDER|NK_WINDOW_MOVABLE|NK_WINDOW_CLOSABLE)) {     \/* fixed widget pixel width *\/     nk_layout_row_static(&amp;ctx, 30, 80, 1);     if (nk_button_label(&amp;ctx, \"button\")) {         \/* event handling *\/     }      \/* fixed widget window ratio width *\/     nk_layout_row_dynamic(&amp;ctx, 30, 2);     if (nk_option_label(&amp;ctx, \"easy\", op == EASY)) op = EASY;     if (nk_option_label(&amp;ctx, \"hard\", op == HARD)) op = HARD;      \/* custom widget pixel width *\/     nk_layout_row_begin(&amp;ctx, NK_STATIC, 30, 2);     {         nk_layout_row_push(&amp;ctx, 50);         nk_label(&amp;ctx, \"Volume:\", NK_TEXT_LEFT);         nk_layout_row_push(&amp;ctx, 110);         nk_slider_float(&amp;ctx, 0, &amp;value, 1.0f, 0.1f);     }     nk_layout_row_end(&amp;ctx); } nk_end(&amp;ctx);<\/code><\/pre>\n<p>\u0412\u043e\u0442 \u0442\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0435\u0433\u043e showcase \u043d\u0430 Linux \u0441 X11-\u0431\u0435\u043a\u044d\u043d\u0434\u043e\u043c \u0432 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0438:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/759\/b5c\/623\/759b5c623e8c3f0ceccbacd98f5e2756.gif\" width=\"800\" height=\"500\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/759\/b5c\/623\/759b5c623e8c3f0ceccbacd98f5e2756.gif\"\/><\/figure>\n<p>\u0414\u0435\u043c\u043e-\u043f\u0440\u043e\u0435\u043a\u0442\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u043f\u043e\u0434 Windows \u0442\u0430\u043a \u0438\u00a0\u043f\u043e\u0434 Linux.<\/p>\n<blockquote>\n<p>\u041a\u00a0\u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e \u0432\u0435\u0437\u0434\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u0430\u044f \u0441\u0431\u043e\u0440\u043a\u0430 \u0438\u00a0\u00ab\u0443\u043f\u0430\u043a\u043e\u0432\u043a\u0430\u00bb \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u043d\u0430\u00a0Python\u00a0\u2014 \u0432\u0441\u0435 \u044d\u0442\u043e \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u043a\u0440\u0443\u0447\u0438\u0432\u0430\u0442\u044c, \u043f\u043e-\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043d\u0435\u00a0\u0441\u043e\u0431\u0435\u0440\u0435\u0442\u0441\u044f.<\/p>\n<\/blockquote>\n<p>\u0427\u0442\u043e \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f, \u043c\u043d\u0435 \u043d\u0435\u00a0\u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u0439\u0442\u0438 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f Nuklear \u0434\u043b\u044f \u0438\u0433\u0440 \u0441\u0435\u0440\u0438\u0438 Call of\u00a0Duty, \u043e\u0442\u043a\u0443\u0434\u0430 \u0431\u044b\u043b \u0432\u0437\u044f\u0442 \u0434\u0430\u043d\u043d\u044b\u0439 \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/df9\/a88\/8d4\/df9a888d44128b622f8999d8054be171.png\" width=\"1600\" height=\"900\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/df9\/a88\/8d4\/df9a888d44128b622f8999d8054be171.png\"\/><\/figure>\n<p>\u0422\u0430\u043a \u0447\u0442\u043e \u043e\u0441\u0442\u0430\u0432\u0438\u043c \u044d\u0442\u043e\u0442 \u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 \u0441\u043e\u0432\u0435\u0441\u0442\u0438 \u0430\u0432\u0442\u043e\u0440\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438.<\/p>\n<p>\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043f\u0440\u043e\u0435\u043a\u0442, \u0430\u0432\u0442\u043e\u0440\u044b \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u043e \u0443\u0433\u043e\u0440\u0435\u043b\u0438 \u043f\u043e \u0441\u043b\u043e\u0436\u043d\u044b\u043c \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u044f\u043c:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/7e7\/497\/c3d\/7e7497c3dc972cf451eac2bec35dd14f.jpeg\" width=\"1280\" height=\"785\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/7e7\/497\/c3d\/7e7497c3dc972cf451eac2bec35dd14f.jpeg\" data-blurred=\"true\"\/><\/figure>\n<h2>Elements C++ GUI library<\/h2>\n<p><a href=\"https:\/\/github.com\/cycfi\/elements\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/cycfi\/elements<\/a><\/p>\n<p>\u0421\u0435\u0439 \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u043a\u0443\u0434\u0430 \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442 \u0432\u00a0\u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u043f\u043b\u0430\u043d\u0435:<\/p>\n<blockquote>\n<p>Elements is a lightweight, fine-grained, resolution-independent, extremely modular GUI library. The library is written using modern C++20 language features<\/p>\n<\/blockquote>\n<p>\u041d\u0430 C++20, \u0435\u0449\u0435 \u0438 \u0441\u043e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c <a href=\"https:\/\/cycfi.github.io\/elements\/elements\/aspects.html\" rel=\"noopener noreferrer nofollow\">DSL \u0434\u043b\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432<\/a>:<\/p>\n<blockquote>\n<p>It has a declarative interface with a sensible and easy-to-use Domain Specific Embedded Languages (DSEL) syntax for constructing the GUI elements. A declarative description of the GUI is written exclusively in C++, and therefore, there is no need for an external visual GUI editor or code generator.<\/p>\n<\/blockquote>\n<p>\u0412\u043e\u0442 \u0442\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442<a href=\"https:\/\/github.com\/cycfi\/elements\/blob\/master\/examples\/hello_universe\/main.cpp\" rel=\"noopener noreferrer nofollow\"> \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434<\/a> \u00abHello word\u00bb \u0441\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u044d\u0442\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438:<\/p>\n<pre><code class=\"cpp\">#include &lt;elements.hpp&gt;  using namespace cycfi::elements;  int main(int argc, char* argv[]) {    app _app(\"Hello Universe\");    window _win(_app.name());    _win.on_close = [&amp;_app]() { _app.stop(); };    view view_(_win);    view_.content(       scroller(image{\"space.jpg\"})    );    _app.run();    return 0; }<\/code><\/pre>\n<p>\u0421\u0442\u043e\u0438\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c \u0447\u0442\u043e \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043d\u0435\u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0443\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 <a href=\"https:\/\/www.cairographics.org\/\" rel=\"noopener noreferrer nofollow\">Cairo<\/a> \u0438 \u0435\u0449\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439: <\/p>\n<blockquote>\n<p>pkg-config, fontconfig, freetype2, bzip2,  expat,  zlib, libpng,  libwebp<\/p>\n<\/blockquote>\n<p>\u0422\u0430\u043a \u0447\u0442\u043e \u0441\u0431\u043e\u0440\u043a\u0430 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u043b\u043e\u0436\u043d\u0430\u044f, \u0437\u0430\u0442\u043e \u0432\u043f\u043e\u043b\u043d\u0435 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e <a href=\"https:\/\/cycfi.github.io\/elements\/elements\/setup.html\" rel=\"noopener noreferrer nofollow\">\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f<\/a> Windows, MacOS \u0438 Linux.<\/p>\n<p>\u0414\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0432 \u0440\u0430\u0431\u043e\u0442\u0435 \u043d\u0430 Linux:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e77\/a63\/672\/e77a636728d7e8b12fd5e0af67251569.gif\" width=\"800\" height=\"500\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e77\/a63\/672\/e77a636728d7e8b12fd5e0af67251569.gif\"\/><\/figure>\n<h3>GUILite.h<\/h3>\n<p><a href=\"https:\/\/github.com\/idea4good\/GuiLite\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/idea4good\/GuiLite<\/a><\/p>\n<p>\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 (7.5\u043a \u0437\u0432\u0435\u0437\u0434), \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u044b\u0439 \u0430\u0432\u0442\u043e\u0440\u043e\u043c \u043a\u0430\u043a:<\/p>\n<blockquote>\n<p>The smallest header-only GUI library (4 KLOC) for all platforms.<\/p>\n<\/blockquote>\n<p>\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0435\u043d \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043d\u0430\u0431\u043e\u0440\u043e\u043c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c: <\/p>\n<blockquote>\n<p>iOS\/macOS\/WatchOS, Android, Linux, Windows, RTOS&#8230; or <strong>MCU without OS<\/strong><\/p>\n<\/blockquote>\n<p>\u0414\u0430, \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0430 \u0432\u00a0\u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0434\u043b\u044f\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430 \u00ab\u0433\u043e\u043b\u043e\u043c\u00a0\u0436\u0435\u043b\u0435\u0437\u0435\u00bb:<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3ed\/cf8\/c29\/3edcf8c29cd4fe4f6fe865188bf1bc05.gif\" width=\"400\" height=\"246\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3ed\/cf8\/c29\/3edcf8c29cd4fe4f6fe865188bf1bc05.gif\"\/><\/figure>\n<p>\u0412 \u0440\u0430\u0431\u043e\u0442\u0435 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0434\u0435\u0441\u043a\u0442\u043e\u043f-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 Linux \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0430\u043a-\u0442\u043e \u0442\u0430\u043a: <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e5f\/dec\/659\/e5fdec65957a1e92e20f549a5e03cd7a.gif\" alt=\"\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u043d\u0443\u044e \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u0443\" title=\"\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u043d\u0443\u044e \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u0443\" width=\"800\" height=\"500\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e5f\/dec\/659\/e5fdec65957a1e92e20f549a5e03cd7a.gif\"\/><\/p>\n<div><figcaption>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u043d\u0443\u044e \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u0443<\/figcaption><\/div>\n<\/figure>\n<p>\u0412\u0441\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 <a href=\"https:\/\/github.com\/idea4good\/GuiLite\/blob\/master\/GuiLite.h\" rel=\"noopener noreferrer nofollow\">\u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435<\/a>, \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0432\u044b\u043d\u0435\u0441\u0435\u043d\u044b \u0432 <a href=\"https:\/\/github.com\/idea4good\/GuiLiteSamples\" rel=\"noopener noreferrer nofollow\">\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439<\/a>.<\/p>\n<p>\u0414\u0443\u043c\u0430\u044e \u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u0442\u044c, \u0447\u0442\u043e \u0438\u0437-\u0437\u0430 \u0442\u0430\u043a\u043e\u0439 \u043c\u0438\u043d\u0438\u0430\u0442\u044e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043b\u043e\u0433\u0438\u043a\u0438 \u0432\u044b\u043d\u0435\u0441\u0435\u043d\u0430 \u0432 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0438\u043c\u0435\u044e\u0442 \u043a\u043e\u043d\u0441\u043a\u0438\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u0438 \u0441\u043b\u043e\u0436\u043d\u0443\u044e \u0441\u0431\u043e\u0440\u043a\u0443:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ad5\/e7b\/b6f\/ad5e7bb6ffdf8bdc9c065a47993a8f6b.png\" width=\"926\" height=\"484\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ad5\/e7b\/b6f\/ad5e7bb6ffdf8bdc9c065a47993a8f6b.png\"\/><\/figure>\n<h3>MicroUI<\/h3>\n<p><a href=\"https:\/\/github.com\/rxi\/microui\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/rxi\/microui<\/a><\/p>\n<p>\u0415\u0449\u0435 \u043e\u0434\u0438\u043d \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 (3.8\u043a \u0437\u0432\u0435\u0437\u0434), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0442\u043e\u0438\u0442 \u0432\u0437\u044f\u0442\u044c \u043d\u0430 \u0437\u0430\u043c\u0435\u0442\u043a\u0443:<\/p>\n<blockquote>\n<p>A tiny, portable, immediate-mode UI library written in ANSI C<\/p>\n<\/blockquote>\n<p>\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u00abtiny\u00bb, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432\u0441\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 ~ <strong>1.1<\/strong>\u043a \u0441\u0442\u0440\u043e\u043a \u043d\u0430\u00a0\u0421\u00a0\u0432 \u0432\u0438\u0434\u0435 \u0434\u0432\u0443\u0445 \u0444\u0430\u0439\u043b\u043e\u0432, \u0430\u00a0\u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c\u00a0\u2014 SDL2:<\/p>\n<pre><code class=\"bash\">CFLAGS=\"-I..\/src -Wall -std=c11 -pedantic `sdl2-config --libs` $GLFLAG -lm -O3 -g\" gcc main.c renderer.c ..\/src\/microui.c $CFLAGS<\/code><\/pre>\n<p>Showcase \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u0438 \u0432 <a href=\"https:\/\/floooh.github.io\/sokol-html5\/sgl-microui-sapp.html\" rel=\"noopener noreferrer nofollow\">\u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435<\/a>:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/10b\/db8\/2a4\/10bdb82a465788a7c50ba2325a94115f.png\" width=\"604\" height=\"523\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/10b\/db8\/2a4\/10bdb82a465788a7c50ba2325a94115f.png\"\/><\/figure>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f (\u0431\u0435\u0437 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432):<\/p>\n<pre><code class=\"cpp\">if (mu_begin_window(ctx, \"My Window\", mu_rect(10, 10, 140, 86))) {   mu_layout_row(ctx, 2, (int[]) { 60, -1 }, 0);   mu_label(ctx, \"First:\");   if (mu_button(ctx, \"Button1\")) {     printf(\"Button1 pressed\\n\");   }   mu_label(ctx, \"Second:\");   if (mu_button(ctx, \"Button2\")) {     mu_open_popup(ctx, \"My Popup\");   }   if (mu_begin_popup(ctx, \"My Popup\")) {     mu_label(ctx, \"Hello world!\");     mu_end_popup(ctx);   }   mu_end_window(ctx); }<\/code><\/pre>\n<p>\u0415\u0441\u0442\u044c \u0434\u0430\u0436\u0435 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u0430\u044f <a href=\"https:\/\/github.com\/rxi\/microui\/blob\/master\/doc\/usage.md\" rel=\"noopener noreferrer nofollow\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f<\/a>. <\/p>\n<p>\u0412 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0438 \u043d\u0430 Linux \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u044f\u044e\u0449\u0435:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/30e\/bb9\/030\/30ebb9030c2ca89906ee3a9dfa95ab1c.gif\" width=\"800\" height=\"500\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/30e\/bb9\/030\/30ebb9030c2ca89906ee3a9dfa95ab1c.gif\"\/><\/figure>\n<p>\u041e\u0447\u0435\u043d\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430\u044f \u0448\u0442\u0443\u043a\u0430, \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e.<\/p>\n<h3>Alia<\/h3>\n<p><a href=\"https:\/\/github.com\/alialib\/alia\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/alialib\/alia<\/a><\/p>\n<p>\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442, \u0441\u043a\u0440\u043e\u043c\u043d\u043e \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u044b\u0439 \u043a\u0430\u043a:<\/p>\n<blockquote>\n<p>a declarative UI library for C++<\/p>\n<\/blockquote>\n<p>\u0432\u044b\u043d\u043e\u0441\u0438\u0442 \u043c\u043e\u0437\u0433 \u043d\u0435\u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c \u043e\u0434\u043d\u043e\u0439 \u0444\u0440\u0430\u0437\u043e\u0439:<\/p>\n<blockquote>\n<p>alia currently targets the web.<\/p>\n<\/blockquote>\n<p>\u042d\u0442\u043e \u043d\u0430\u00a0\u043c\u043e\u0435\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u0435\u0440\u0432\u044b\u0439 UI-\u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u043d\u0430\u00a0C++, \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0435 \u0446\u0435\u043b\u0435\u0432\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e\u00a0\u2014 \u0432\u0435\u0431.<\/p>\n<p>\u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0437\u0430\u044f\u0432\u043b\u0435\u043d\u043d\u0443\u044e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 Linux, \u0441\u0431\u043e\u0440\u043a\u0430 \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u0441\u043b\u043e\u043c\u0430\u043d\u0430, \u0442\u0430\u043a \u0447\u0442\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437-\u043f\u043e\u0434 Windows 11.<\/p>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0434\u0432\u0438\u0436\u043a\u0430 \u0434\u043b\u044f \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 <a href=\"https:\/\/skia.org\/\" rel=\"noopener noreferrer nofollow\">Skia<\/a>, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0432\u0430\u0448 \u043b\u044e\u0431\u0438\u043c\u044b\u0439 Chrome. <\/p>\n<p>\u0422\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 <a href=\"https:\/\/github.com\/alialib\/alia\/tree\/main\/examples\" rel=\"noopener noreferrer nofollow\">showcase<\/a>:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/536\/cd3\/008\/536cd3008358cf5d19b9058e90410c56.png\" alt=\"\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0441\u0433\u043b\u0430\u0436\u0438\u0432\u0430\u043d\u0438\u0435\" title=\"\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0441\u0433\u043b\u0430\u0436\u0438\u0432\u0430\u043d\u0438\u0435\" width=\"920\" height=\"1080\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/536\/cd3\/008\/536cd3008358cf5d19b9058e90410c56.png\"\/><\/p>\n<div><figcaption>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0441\u0433\u043b\u0430\u0436\u0438\u0432\u0430\u043d\u0438\u0435<\/figcaption><\/div>\n<\/figure>\n<p>\u0422\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u00abHello, world\u00bb:<\/p>\n<pre><code class=\"cpp\">void greeting_ui(html::context ctx, duplex&lt;std::string&gt; name) {     html::p(ctx, \"What's your name?\");      \/\/ Allow the user to input their name.     html::input(ctx, name);      \/\/ If we have a name, greet the user.     alia_if(name != \"\")     {         html::p(ctx, \"Hello, \" + name + \"!\");     }     alia_end }<\/code><\/pre>\n<p>\u0412 \u0436\u0438\u0432\u0443\u044e \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 <a href=\"https:\/\/alia.dev\/#\/interactive-hello\" rel=\"noopener noreferrer nofollow\">\u0441\u0430\u0439\u0442\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430<\/a>.<\/p>\n<h3>Clay<\/h3>\n<p><a href=\"https:\/\/github.com\/nicbarker\/clay\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/nicbarker\/clay<\/a><\/p>\n<p>\u041f\u0440\u043e\u0435\u043a\u0442\u00a0\u2014 \u043d\u0435\u00a0\u0441\u043e\u0432\u0441\u0435\u043c \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 UI-\u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a, \u043d\u043e\u00a0\u0442\u043e\u0436\u0435 \u0434\u043e\u0441\u0442\u043e\u0438\u043d \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f:<\/p>\n<blockquote>\n<p><strong>Clay<\/strong> (short for <strong>C Layout<\/strong>) is a high performance 2D UI layout library.<\/p>\n<\/blockquote>\n<p>\u0427\u0438\u0441\u0442\u044b\u0439 \u0421 \u0440\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f.<\/p>\n<p>\u041f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u044e \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0444\u0438\u0447\u0438, \u043f\u043e \u043c\u0435\u0440\u0435 \u0447\u0442\u0435\u043d\u0438\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0440\u0430\u0441\u0442\u0430\u0442\u044c \u0443\u0434\u0438\u0432\u043b\u0435\u043d\u0438\u0435:<\/p>\n<ul>\n<li>\n<p>Single ~2k LOC <strong>clay.h<\/strong> file with <strong>zero<\/strong> dependencies (including no standard library)<\/p>\n<\/li>\n<li>\n<p>Wasm support: compile with clang to a 15kb uncompressed <strong>.wasm<\/strong> file for use in the browser<\/p>\n<\/li>\n<li>\n<p>Static arena based memory use with no malloc \/ free, and low total memory overhead (e.g. ~3.5mb for 8192 layout elements).<\/p>\n<\/li>\n<li>\n<p>React-like nested declarative syntax<\/p>\n<\/li>\n<\/ul>\n<p>\u041e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 <a href=\"https:\/\/www.nicbarker.com\/clay\" rel=\"noopener noreferrer nofollow\">\u0441\u0430\u0439\u0442<\/a> \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0442\u043e\u0436\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u044d\u0442\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/2d2\/5d9\/810\/2d25d981061884729fe6679727c2da27.png\" width=\"1236\" height=\"581\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2d2\/5d9\/810\/2d25d981061884729fe6679727c2da27.png\"\/><\/figure>\n<p>\u0422.\u0435. <a href=\"https:\/\/github.com\/nicbarker\/clay\/tree\/main\/examples\/clay-official-website\" rel=\"noopener noreferrer nofollow\">\u0441\u0430\u0439\u0442 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043d\u0430 \u0421<\/a>. \u0426\u0435\u043b\u0438\u043a\u043e\u043c, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432. <\/p>\n<blockquote>\n<p>\u0418 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e cmake, \u0434\u0430.<\/p>\n<\/blockquote>\n<p>\u0414\u0443\u043c\u0430\u044e \u0432\u0430\u043c \u0442\u0430\u043a\u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u043e\u0434 \u043d\u0430 \u0421 \u0432 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u0442\u0438\u043b\u0435:<\/p>\n<pre><code class=\"cpp\">\/\/ Parent element with 8px of padding CLAY({ .layout = { .padding = CLAY_PADDING_ALL(8) } }) {     \/\/ Child element 1     CLAY_TEXT(CLAY_STRING(\"Hello World\"), CLAY_TEXT_CONFIG({ .fontSize = 16 }));     \/\/ Child element 2 with red background     CLAY({ .backgroundColor = COLOR_RED }) {         \/\/ etc     } }<\/code><\/pre>\n<p>\u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0432\u0441\u044e \u0434\u0438\u0447\u044c, \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442, \u0442\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043e\u0434\u0438\u043d \u0438\u0437 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/40d\/3fb\/095\/40d3fb095c293e20763efcf26eb6e9f7.png\" width=\"2788\" height=\"1568\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/40d\/3fb\/095\/40d3fb095c293e20763efcf26eb6e9f7.png\"\/><\/figure>\n<p>\u041a\u00a0\u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043e\u0442\u00a0\u0430\u0432\u0442\u043e\u0440\u0430 \u0441\u0438\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0449\u0435, \u0432\u043e\u0442 \u0442\u0430\u043a \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u00abshowcase\u00bb, \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u0432\u00a0\u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430\u00a0Windows:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/4dc\/4a4\/6a1\/4dc4a46a117cf81c957c0ef0f24610be.png\" width=\"1573\" height=\"793\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/4dc\/4a4\/6a1\/4dc4a46a117cf81c957c0ef0f24610be.png\"\/><\/figure>\n<h3>ImGui<\/h3>\n<p><a href=\"https:\/\/github.com\/ocornut\/imgui\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/ocornut\/imgui<\/a><\/p>\n<p>\u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u0432 \u0438\u0433\u0440\u043e\u0432\u043e\u0439 \u0438\u043d\u0434\u0443\u0441\u0442\u0440\u0438\u0438, \u0441\u043e\u0431\u0440\u0430\u0432\u0448\u0438\u0439 64\u043a \u0437\u0432\u0435\u0437\u0434 \u043d\u0430 Github:<\/p>\n<blockquote>\n<p>Bloat-free Graphical User interface for C++ with minimal dependencies<\/p>\n<\/blockquote>\n<p>\u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u043d\u0430\u0432\u0435\u0440\u043d\u043e\u0435 \u0441\u0430\u043c\u044b\u0439 \u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 UI-\u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u0432, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043e\u0441\u0442\u0430\u0432\u0430\u044f\u0441\u044c \u0432 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u0430\u0445.<\/p>\n<p>\u0422\u0430\u043a \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0432 \u0440\u0430\u0431\u043e\u0442\u0435:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d9a\/f0a\/f53\/d9af0af53b3f4e745c1ace205d98246c.gif\" width=\"716\" height=\"491\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d9a\/f0a\/f53\/d9af0af53b3f4e745c1ace205d98246c.gif\"\/><\/figure>\n<p>\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u0434\u043b\u044f \u0434\u0435\u043c\u043e \u0432\u044b\u0448\u0435 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"cpp\">\/\/ Create a window called \"My First Tool\", with a menu bar. ImGui::Begin(\"My First Tool\", &amp;my_tool_active, ImGuiWindowFlags_MenuBar); if (ImGui::BeginMenuBar()) {     if (ImGui::BeginMenu(\"File\"))     {         if (ImGui::MenuItem(\"Open..\", \"Ctrl+O\")) { \/* Do stuff *\/ }         if (ImGui::MenuItem(\"Save\", \"Ctrl+S\"))   { \/* Do stuff *\/ }         if (ImGui::MenuItem(\"Close\", \"Ctrl+W\"))  { my_tool_active = false; }         ImGui::EndMenu();     }     ImGui::EndMenuBar(); }  \/\/ Edit a color stored as 4 floats ImGui::ColorEdit4(\"Color\", my_color);  \/\/ Generate samples and plot them float samples[100]; for (int n = 0; n &lt; 100; n++)     samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f); ImGui::PlotLines(\"Samples\", samples, 100);  \/\/ Display contents in a scrolling region ImGui::TextColored(ImVec4(1,1,0,1), \"Important Stuff\"); ImGui::BeginChild(\"Scrolling\"); for (int n = 0; n &lt; 50; n++)     ImGui::Text(\"%04d: Some text\", n); ImGui::EndChild(); ImGui::End();<\/code><\/pre>\n<p>\u041e\u0434\u043d\u0438\u043c\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u043c\u0438 \u0431\u0438\u043d\u0434\u0438\u043d\u0433\u0430\u043c\u0438 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0432\u0441\u0435\u0445 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0439:<\/p>\n<ul>\n<li>\n<p>Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL\/ES\/ES2, SDL_GPU, SDL_Renderer2\/3, Vulkan, WebGPU.<\/p>\n<\/li>\n<li>\n<p>Platforms: GLFW, SDL2\/SDL3, Win32, Glut, OSX, Android.<\/p>\n<\/li>\n<li>\n<p>Frameworks: Allegro5, Emscripten.<\/p>\n<\/li>\n<\/ul>\n<p>\u0410 \u0435\u0441\u0442\u044c \u0435\u0449\u0435 \u0438 <a href=\"https:\/\/github.com\/ocornut\/imgui\/wiki\/Bindings\" rel=\"noopener noreferrer nofollow\">\u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0435<\/a>, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0435 \u0432\u043d\u0435\u0448\u043d\u0438\u043c\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c\u0438.<\/p>\n<p>\u0421\u043a\u0440\u0438\u043d\u0448\u043e\u0442 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/eff\/de1\/5c1\/effde15c1a63cd1b64da62dd97600f78.png\" width=\"1920\" height=\"1080\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/eff\/de1\/5c1\/effde15c1a63cd1b64da62dd97600f78.png\"\/><\/figure>\n<p><a href=\"https:\/\/github.com\/ocornut\/imgui\/wiki\/Software-using-dear-imgui\" rel=\"noopener noreferrer nofollow\">\u0421\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432<\/a>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u0430\u043d\u043d\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0432\u043d\u0443\u0448\u0430\u0435\u0442 <s>\u0443\u0436\u0430\u0441<\/s> \u0443\u0432\u0430\u0436\u0435\u043d\u0438\u0435.<\/p>\n<p>\u041f\u043e\u043b\u043d\u044b\u0439 \u00abshowcase\u00bb \u0432\u00a0\u0440\u0430\u0431\u043e\u0442\u0435 \u043d\u0430\u00a0Linux:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c7b\/9cc\/141\/c7b9cc1412faad6abbc95890637f9e4f.gif\" width=\"800\" height=\"500\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c7b\/9cc\/141\/c7b9cc1412faad6abbc95890637f9e4f.gif\"\/><\/figure>\n<p>\u0412\u0441\u044f\u0447\u0435\u0441\u043a\u0438 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e.<\/p>\n<h3>ATG<\/h3>\n<p><a href=\"https:\/\/github.com\/ec429\/libatg\/tree\/master\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/ec429\/libatg\/tree\/master<\/a><\/p>\n<p>\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430 \u0442\u0435\u043c\u0443 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <strong>atg<\/strong>:<\/p>\n<pre><code>atg is a small, simple GUI library\/toolkit for SDL, providing things like  buttons and clickables to allow you to concentrate on your program logic.   atg is loosely based on Spiffy's GUI, though genericised.<\/code><\/pre>\n<p>\u041d\u0430\u043f\u0438\u0441\u0430\u043d \u043d\u0430 \u0447\u0438\u0441\u0442\u043e\u043c \u0421, \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0430 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 SDL, \u043e\u043d\u0430 \u0436\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c\u044e.<\/p>\n<p>\u041e\u0431\u044a\u0435\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430\u00a0\u2014 ~2.5\u043a \u0441\u0442\u0440\u043e\u043a.<\/p>\n<p>\u0414\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u0432 \u0440\u0430\u0431\u043e\u0442\u0435:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b2a\/eae\/468\/b2aeae468cb1d9379a921d7b81c31d5f.gif\" width=\"800\" height=\"500\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b2a\/eae\/468\/b2aeae468cb1d9379a921d7b81c31d5f.gif\"\/><\/figure>\n<p>\u0421\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u00a0\u043b\u044e\u0431\u043e\u0439 \u041e\u0421\u00a0\u0441\u00a0\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 SDL, \u0442\u0430\u043a\u0436\u0435 \u0435\u0441\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u044b\u0439 Makefile \u0434\u043b\u044f Windows (\u0441\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c mingw).<\/p>\n<h3>libUI<\/h3>\n<p><a href=\"https:\/\/github.com\/andlabs\/libui\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/andlabs\/libui<\/a><\/p>\n<p>\u0415\u0449\u0435 \u043e\u0434\u043d\u0430 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430, \u0441\u043e\u0431\u0440\u0430\u0432\u0448\u0430\u044f 10.8\u043a \u0437\u0432\u0435\u0437\u0434 \u043d\u0430 Github:<\/p>\n<blockquote>\n<p>Simple and portable (but not inflexible) GUI library in C that uses the native GUI technologies of each platform it supports.<\/p>\n<\/blockquote>\n<p>\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0432\u0435\u0434\u0435\u0442\u0441\u044f \u0441 2016 \u0433\u043e\u0434\u0430, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u043d\u0430 \u0447\u0438\u0441\u0442\u043e\u043c \u0421 (\u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c), \u0438\u043c\u0435\u0435\u0442 <a href=\"https:\/\/github.com\/andlabs\/libui?tab=readme-ov-file#language-bindings\" rel=\"noopener noreferrer nofollow\">\u043a\u0443\u0447\u0443 \u0431\u0438\u043d\u0434\u0438\u043d\u0433\u043e\u0432<\/a> \u0434\u043b\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u044f\u0437\u044b\u043a\u043e\u0432 \u0438 <a href=\"https:\/\/libui-ng.github.io\/libui-ng\/\" rel=\"noopener noreferrer nofollow\">\u0446\u0435\u043b\u044b\u0445<\/a> <a href=\"https:\/\/github.com\/petabyt\/libui-dev\" rel=\"noopener noreferrer nofollow\">\u0434\u0432\u0430<\/a> \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0445 \u0444\u043e\u0440\u043a\u0430, \u043f\u0440\u0438\u0447\u0435\u043c \u043e\u0434\u0438\u043d \u0444\u043e\u0440\u043a\u043d\u0443\u0442 \u0438\u0437 \u0434\u0440\u0443\u0433\u043e\u0433\u043e.<\/p>\n<p>\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0432\u0441\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u041e\u0421:<\/p>\n<ul>\n<li>\n<p>Windows: Windows Vista SP2 with Platform Update or newer<\/p>\n<\/li>\n<li>\n<p>Unix: GTK+ 3.10 or newer<\/p>\n<\/li>\n<li>\n<p>Mac OS X: OS X 10.8 or newer<\/p>\n<\/li>\n<\/ul>\n<p>\u0421\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043d\u043e\u0432\u043e\u043c\u043e\u0434\u043d\u044b\u0445 meson \u0438 ninja.<\/p>\n<blockquote>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u00ab\u043d\u0438\u0437\u0448\u0438\u0439 \u0441\u043b\u043e\u0439\u00bb \u0434\u043b\u044f \u043a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u043e\u0441\u0442\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0432\u043d\u0435\u0448\u043d\u0435 \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u0434 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439.<\/p>\n<\/blockquote>\n<p>\u0422\u0430\u043a \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0432 Windows:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/6bf\/0e6\/ec4\/6bf0e6ec4f86dd3a74fcd13b013deb8e.png\" width=\"693\" height=\"538\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6bf\/0e6\/ec4\/6bf0e6ec4f86dd3a74fcd13b013deb8e.png\"\/><\/figure>\n<p>\u0412 MacOS:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/f57\/27e\/571\/f5727e571ed6bcd14ae2e1f183b27202.png\" width=\"653\" height=\"557\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f57\/27e\/571\/f5727e571ed6bcd14ae2e1f183b27202.png\"\/><\/figure>\n<p>\u0418 \u043d\u0430\u043a\u043e\u043d\u0435\u0446 \u0442\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u00abshowcase\u00bb \u0432\u00a0\u043c\u043e\u0435\u043c Debian Linux:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/4a6\/05b\/ab9\/4a605bab97df8b92d05cd51594c93e6f.png\" width=\"694\" height=\"496\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/4a6\/05b\/ab9\/4a605bab97df8b92d05cd51594c93e6f.png\"\/><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c5a\/d88\/5c5\/c5ad885c56f4bb5a746ec303f38b7c7b.png\" width=\"694\" height=\"496\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c5a\/d88\/5c5\/c5ad885c56f4bb5a746ec303f38b7c7b.png\"\/><\/figure>\n<p>\u0422\u0435\u0441\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u043e \u0448\u0440\u0438\u0444\u0442\u0430\u043c\u0438:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/687\/bff\/891\/687bff891c65e0030b7724cc78077d79.png\" width=\"642\" height=\"337\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/687\/bff\/891\/687bff891c65e0030b7724cc78077d79.png\"\/><\/figure>\n<h3>Hikogui<\/h3>\n<p><a href=\"https:\/\/github.com\/hikogui\/hikogui\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/hikogui\/hikogui<\/a><\/p>\n<p>\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442:<\/p>\n<blockquote>\n<p>A portable, low latency, retained-mode GUI framework written in C++<\/p>\n<\/blockquote>\n<p>\u0446\u0435\u043b\u0438\u043a\u043e\u043c \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d \u043d\u0430 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 Windows-\u0434\u0435\u0441\u043a\u0442\u043e\u043f \u0441 3D-\u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435\u043c:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/840\/76d\/674\/84076d674b8481d646e4ca884d9fe6e6.png\" width=\"542\" height=\"135\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/840\/76d\/674\/84076d674b8481d646e4ca884d9fe6e6.png\"\/><\/figure>\n<p>\u041e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e Windows:<\/p>\n<ul>\n<li>\n<p>MSVC &#8212; Windows 10 (or newer) &#8212; x64<\/p>\n<\/li>\n<\/ul>\n<p><a href=\"https:\/\/github.com\/hikogui\/hikogui-hello-world\/blob\/main\/src\/main.cpp\" rel=\"noopener noreferrer nofollow\">\u041f\u0440\u0438\u043c\u0435\u0440<\/a> \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u044d\u0442\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438:<\/p>\n<pre><code class=\"cpp\">int hi_main(int argc, char *argv[]) {     observer&lt;int&gt; value = 0;      auto gui = hi::gui_system::make_unique();     auto &amp;window = gui.make_window(txt(\"Radio button example\"));     window.content().emplace&lt;label_widget&gt;(\"A1\", txt(\"radio buttons:\"));     window.content().emplace&lt;radio_button_widget&gt;(\"B1\", txt(\"one\"), value, 1);     window.content().emplace&lt;radio_button_widget&gt;(\"B2\", txt(\"two\"), value, 2);     window.content().emplace&lt;radio_button_widget&gt;(\"B3\", txt(\"three\"), value, 3);      return gui-&gt;loop(); }<\/code><\/pre>\n<p>\u0414\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u0432 \u0440\u0430\u0431\u043e\u0442\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0445 \u044d\u0442\u0443 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/016\/456\/a2d\/016456a2d3859b73327c89f020bccb73.gif\" width=\"590\" height=\"535\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/016\/456\/a2d\/016456a2d3859b73327c89f020bccb73.gif\"\/><\/figure>\n<h2>Visage<\/h2>\n<p><a href=\"https:\/\/github.com\/VitalAudio\/visage\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/VitalAudio\/visage<\/a><\/p>\n<p>\u041d\u0430\u043a\u043e\u043d\u0435\u0446 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043d\u0430 \u0441\u0435\u0433\u043e\u0434\u043d\u044f, \u043d\u043e \u0442\u043e\u0447\u043d\u043e \u043d\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0432 \u043f\u043b\u0430\u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0435\u043a\u0442:<\/p>\n<blockquote>\n<p><strong>Visage<\/strong> is a GPU-accelerated, cross-platform C++ library for native UI and 2D graphics. It merges the structure of a UI framework with the features of a creative graphics libraries.<\/p>\n<\/blockquote>\n<p>\u041e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043d\u0430 \u0441\u043f\u0435\u0446\u044d\u0444\u0444\u0435\u043a\u0442\u044b \u0438 3D, \u043d\u043e \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0447\u0435\u0441\u0442\u043d\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0432\u0441\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b:<\/p>\n<ul>\n<li>\n<p><strong>Windows<\/strong>: Direct3D11<\/p>\n<\/li>\n<li>\n<p><strong>MacOS<\/strong>: Metal<\/p>\n<\/li>\n<li>\n<p><strong>Linux<\/strong>: Vulkan<\/p>\n<\/li>\n<li>\n<p><strong>Web\/Emscripten<\/strong>: WebGL<\/p>\n<\/li>\n<\/ul>\n<p>\u0414\u0435\u043c\u043e \u0432 \u0440\u0430\u0431\u043e\u0442\u0435 \u043d\u0430 Linux, \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c Vulkan SDK:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/9bc\/07b\/b0a\/9bc07bb0a50c7c4cd139baadf805094e.png\" width=\"1280\" height=\"800\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/9bc\/07b\/b0a\/9bc07bb0a50c7c4cd139baadf805094e.png\"\/><\/figure>\n<p>\u0420\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u0448\u0435\u0439\u0434\u0435\u0440\u043e\u0432, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0439 \u044d\u0442\u0443 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/428\/ab5\/daf\/428ab5dafe807b019f89b594ebf93714.png\" width=\"1280\" height=\"773\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/428\/ab5\/daf\/428ab5dafe807b019f89b594ebf93714.png\"\/><\/figure>\n<p><a href=\"https:\/\/github.com\/VitalAudio\/visage\/blob\/main\/examples\/Basic\/basic.cpp\" rel=\"noopener noreferrer nofollow\">\u041f\u0440\u0438\u043c\u0435\u0440<\/a> \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430:<\/p>\n<pre><code class=\"cpp\">#include &lt;visage_app\/application_window.h&gt;  int main() {   visage::ApplicationWindow app;    app.onDraw() = [&amp;app](visage::Canvas&amp; canvas) {     canvas.setColor(0xffff00ff);     canvas.fill(0, 0, app.width(), app.height());   };    app.show(800, 600); \/\/ Opens as 800 x 600 pixel window   app.runEventLoop(); \/\/ Runs window events. Returns when window is closed.   return 0; }<\/code><\/pre>\n<h2>\u042d\u043f\u0438\u043b\u043e\u0433<\/h2>\n<p>\u041e\u0447\u0435\u043d\u044c \u043d\u0430\u0434\u0435\u044e\u0441\u044c, \u0447\u0442\u043e\u00a0\u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0439 \u043f\u043e\u0434\u0431\u043e\u0440\u043a\u0438 \u0445\u043e\u0442\u044c \u043a\u0442\u043e\u2011\u0442\u043e \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043d\u0435\u0442 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0435\u0441\u043c\u0435\u0448\u043d\u044b\u0435 \u0448\u0443\u0442\u043a\u0438 \u043f\u0440\u043e \u00ab\u0434\u0432\u0430 \u0441\u0442\u0443\u043b\u0430\u00bb Gtk \u0438 Qt \u0438 \u043f\u043e\u0439\u043c\u0435\u0442, \u0447\u0442\u043e\u00a0\u0432\u044b\u0431\u043e\u0440 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0434\u043b\u044f\u00a0\u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0448\u0438\u0440\u0435 \u0438 \u0431\u043e\u0433\u0430\u0447\u0435.<\/p>\n<p>\u041d\u0443 \u0430\u00a0\u0435\u0441\u043b\u0438 \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u0442\u0435 \u0441\u0432\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0442, \u0434\u0443\u043c\u0430\u044e \u043f\u043e\u0434\u0431\u043e\u0440\u043a\u0430 \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0439 \u0438 \u0447\u0442\u043e\u2011\u0442\u043e \u0438\u0437\u00a0\u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0433\u043e \u0432\u044b\u0448\u0435 \u0432\u0430\u043c \u0442\u043e\u0447\u043d\u043e \u043f\u043e\u0434\u043e\u0439\u0434\u0435\u0442\u00a0\u2014 \u043d\u0435\u00a0\u043d\u0430\u0434\u043e \u0441\u0440\u0430\u0437\u0443 \u0442\u0430\u0449\u0438\u0442\u044c \u0432\u043d\u0443\u0442\u0440\u044c \u0433\u0440\u043e\u0431\u043e\u0432\u0443\u044e \u043f\u043b\u0438\u0442\u0443 \u0441\u00a0\u043d\u0430\u0434\u043f\u0438\u0441\u044c\u044e \u00abQt\u00bb, \u043f\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u0439\u0442\u0435 \u0445\u043e\u0442\u044f-\u0431\u044b \u043d\u0430 \u0441\u0442\u0430\u0434\u0438\u0438 \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u0430 \u0432 \u0441\u0432\u043e\u0435 \u0443\u0434\u043e\u0432\u043e\u043b\u044c\u0441\u0442\u0432\u0438\u0435.<\/p>\n<p><a href=\"https:\/\/blog.0x08.ru\/another-ui\" rel=\"noopener noreferrer nofollow\">\u041e\u0440\u0438\u0433\u0438\u043d\u0430\u043b<\/a> \u0441\u0442\u0430\u0442\u044c\u0438 \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e \u0432 \u043d\u0430\u0448\u0435\u043c \u0431\u043b\u043e\u0433\u0435.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/894442\/\"> https:\/\/habr.com\/ru\/articles\/894442\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0421\u043e\u0431\u0440\u0430\u043b \u0434\u043b\u044f \u0432\u0430\u0441 \u043f\u043e\u0434\u0431\u043e\u0440\u043a\u0443 \u0440\u0435\u0434\u043a\u0438\u0445, \u043d\u0435\u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u0438\u00a0\u043c\u0430\u043b\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0445 UI-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u00a0\u2014 \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432 \u0432\u00a0\u0438\u0433\u0440\u0430\u0445, \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0445 \u0438\u00a0\u0434\u0435\u0441\u043a\u0442\u043e\u043f\u043d\u043e\u043c\u00a0\u041f\u041e.<\/p>\n<figure class=\"full-width\"><\/figure>\n<h3>\u041b\u0438\u043a\u0431\u0435\u0437<\/h3>\n<p>\u0421\u0442\u043e\u0438\u0442 \u0437\u0430\u0434\u0430\u0442\u044c \u043d\u0430 \u043b\u044e\u0431\u043e\u043c \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0444\u043e\u0440\u0443\u043c\u0435 \u0432\u043f\u043e\u043b\u043d\u0435 \u043d\u0435\u0432\u0438\u043d\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441:<\/p>\n<blockquote>\n<p>\u043a\u0430\u043a\u0443\u044e UI-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443\/\u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0434\u043b\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430?<\/p>\n<\/blockquote>\n<p>\u0438 \u0440\u0430\u0437\u0432\u0435\u0440\u0437\u043d\u0443\u0442\u0441\u044f \u043d\u0430\u0442\u0443\u0440\u0430\u043b\u044c\u043d\u043e \u0431\u0435\u0437\u0434\u043d\u044b \u0430\u0434\u0430.<\/p>\n<p>\u0418\u0437\u00a0\u043f\u043e\u0442\u043e\u043a\u0430 \u0438\u0441\u0442\u043e\u0440\u0433\u0430\u0435\u043c\u044b\u0445 \u0433\u043e\u0432\u0435\u043d, \u0441\u00a0\u0431\u043e\u043b\u044c\u0448\u0438\u043c \u0442\u0440\u0443\u0434\u043e\u043c \u0438 \u043e\u0442\u0432\u043b\u0435\u043a\u0430\u044f\u0441\u044c \u043d\u0430 \u043d\u0435\u043d\u0443\u0436\u043d\u044b\u0435\u00a0\u0432\u043e\u043f\u0440\u043e\u0441\u044b \u0440\u043e\u0434\u043e\u0441\u043b\u043e\u0432\u043d\u043e\u0439, \u043f\u043e\u043b\u043e\u0432\u043e\u0439 \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0438\u00a0\u043f\u043e\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0440\u0438\u0441\u0442\u0440\u0430\u0441\u0442\u0438\u0439 \u0432\u0441\u0435 \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u043e\u0432 \u0434\u0438\u0441\u043a\u0443\u0441\u0441\u0438\u0438, \u0432\u044b \u0443\u0437\u043d\u0430\u0435\u0442\u0435 \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u0434\u0432\u0430 <s>\u0441\u0442\u0443\u043b\u0430<\/s> \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430: <a href=\"https:\/\/www.qt.io\/product\/framework\" rel=\"noopener noreferrer nofollow\">QT<\/a>\u00a0\u0438\u00a0<a href=\"https:\/\/www.gtk.org\/\" rel=\"noopener noreferrer nofollow\">GTK<\/a>. <\/p>\n<blockquote>\n<p>\u0418 \u0440\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f \u0432\u0435\u0431-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u0435\u043f\u0435\u0440\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0434\u043b\u044f \u043b\u044e\u0431\u044b\u0445 \u0437\u0430\u0434\u0430\u0447.<\/p>\n<\/blockquote>\n<p>\u0415\u0441\u043b\u0438 \u0432\u043e\u043f\u0440\u043e\u0441\u00a0\u0431\u044b\u043b \u0437\u0430\u0434\u0430\u043d \u043d\u0430\u00a0\u0444\u043e\u0440\u0443\u043c\u0435, \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u043d\u043e\u043c Windows\u00a0\u2014 \u0432\u0441\u0435 \u0431\u0443\u0434\u0435\u0442 \u0435\u0449\u0435 \u043f\u0435\u0447\u0430\u043b\u044c\u043d\u0435\u0435 \u0438 \u0434\u0430\u043b\u044c\u0448\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e <a href=\"https:\/\/learn.microsoft.com\/en-us\/dotnet\/desktop\/wpf\/?view=netdesktop-9.0\" rel=\"noopener noreferrer nofollow\">WPF<\/a> \u0434\u0435\u043b\u043e \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u043d\u0435\u00a0\u0437\u0430\u0439\u0434\u0435\u0442. \u041d\u0443\u00a0\u043c\u043e\u0436\u0435\u0442 \u043f\u0430\u0440\u0430 \u043e\u043f\u044b\u0442\u043d\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0435\u0449\u0435 \u0432\u0441\u043f\u043e\u043c\u043d\u044f\u0442 \u043f\u0440\u043e \u00ab\u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0442\u0430\u043c\u00bb WinAPI \u0438\u043b\u0438\u00a0MFC.<\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u043e\u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0431\u0443\u0434\u0435\u0442 \u0443\u00a0\u043b\u044e\u0431\u0438\u0442\u0435\u043b\u0435\u0439 Mac, \u0433\u0434\u0435 \u0432\u0430\u043c \u043f\u043e\u0441\u043e\u0432\u0435\u0442\u0443\u044e\u0442 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e\u0435 \u00ab\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 Swift\u00bb, \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0441\u0442\u0443\u043f\u044f\u0442 \u0438 \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0435\u0441\u044f \u043d\u0430\u00a0\u0441\u0432\u0435\u0442\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 Delphi, \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0432 \u0447\u0442\u043e \u00abUI \u044d\u0442\u043e Delphi\u00bb, \u0430\u00a0\u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435\u00a0\u2014 \u043e\u0442\u00a0\u043b\u0443\u043a\u0430\u0432\u043e\u0433\u043e.<\/p>\n<p>\u041d\u0435\u00a0\u0442\u043e\u00a0\u0447\u0442\u043e\u0431\u044b \u0432\u0441\u0435 \u0441\u043e\u0432\u0435\u0442\u0443\u044e\u0449\u0438\u0435 \u0431\u044b\u043b\u0438 \u043d\u0430\u00a0\u0437\u0430\u0440\u043f\u043b\u0430\u0442\u0435 \u0443\u00a0\u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0446\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438 \u0441\u0442\u043e\u044f\u0442 \u0437\u0430\u00a0\u043a\u043b\u044e\u0447\u0435\u0432\u044b\u043c\u0438 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f\u043c\u0438, \u043f\u0440\u043e\u0441\u0442\u043e \u043b\u044e\u0434\u0438 \u0432\u00a0\u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0441\u0432\u043e\u0435\u0439 \u043c\u0430\u0441\u0441\u0435\u00a0\u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043b\u044e\u0431\u043e\u0437\u043d\u0430\u0442\u0435\u043b\u044c\u043d\u044b.<\/p>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435\u00a0\u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c, \u0447\u0442\u043e\u00a0\u043a\u043d\u043e\u043f\u043a\u0438 \u0438 \u0444\u043e\u0440\u043c\u044b \u043c\u043e\u0436\u0435\u0442 \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043a\u0440\u043e\u0448\u0435\u0447\u043d\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043d\u0430 2\u043a \u0441\u0442\u0440\u043e\u043a \u043a\u043e\u0434\u0430, \u043d\u0435\u00a0\u0442\u0440\u0435\u0431\u0443\u044e\u0449\u0430\u044f \u043f\u0430\u0440\u044b \u043b\u0435\u0442 \u043d\u0430\u00a0\u0441\u0432\u043e\u0435 \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0435. <\/p>\n<p>\u0418\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a\u0438\u0435 \u0443\u0434\u0438\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u044f \u0432\u0430\u043c \u0441\u0435\u0439\u0447\u0430\u0441 \u0438 \u043f\u043e\u043a\u0430\u0436\u0443.<\/p>\n<h3>\u0422\u0435\u0441\u0442\u043e\u0432\u0430\u044f \u0441\u0440\u0435\u0434\u0430<\/h3>\n<p>\u0412\u00a0\u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0439 \u0441\u0440\u0435\u0434\u044b \u0432\u00a0\u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u043b Debian Linux 12, \u0441\u0431\u043e\u0440\u043a\u0430 \u0438\u00a0\u0437\u0430\u043f\u0443\u0441\u043a \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043b\u0438\u0441\u044c \u043d\u0430\u00a0\u043e\u0447\u0435\u043d\u044c \u0441\u043b\u0430\u0431\u043e\u043c \u0438\u00a0\u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0435\u043c \u043d\u043e\u0443\u0442\u0431\u0443\u043a\u0435\u00a0\u2014 \u0432\u00a0\u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0441 Windows-\u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u043e\u0439 \u0431\u044b\u043b\u0438 \u0441\u043e\u0431\u0440\u0430\u043d\u044b \u0438 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u044b \u043d\u0430 Windows 11.<\/p>\n<blockquote>\n<p>\u0411\u043e\u043b\u044c\u0448\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0438\u0437\u00a0\u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0445 \u043d\u0438\u0436\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0438\u00a0\u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u0432\u00a0\u2014 \u043a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u044b\u0435 \u0438\u00a0\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442 \u0432\u0441\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f: Linux, Windows, Mac.<\/p>\n<\/blockquote>\n<p>\u0410\u00a0\u0441\u00a0\u0443\u0447\u0435\u0442\u043e\u043c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432\u00a0\u2014 \u0432\u043e\u043f\u0440\u043e\u0441 \u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439.<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u041e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442<\/figcaption><\/div>\n<\/figure>\n<h2>Nuklear<\/h2>\n<p><a href=\"https:\/\/github.com\/Immediate-Mode-UI\/Nuklear\/tree\/master\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/Immediate-Mode-UI\/Nuklear\/tree\/master<\/a><\/p>\n<p>\u0421\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u044b \u0438\u0437 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0445 \u044d\u0442\u0443 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0435\u0440\u0446\u0430\u0442\u044c \u043d\u0430 \u0437\u0430\u0433\u043b\u0430\u0432\u043d\u043e\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435 \u043a \u0441\u0442\u0430\u0442\u044c\u0435, \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u0438\u0441\u0430\u043d\u0438\u0435:<\/p>\n<blockquote>\n<p>A single-header ANSI C immediate mode cross-platform GUI library<\/p>\n<\/blockquote>\n<p><strong>18\u043a<\/strong> \u0441\u0442\u0440\u043e\u043a \u043a\u043e\u0434\u0430 \u043d\u0430 C, \u0447\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u0434\u043b\u044f \u0442\u0430\u043a\u043e\u0433\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430.<\/p>\n<p>\u0410\u0432\u0442\u043e\u0440\u044b \u043d\u0435\u00a0\u0432\u0440\u0443\u0442 \u0438\u00a0\u043f\u043e\u00a0\u043f\u043e\u0432\u043e\u0434\u0443 \u00absingle-header\u00bb, \u043d\u043e\u00a0\u0435\u0441\u0442\u044c \u043d\u044e\u0430\u043d\u0441:<\/p>\n<blockquote>\n<p>\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0432\u0435\u0434\u0435\u0442\u0441\u044f \u0432\u00a0\u0440\u0430\u0437\u043d\u044b\u0445 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u0430\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u0430\u0442\u0435\u043c \u00ab\u0443\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u044e\u0442\u0441\u044f\u00bb \u0432\u00a0\u043e\u0434\u0438\u043d \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a <a href=\"https:\/\/github.com\/Immediate-Mode-UI\/Nuklear\/blob\/master\/nuklear.h\" rel=\"noopener noreferrer nofollow\">nuklear.h<\/a><\/p>\n<\/blockquote>\n<p>\u041e\u0441\u0442\u043e\u0440\u043e\u0436\u043d\u043e, \u043f\u043e\u00a0\u0441\u0441\u044b\u043b\u043a\u0435 \u0432\u044b\u0448\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0439 .h \u0444\u0430\u0439\u043b \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u0431\u043e\u043b\u044c\u0448\u0435 1 \u041c\u0431\u00a0\u2014 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0434\u0432\u0435\u0441\u0438\u0442\u044c \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u043f\u0440\u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0438.<\/p>\n<p>\u0426\u0438\u0442\u0438\u0440\u0443\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e:<\/p>\n<blockquote>\n<p>It was designed as a simple embeddable user interface for application and does not have any dependencies, a default render backend or OS window\/input handling but instead provides a highly modular, library-based approach<\/p>\n<\/blockquote>\n<p>\u0414\u0443\u043c\u0430\u044e \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u043f\u0440\u0438 \u0442\u0430\u043a\u043e\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u0435 \u0447\u0430\u0441\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0433\u043e \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430 \u043f\u0435\u0440\u0435\u0441\u0430\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u00a0\u0448\u0435\u0438 \u0430\u0432\u0442\u043e\u0440\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043d\u0430\u00a0\u0432\u0430\u0448\u0443 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e\u00a0\u2014 \u0440\u0435\u0447\u044c \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043f\u0440\u043e \u00ab\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0431\u0435\u043a\u044d\u043d\u0434\u044b\u00bb. <\/p>\n<p>\u041a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432\u043d\u0435\u0437\u0430\u043f\u043d\u043e \u043c\u043d\u043e\u0433\u043e:<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u0415\u0441\u043b\u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0435\u0441\u044c \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0439 &#8212; \u0442\u0443\u0442 \u0431\u0443\u0434\u0443\u0442 \u043c\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u043a\u043e\u043c\u044b\u0445 \u0432\u0430\u043c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0439<\/figcaption><\/div>\n<\/figure>\n<p>\u0418\u0437 \u0445\u043e\u0440\u043e\u0448\u0435\u0433\u043e:<\/p>\n<blockquote>\n<p>\u0432\u0441\u0435 \u0447\u0442\u043e \u0432\u0430\u043c \u044f\u0432\u043d\u043e \u043d\u0435 \u043d\u0430\u0434\u043e \u0432 \u043f\u0440\u043e\u0435\u043a\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u0442.<\/p>\n<\/blockquote>\n<p>\u0418\u0437 \u043f\u043b\u043e\u0445\u043e\u0433\u043e:<\/p>\n<blockquote>\n<p>\u0432\u0441\u0435 \u0447\u0442\u043e \u0432\u044b\u00a0\u044f\u0432\u043d\u043e \u043d\u0435\u00a0\u0434\u043e\u0431\u0430\u0432\u0438\u0442\u0435\u00a0\u2014 \u0432\u00a0\u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043d\u0435\u00a0\u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f.<\/p>\n<\/blockquote>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0434\u0430\u0436\u0435 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u00abfallback mode\u00bb\u00a0\u2014 \u043e\u0442\u043a\u0430\u0442 \u043d\u0430\u00a0X11-\u0431\u0435\u043a\u044d\u043d\u0434 \u043f\u0440\u0438 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 3D-\u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f \u043d\u0435\u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443.<\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f (\u0431\u0435\u0437 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432):<\/p>\n<pre><code class=\"cpp\">\/* init gui state *\/ struct nk_context ctx; nk_init_fixed(&amp;ctx, calloc(1, MAX_MEMORY), MAX_MEMORY, &amp;font);  enum {EASY, HARD}; static int op = EASY; static float value = 0.6f; static int i =  20;  if (nk_begin(&amp;ctx, \"Show\", nk_rect(50, 50, 220, 220),     NK_WINDOW_BORDER|NK_WINDOW_MOVABLE|NK_WINDOW_CLOSABLE)) {     \/* fixed widget pixel width *\/     nk_layout_row_static(&amp;ctx, 30, 80, 1);     if (nk_button_label(&amp;ctx, \"button\")) {         \/* event handling *\/     }      \/* fixed widget window ratio width *\/     nk_layout_row_dynamic(&amp;ctx, 30, 2);     if (nk_option_label(&amp;ctx, \"easy\", op == EASY)) op = EASY;     if (nk_option_label(&amp;ctx, \"hard\", op == HARD)) op = HARD;      \/* custom widget pixel width *\/     nk_layout_row_begin(&amp;ctx, NK_STATIC, 30, 2);     {         nk_layout_row_push(&amp;ctx, 50);         nk_label(&amp;ctx, \"Volume:\", NK_TEXT_LEFT);         nk_layout_row_push(&amp;ctx, 110);         nk_slider_float(&amp;ctx, 0, &amp;value, 1.0f, 0.1f);     }     nk_layout_row_end(&amp;ctx); } nk_end(&amp;ctx);<\/code><\/pre>\n<p>\u0412\u043e\u0442 \u0442\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0435\u0433\u043e showcase \u043d\u0430 Linux \u0441 X11-\u0431\u0435\u043a\u044d\u043d\u0434\u043e\u043c \u0432 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0438:<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u0414\u0435\u043c\u043e-\u043f\u0440\u043e\u0435\u043a\u0442\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u043f\u043e\u0434 Windows \u0442\u0430\u043a \u0438\u00a0\u043f\u043e\u0434 Linux.<\/p>\n<blockquote>\n<p>\u041a\u00a0\u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e \u0432\u0435\u0437\u0434\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u0430\u044f \u0441\u0431\u043e\u0440\u043a\u0430 \u0438\u00a0\u00ab\u0443\u043f\u0430\u043a\u043e\u0432\u043a\u0430\u00bb \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u043d\u0430\u00a0Python\u00a0\u2014 \u0432\u0441\u0435 \u044d\u0442\u043e \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u043a\u0440\u0443\u0447\u0438\u0432\u0430\u0442\u044c, \u043f\u043e-\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043d\u0435\u00a0\u0441\u043e\u0431\u0435\u0440\u0435\u0442\u0441\u044f.<\/p>\n<\/blockquote>\n<p>\u0427\u0442\u043e \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f, \u043c\u043d\u0435 \u043d\u0435\u00a0\u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u0439\u0442\u0438 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f Nuklear \u0434\u043b\u044f \u0438\u0433\u0440 \u0441\u0435\u0440\u0438\u0438 Call of\u00a0Duty, \u043e\u0442\u043a\u0443\u0434\u0430 \u0431\u044b\u043b \u0432\u0437\u044f\u0442 \u0434\u0430\u043d\u043d\u044b\u0439 \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442:<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u0422\u0430\u043a \u0447\u0442\u043e \u043e\u0441\u0442\u0430\u0432\u0438\u043c \u044d\u0442\u043e\u0442 \u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 \u0441\u043e\u0432\u0435\u0441\u0442\u0438 \u0430\u0432\u0442\u043e\u0440\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438.<\/p>\n<p>\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043f\u0440\u043e\u0435\u043a\u0442, \u0430\u0432\u0442\u043e\u0440\u044b \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u043e \u0443\u0433\u043e\u0440\u0435\u043b\u0438 \u043f\u043e \u0441\u043b\u043e\u0436\u043d\u044b\u043c \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u044f\u043c:<\/p>\n<figure class=\"full-width\"><\/figure>\n<h2>Elements C++ GUI library<\/h2>\n<p><a href=\"https:\/\/github.com\/cycfi\/elements\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/cycfi\/elements<\/a><\/p>\n<p>\u0421\u0435\u0439 \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u043a\u0443\u0434\u0430 \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442 \u0432\u00a0\u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u043f\u043b\u0430\u043d\u0435:<\/p>\n<blockquote>\n<p>Elements is a lightweight, fine-grained, resolution-independent, extremely modular GUI library. The library is written using modern C++20 language features<\/p>\n<\/blockquote>\n<p>\u041d\u0430 C++20, \u0435\u0449\u0435 \u0438 \u0441\u043e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c <a href=\"https:\/\/cycfi.github.io\/elements\/elements\/aspects.html\" rel=\"noopener noreferrer nofollow\">DSL \u0434\u043b\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432<\/a>:<\/p>\n<blockquote>\n<p>It has a declarative interface with a sensible and easy-to-use Domain Specific Embedded Languages (DSEL) syntax for constructing the GUI elements. A declarative description of the GUI is written exclusively in C++, and therefore, there is no need for an external visual GUI editor or code generator.<\/p>\n<\/blockquote>\n<p>\u0412\u043e\u0442 \u0442\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442<a href=\"https:\/\/github.com\/cycfi\/elements\/blob\/master\/examples\/hello_universe\/main.cpp\" rel=\"noopener noreferrer nofollow\"> \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434<\/a> \u00abHello word\u00bb \u0441\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u044d\u0442\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438:<\/p>\n<pre><code class=\"cpp\">#include &lt;elements.hpp&gt;  using namespace cycfi::elements;  int main(int argc, char* argv[]) {    app _app(\"Hello Universe\");    window _win(_app.name());    _win.on_close = [&amp;_app]() { _app.stop(); };    view view_(_win);    view_.content(       scroller(image{\"space.jpg\"})    );    _app.run();    return 0; }<\/code><\/pre>\n<p>\u0421\u0442\u043e\u0438\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c \u0447\u0442\u043e \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043d\u0435\u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0443\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 <a href=\"https:\/\/www.cairographics.org\/\" rel=\"noopener noreferrer nofollow\">Cairo<\/a> \u0438 \u0435\u0449\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439: <\/p>\n<blockquote>\n<p>pkg-config, fontconfig, freetype2, bzip2,  expat,  zlib, libpng,  libwebp<\/p>\n<\/blockquote>\n<p>\u0422\u0430\u043a \u0447\u0442\u043e \u0441\u0431\u043e\u0440\u043a\u0430 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u043b\u043e\u0436\u043d\u0430\u044f, \u0437\u0430\u0442\u043e \u0432\u043f\u043e\u043b\u043d\u0435 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e <a href=\"https:\/\/cycfi.github.io\/elements\/elements\/setup.html\" rel=\"noopener noreferrer nofollow\">\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f<\/a> Windows, MacOS \u0438 Linux.<\/p>\n<p>\u0414\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0432 \u0440\u0430\u0431\u043e\u0442\u0435 \u043d\u0430 Linux:<\/p>\n<figure class=\"full-width\"><\/figure>\n<h3>GUILite.h<\/h3>\n<p><a href=\"https:\/\/github.com\/idea4good\/GuiLite\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/idea4good\/GuiLite<\/a><\/p>\n<p>\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 (7.5\u043a \u0437\u0432\u0435\u0437\u0434), \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u044b\u0439 \u0430\u0432\u0442\u043e\u0440\u043e\u043c \u043a\u0430\u043a:<\/p>\n<blockquote>\n<p>The smallest header-only GUI library (4 KLOC) for all platforms.<\/p>\n<\/blockquote>\n<p>\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0435\u043d \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043d\u0430\u0431\u043e\u0440\u043e\u043c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c: <\/p>\n<blockquote>\n<p>iOS\/macOS\/WatchOS, Android, Linux, Windows, RTOS&#8230; or <strong>MCU without OS<\/strong><\/p>\n<\/blockquote>\n<p>\u0414\u0430, \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0430 \u0432\u00a0\u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0434\u043b\u044f\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430 \u00ab\u0433\u043e\u043b\u043e\u043c\u00a0\u0436\u0435\u043b\u0435\u0437\u0435\u00bb:<\/p>\n<figure class=\"\"><\/figure>\n<p>\u0412 \u0440\u0430\u0431\u043e\u0442\u0435 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0434\u0435\u0441\u043a\u0442\u043e\u043f-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 Linux \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0430\u043a-\u0442\u043e \u0442\u0430\u043a: <\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u043d\u0443\u044e \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u0443<\/figcaption><\/div>\n<\/figure>\n<p>\u0412\u0441\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 <a href=\"https:\/\/github.com\/idea4good\/GuiLite\/blob\/master\/GuiLite.h\" rel=\"noopener noreferrer nofollow\">\u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435<\/a>, \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0432\u044b\u043d\u0435\u0441\u0435\u043d\u044b \u0432 <a href=\"https:\/\/github.com\/idea4good\/GuiLiteSamples\" rel=\"noopener noreferrer nofollow\">\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439<\/a>.<\/p>\n<p>\u0414\u0443\u043c\u0430\u044e \u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u0442\u044c, \u0447\u0442\u043e \u0438\u0437-\u0437\u0430 \u0442\u0430\u043a\u043e\u0439 \u043c\u0438\u043d\u0438\u0430\u0442\u044e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043b\u043e\u0433\u0438\u043a\u0438 \u0432\u044b\u043d\u0435\u0441\u0435\u043d\u0430 \u0432 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0438\u043c\u0435\u044e\u0442 \u043a\u043e\u043d\u0441\u043a\u0438\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u0438 \u0441\u043b\u043e\u0436\u043d\u0443\u044e \u0441\u0431\u043e\u0440\u043a\u0443:<\/p>\n<figure class=\"full-width\"><\/figure>\n<h3>MicroUI<\/h3>\n<p><a href=\"https:\/\/github.com\/rxi\/microui\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/rxi\/microui<\/a><\/p>\n<p>\u0415\u0449\u0435 \u043e\u0434\u0438\u043d \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 (3.8\u043a \u0437\u0432\u0435\u0437\u0434), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0442\u043e\u0438\u0442 \u0432\u0437\u044f\u0442\u044c \u043d\u0430 \u0437\u0430\u043c\u0435\u0442\u043a\u0443:<\/p>\n<blockquote>\n<p>A tiny, portable, immediate-mode UI library written in ANSI C<\/p>\n<\/blockquote>\n<p>\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u00abtiny\u00bb, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432\u0441\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 ~ <strong>1.1<\/strong>\u043a \u0441\u0442\u0440\u043e\u043a \u043d\u0430\u00a0\u0421\u00a0\u0432 \u0432\u0438\u0434\u0435 \u0434\u0432\u0443\u0445 \u0444\u0430\u0439\u043b\u043e\u0432, \u0430\u00a0\u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c\u00a0\u2014 SDL2:<\/p>\n<pre><code class=\"bash\">CFLAGS=\"-I..\/src -Wall -std=c11 -pedantic `sdl2-config --libs` $GLFLAG -lm -O3 -g\" gcc main.c renderer.c ..\/src\/microui.c $CFLAGS<\/code><\/pre>\n<p>Showcase \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u0438 \u0432 <a href=\"https:\/\/floooh.github.io\/sokol-html5\/sgl-microui-sapp.html\" rel=\"noopener noreferrer nofollow\">\u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435<\/a>:<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f (\u0431\u0435\u0437 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432):<\/p>\n<pre><code class=\"cpp\">if (mu_begin_window(ctx, \"My Window\", mu_rect(10, 10, 140, 86))) {   mu_layout_row(ctx, 2, (int[]) { 60, -1 }, 0);   mu_label(ctx, \"First:\");   if (mu_button(ctx, \"Button1\")) {     printf(\"Button1 pressed\\n\");   }   mu_label(ctx, \"Second:\");   if (mu_button(ctx, \"Button2\")) {     mu_open_popup(ctx, \"My Popup\");   }   if (mu_begin_popup(ctx, \"My Popup\")) {     mu_label(ctx, \"Hello world!\");     mu_end_popup(ctx);   }   mu_end_window(ctx); }<\/code><\/pre>\n<p>\u0415\u0441\u0442\u044c \u0434\u0430\u0436\u0435 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u0430\u044f <a href=\"https:\/\/github.com\/rxi\/microui\/blob\/master\/doc\/usage.md\" rel=\"noopener noreferrer nofollow\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f<\/a>. <\/p>\n<p>\u0412 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0438 \u043d\u0430 Linux \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u044f\u044e\u0449\u0435:<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u041e\u0447\u0435\u043d\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430\u044f \u0448\u0442\u0443\u043a\u0430, \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e.<\/p>\n<h3>Alia<\/h3>\n<p><a href=\"https:\/\/github.com\/alialib\/alia\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/alialib\/alia<\/a><\/p>\n<p>\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442, \u0441\u043a\u0440\u043e\u043c\u043d\u043e \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u044b\u0439 \u043a\u0430\u043a:<\/p>\n<blockquote>\n<p>a declarative UI library for C++<\/p>\n<\/blockquote>\n<p>\u0432\u044b\u043d\u043e\u0441\u0438\u0442 \u043c\u043e\u0437\u0433 \u043d\u0435\u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c \u043e\u0434\u043d\u043e\u0439 \u0444\u0440\u0430\u0437\u043e\u0439:<\/p>\n<blockquote>\n<p>alia currently targets the web.<\/p>\n<\/blockquote>\n<p>\u042d\u0442\u043e \u043d\u0430\u00a0\u043c\u043e\u0435\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u0435\u0440\u0432\u044b\u0439 UI-\u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u043d\u0430\u00a0C++, \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0435 \u0446\u0435\u043b\u0435\u0432\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e\u00a0\u2014 \u0432\u0435\u0431.<\/p>\n<p>\u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0437\u0430\u044f\u0432\u043b\u0435\u043d\u043d\u0443\u044e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 Linux, \u0441\u0431\u043e\u0440\u043a\u0430 \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u0441\u043b\u043e\u043c\u0430\u043d\u0430, \u0442\u0430\u043a \u0447\u0442\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437-\u043f\u043e\u0434 Windows 11.<\/p>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0434\u0432\u0438\u0436\u043a\u0430 \u0434\u043b\u044f \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 <a href=\"https:\/\/skia.org\/\" rel=\"noopener noreferrer nofollow\">Skia<\/a>, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0432\u0430\u0448 \u043b\u044e\u0431\u0438\u043c\u044b\u0439 Chrome. <\/p>\n<p>\u0422\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 <a href=\"https:\/\/github.com\/alialib\/alia\/tree\/main\/examples\" rel=\"noopener noreferrer nofollow\">showcase<\/a>:<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0441\u0433\u043b\u0430\u0436\u0438\u0432\u0430\u043d\u0438\u0435<\/figcaption><\/div>\n<\/figure>\n<p>\u0422\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u00abHello, world\u00bb:<\/p>\n<pre><code class=\"cpp\">void greeting_ui(html::context ctx, duplex&lt;std::string&gt; name) {     html::p(ctx, \"What's your name?\");      \/\/ Allow the user to input their name.     html::input(ctx, name);      \/\/ If we have a name, greet the user.     alia_if(name != \"\")     {         html::p(ctx, \"Hello, \" + name + \"!\");     }     alia_end }<\/code><\/pre>\n<p>\u0412 \u0436\u0438\u0432\u0443\u044e \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 <a href=\"https:\/\/alia.dev\/#\/interactive-hello\" rel=\"noopener noreferrer nofollow\">\u0441\u0430\u0439\u0442\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430<\/a>.<\/p>\n<h3>Clay<\/h3>\n<p><a href=\"https:\/\/github.com\/nicbarker\/clay\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/nicbarker\/clay<\/a><\/p>\n<p>\u041f\u0440\u043e\u0435\u043a\u0442\u00a0\u2014 \u043d\u0435\u00a0\u0441\u043e\u0432\u0441\u0435\u043c \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 UI-\u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a, \u043d\u043e\u00a0\u0442\u043e\u0436\u0435 \u0434\u043e\u0441\u0442\u043e\u0438\u043d \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f:<\/p>\n<blockquote>\n<p><strong>Clay<\/strong> (short for <strong>C Layout<\/strong>) is a high performance 2D UI layout library.<\/p>\n<\/blockquote>\n<p>\u0427\u0438\u0441\u0442\u044b\u0439 \u0421 \u0440\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f.<\/p>\n<p>\u041f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u044e \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0444\u0438\u0447\u0438, \u043f\u043e \u043c\u0435\u0440\u0435 \u0447\u0442\u0435\u043d\u0438\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0440\u0430\u0441\u0442\u0430\u0442\u044c \u0443\u0434\u0438\u0432\u043b\u0435\u043d\u0438\u0435:<\/p>\n<ul>\n<li>\n<p>Single ~2k LOC <strong>clay.h<\/strong> file with <strong>zero<\/strong> dependencies (including no standard library)<\/p>\n<\/li>\n<li>\n<p>Wasm support: compile with clang to a 15kb uncompressed <strong>.wasm<\/strong> file for use in the browser<\/p>\n<\/li>\n<li>\n<p>Static arena based memory use with no malloc \/ free, and low total memory overhead (e.g. ~3.5mb for 8192 layout elements).<\/p>\n<\/li>\n<li>\n<p>React-like nested declarative syntax<\/p>\n<\/li>\n<\/ul>\n<p>\u041e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 <a href=\"https:\/\/www.nicbarker.com\/clay\" rel=\"noopener noreferrer nofollow\">\u0441\u0430\u0439\u0442<\/a> \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0442\u043e\u0436\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u044d\u0442\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438:<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u0422.\u0435. <a href=\"https:\/\/github.com\/nicbarker\/clay\/tree\/main\/examples\/clay-official-website\" rel=\"noopener noreferrer nofollow\">\u0441\u0430\u0439\u0442 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043d\u0430 \u0421<\/a>. \u0426\u0435\u043b\u0438\u043a\u043e\u043c, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432. <\/p>\n<blockquote>\n<p>\u0418 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e cmake, \u0434\u0430.<\/p>\n<\/blockquote>\n<p>\u0414\u0443\u043c\u0430\u044e <\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-453367","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/453367","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=453367"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/453367\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=453367"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=453367"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=453367"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}