{"id":357840,"date":"2024-05-20T23:59:09","date_gmt":"2024-05-20T23:59:09","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=357840"},"modified":"-0001-11-30T00:00:00","modified_gmt":"2024-05-20T23:59:09","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=357840","title":{"rendered":"<span>\u041e\u043f\u044b\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f UI \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043d\u0430 C++<\/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>\u041d\u0430\u0447\u0430\u043b\u043e\u0441\u044c \u0432\u0441\u0435 \u043f\u043e\u0447\u0442\u0438 \u0434\u0432\u0430 \u0433\u043e\u0434\u0430 \u043d\u0430\u0437\u0430\u0434 \u0432 \u0434\u0435\u043a\u0430\u0431\u0440e, \u043d\u0430\u0448 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 (\u0432\u0438\u0434\u0435\u043e \u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440) \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b WTL \u0434\u043b\u044f Windows \u0438 GTKmm \u0434\u043b\u044f Linux. \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u043c\u0430\u043a\u0430 \u043d\u0435 \u0431\u044b\u043b\u043e. \u041e\u0433\u0440\u043e\u043c\u043d\u043e\u0439 \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u043e\u0441\u0442\u044c\u044e \u0431\u044b\u043b\u043e \u0442\u0430\u0449\u0438\u0442\u044c \u0434\u0432\u0430 \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u044b\u0445 \u043a\u043b\u0438\u0435\u043d\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435, \u043f\u043e \u0438\u0434\u0435\u0435, \u0434\u043e\u043b\u0436\u043d\u044b \u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0441\u0435 \u0441\u0442\u0440\u043e\u0433\u043e \u043e\u0434\u043d\u043e \u0438 \u0442\u043e\u0436\u0435. \u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u044d\u0442\u043e \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u043b\u043e\u0441\u044c. \u041e\u0442 \u043c\u044b\u0441\u043b\u0438 \u0447\u0442\u043e \u043d\u0430\u0434\u043e \u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u043a\u043b\u0438\u0435\u043d\u0442 \u0434\u043b\u044f \u043c\u0430\u043a\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u043b\u0441\u044f \u043d\u0435\u0440\u0432\u043d\u044b\u0439 \u0442\u0438\u043a&#8230;<\/p>\n<p>\u041d\u0430 \u0440\u0435\u0437\u043e\u043d\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441 &#8212; \u043f\u043e\u0447\u0435\u043c\u0443 \u0441\u0440\u0430\u0437\u0443 \u0434\u0435\u043b\u0430\u043b\u043e\u0441\u044c \u043d\u0435 \u043d\u0430 Qt \u043c\u043e\u0433\u0443 \u043b\u0438\u0448\u044c \u043e\u0442\u0432\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u044d\u0442\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0441, \u0442\u0430\u043a \u0441\u043a\u0430\u0436\u0435\u043c, \u0433\u0443\u0440\u043c\u0430\u043d\u0441\u043a\u0438\u043c\u0438 \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0435\u043d\u0438\u044f\u043c\u0438 \u0438, \u043e\u0442\u0447\u0430\u0441\u0442\u0438, \u0441 \u043b\u044e\u0431\u043e\u0432\u044c\u044e \u043a \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u043d\u044b\u043c exe. \u0414\u0430 \u0438 \u043d\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u043d\u0430 \u0441\u0442\u0430\u0440\u0442\u0435 \u043d\u0438\u0447\u0435\u0433\u043e \u043a\u0440\u043e\u043c\u0435 \u0432\u0438\u043d\u0434\u044b.<\/p>\n<p>\u0412 \u0442\u0435\u0447\u0435\u043d\u0438\u0435 \u0448\u0435\u0441\u0442\u0438 \u043b\u0435\u0442 \u0436\u0438\u0437\u043d\u0438 \u0441 \u0434\u0432\u0443\u043c\u044f \u043a\u043e\u0434\u043e\u0432\u044b\u043c\u0438 \u0431\u0430\u0437\u0430\u043c\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0438 \u0442\u043e\u0433\u043e \u0436\u0435, \u043d\u0435\u0441\u043f\u0435\u0448\u043d\u043e \u043f\u043e\u0434\u0431\u0438\u0440\u0430\u043b\u0438\u0441\u044c \u043b\u0435\u0433\u043a\u043e\u0432\u0435\u0441\u043d\u044b\u0435 UI \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u0445\u043e\u0442\u044f \u0431\u044b \u0432 \u0441\u0442\u0438\u043b\u0435 C++11.<\/p>\n<p>\u041d\u0430\u0434\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u043c\u044b \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c boost \u0438 \u0432\u0441\u0435\u0439 \u0434\u0443\u0448\u043e\u0439, \u043a\u0430\u043a \u043c\u043e\u0436\u0435\u043c, \u0435\u0433\u043e \u043b\u044e\u0431\u0438\u043c&#8230;<\/p>\n<p>\u0412 2021 \u0433\u043e\u0434\u0443 \u0432\u0438\u0434\u0438\u043c\u043e \u0413\u0443\u0433\u043b \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u043f\u043b\u043e\u0445\u043e \u0438\u043b\u0438 \u0437\u0432\u0451\u0437\u0434\u044b \u0442\u0430\u043a \u0441\u043e\u0448\u043b\u0438\u0441\u044c, \u043d\u043e \u043d\u0435 \u043d\u0430\u0448\u043b\u043e\u0441\u044c \u043d\u0438\u0447\u0435\u0433\u043e \u0441\u0442\u043e\u044f\u0449\u0435\u0433\u043e. \u0412\u0441\u0435 \u0447\u0442\u043e \u043f\u043e\u043f\u0430\u0434\u0430\u043b\u043e\u0441\u044c &#8212; \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433\u0435 html \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u0438 \u043e\u0431\u0435\u0440\u0442\u043a\u0430 \u043d\u0430\u0434 wxWidgets. \u0421\u0435\u0439\u0447\u0430\u0441 \u0442\u043e \u043c\u044b \u0437\u043d\u0430\u0435\u043c \u043f\u0440\u043e lvgl, \u0434\u0430&#8230; \u0410 \u0432\u043e\u043e\u0431\u0449\u0435, <a href=\"https:\/\/philippegroarke.com\/posts\/2018\/c++_ui_solutions\/\" rel=\"noopener noreferrer nofollow\">\u0442\u044b\u0441\u044f\u0447\u0438 \u0438\u0445<\/a>.<\/p>\n<p>wxWidgets \u043d\u0435 \u043f\u043b\u043e\u0445, \u043d\u043e \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0441\u0432\u043e\u0435\u0433\u043e \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f, \u0431\u0435\u0437 \u043e\u043a\u043e\u0448\u0435\u043a \u043f\u043e\u0434 \u043a\u043d\u043e\u043f\u043a\u0438, \u043f\u043e\u043b\u044f \u0432\u0432\u043e\u0434\u0430 \u0438 \u0441\u043f\u0438\u0441\u043a\u0438, boost\/bsd \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0439 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0435\u0439, \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043b\u0430\u043a\u043e\u043d\u0438\u0447\u043d\u043e\u0439, \u0438 \u0432 \u0438\u0434\u0435\u0430\u043b\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0435\u0439 \u043e\u0442 Windows XP \/ CentOS 6 \u043d\u0430 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u043c GDI \/ X11 \u0434\u043e Vulkan \u043d\u0430 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043c\u0430\u0448\u0438\u043d\u0430\u0445.<\/p>\n<p>\u0412 \u0438\u0442\u043e\u0433\u0435, \u0432\u0441\u0435 \u0436\u0435 \u0431\u044b\u043b\u043e \u043f\u0440\u0438\u043d\u044f\u0442\u043e \u0432\u043e\u043b\u0435\u0432\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 UI \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0438 \u0441\u0440\u0430\u0437\u0443 \u0432\u044b\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0435\u0433\u043e \u0432 Open Source \u043f\u043e\u0434 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0435\u0439 boost.\u00a0<\/p>\n<h2>\u0417\u0430\u0434\u0430\u0447\u0438 \u0434\u043b\u044f UI \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430<\/h2>\n<p>&#8212; \u0420\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0430 Windows (\u041a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c 7, \u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438 \u043d\u0430 XP)<\/p>\n<p>&#8212; \u0420\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0430 Linux (\u041d\u0430\u0447\u0438\u043d\u0430\u044f \u043e\u0442 \u0443\u0441\u043b\u043e\u0432\u043d\u043e\u0439 Ubuntu 16 \/ CentOS6)<\/p>\n<p>&#8212; \u0420\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0430 macOS<\/p>\n<p>&#8212; \u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u043e\u043a\u043d\u0430 \u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u043d\u0430 \u043d\u0438\u0445 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044b.\u00a0<\/p>\n<p>&#8212; \u041f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043e\u0431\u0449\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043a \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u043e-\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b \u043e\u0434\u0438\u043d \u0440\u0430\u0437, \u043d\u0430 \u043b\u044e\u0431\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435, \u0438 \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0438 \u0432\u0435\u0441\u0442\u0438 \u0441\u0435\u0431\u044f \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e \u043d\u0430 \u0432\u0441\u0435\u0445.<\/p>\n<p>&#8212; \u041f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043e\u0431\u0449\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043a \u0441\u043e\u0431\u044b\u0442\u0438\u044f\u043c. \u041b\u044e\u0431\u043e\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b \u0438\u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043b\u044e\u0431\u0443\u044e \u0433\u0440\u0443\u043f\u043f\u0443 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0443\u044e, \u0441 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0439 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438\/\u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439.<\/p>\n<p>&#8212; \u041f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f, \u0440\u0435\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u043c\u044b\u0448\u044c, \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u0443 \u0438 \u043f\u0440\u043e\u0447\u0438\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f.<\/p>\n<p>&#8212; \u0418\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043c\u0435\u043d\u044f\u0442\u044c \u0446\u0432\u0435\u0442\u043e\u0432\u0443\u044e \u0433\u0430\u043c\u043c\u0443 \/ \u0441\u0442\u0438\u043b\u044c \/ \u043f\u0438\u043a\u0442\u043e\u0433\u0440\u0430\u043c\u043c\u044b \/ \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0445 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043e\u0432 \/ \u043e\u043a\u043e\u043d \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430. \u0425\u0440\u0430\u043d\u0438\u0442\u044c \u0432\u0441\u0435 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432 json, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0438\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432 \u043d\u0435\u043c \u0436\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f.<\/p>\n<p>&#8212; \u041f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0445 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442 \u0434\u043b\u044f \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432 \u0438 \u043d\u0430\u0434\u043f\u0438\u0441\u0435\u0439 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430.<\/p>\n<p>&#8212; \u0418\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0442\u043a\u0440\u0435\u043f\u043b\u044f\u0442\u044c \/ \u043f\u0440\u0438\u043a\u0440\u0435\u043f\u043b\u044f\u0442\u044c \u043e\u043a\u043d\u0430 \u0434\u0440\u0443\u0433 \u043e\u0442 \u0434\u0440\u0443\u0433\u0430.<\/p>\n<p>&#8212; \u041f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 UI \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043e\u0432 \u0438 \u0438\u043c\u0435\u0442\u044c \u043f\u043e\u043d\u044f\u0442\u043d\u0443\u044e \u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0443\u044e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u044b\u0445 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043e\u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u043c\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c\u0438 \u0434\u043b\u044f \u0441\u0432\u043e\u0438\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439.<\/p>\n<p>&#8212; \u0418\u043c\u0435\u0442\u044c \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043a\u043e\u043d\u0444\u0438\u0433\u0430\u043c\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439. \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0440\u0435\u0435\u0441\u0442\u0440 Windows \u0438 ini \u0444\u0430\u0439\u043b\u044b. \u0415\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0441 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f.<\/p>\n<h2>\u041e\u0431\u0449\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430<\/h2>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/303\/ef2\/e9d\/303ef2e9d416b12374a496e102095d54.png\" width=\"902\" height=\"1144\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/303\/ef2\/e9d\/303ef2e9d416b12374a496e102095d54.png\"\/><\/figure>\n<p>\u0412\u0441\u0435 \u0431\u0430\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430 \u0434\u0432\u0443\u0445 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044f\u0445 &#8212; Window \u0438 Control. \u041e\u043a\u043d\u043e \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044b, \u0442\u0430\u043a\u0436\u0435 \u0441\u0430\u043c\u043e \u043e\u043a\u043d\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043e\u043c.\u00a0<\/p>\n<p>Control &#8212; \u044d\u0442\u043e \u043b\u044e\u0431\u043e\u0439 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c &#8212; \u043a\u043d\u043e\u043f\u043a\u0430, \u043f\u043e\u043b\u0435 \u0432\u0432\u043e\u0434\u0430, \u0441\u043f\u0438\u0441\u043e\u043a, \u043c\u0435\u043d\u044e \u0438 \u0442.\u0434. Control \u0437\u043d\u0430\u0435\u0442, \u043a\u0430\u043a \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0441\u043e\u0431\u044b\u0442\u0438\u044f, \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u044e\u0449\u0438\u0435 \u043e\u0442 Window, \u0445\u0440\u0430\u043d\u0438\u0442 \u0441\u0432\u043e\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0438 \u0440\u0438\u0441\u0443\u0435\u0442 \u0441\u0435\u0431\u044f \u043d\u0430 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u043c \u0435\u0433\u043e \u043e\u043a\u043d\u043e\u043c.<\/p>\n<p>Window &#8212; \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0438 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0438\u0445 \u0440\u0430\u0441\u0441\u044b\u043b\u043a\u0443 \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a\u0430\u043c. \u0422\u0430\u043a \u0436\u0435 \u043e\u043a\u043d\u043e \u0434\u0430\u0435\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u043d\u0430 \u043f\u0435\u0440\u0435\u0440\u0438\u0441\u043e\u0432\u043a\u0443 \u0441\u0432\u043e\u0438\u0445 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043e\u0432 \u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u043c \u0441\u0432\u043e\u0439 graphic. \u041a\u0440\u043e\u043c\u0435 \u044d\u0442\u043e\u0433\u043e, \u043e\u043a\u043d\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0444\u043e\u043a\u0443\u0441\u043e\u043c \u0432\u0432\u043e\u0434\u0430, \u043c\u043e\u0436\u0435\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043c\u043e\u0434\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u043c\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u0438\u043b\u0438 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0441\u043e\u0431\u044b\u0442\u0438\u0435.<\/p>\n<p>Graphic &#8212; \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043a \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u043c \u043c\u0435\u0442\u043e\u0434\u0430\u043c \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f. \u0412 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442, \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430 Windows GDI\/GDI+ \u0438 Linux xcb\/cairo. \u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u043d\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0438\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430 vulcan\/bare metal\/etc.<\/p>\n<p>\u0412 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 \u0442\u0430\u043a\u0436\u0435 \u0435\u0441\u0442\u044c \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b &#8212; \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b <code>common<\/code> (\u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0442\u0430\u043a\u0438\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0442\u0438\u043f\u044b, \u043a\u0430\u043a <code>rect, color, font<\/code>), <code>event<\/code> (\u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043c\u044b\u0448\u0438, \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044b, \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0435 \u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f), <code>graphic<\/code> (\u0434\u043b\u044f \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u043c \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435) <code>theme<\/code> (\u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442 \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u043d\u043e\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u0442\u0435\u043c) , <code>locale<\/code> (\u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430), <code>config <\/code>(\u0434\u043b\u044f \u0443\u0434\u043e\u0431\u043d\u043e\u0439, \u0435\u0434\u0438\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f)<\/p>\n<h2>\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0441\u043d\u043e\u0432\u043e\u043f\u043e\u043b\u0430\u0433\u0430\u044e\u0449\u0438\u0435 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u044b<\/h2>\n<p>\u0412 \u043e\u0431\u0449\u0438\u0445 \u0447\u0435\u0440\u0442\u0430\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \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<p>\u041e\u043a\u043d\u043e \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a: \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438, \u0432\u0432\u043e\u0434 \u0441 \u043c\u044b\u0448\u0438 \u0438 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044b, \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432, \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f. \u0414\u0430\u043d\u043d\u044b\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a\u0430\u043c \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u043e\u043a\u043d\u0430, \u044d\u0442\u043e, \u0432\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0435\u0441\u044f \u043d\u0430 \u043e\u043a\u043d\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044b, \u0432\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u043a\u043e\u0434 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438. \u0414\u043b\u044f \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b, \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u044f, \u043e\u0442\u043d\u043e\u0441\u044f\u0449\u0438\u0435\u0441\u044f \u043a \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0443: \u043c\u044b\u0448\u044c \u2014 \u0432 \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0435, \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u043c\u043e\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043e\u043c; \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u0430 \u2014 \u0435\u0441\u043b\u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0443 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442 \u0444\u043e\u043a\u0443\u0441 \u0432\u0432\u043e\u0434\u0430.  <\/p>\n<p>\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439\/\u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u043e\u0442 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0430 \u043a\u043e\u043b\u043b\u0431\u044d\u043a\u0430\u043c\u0438. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b\u043e \u0440\u0430\u0434\u0438\u043a\u0430\u043b\u044c\u043d\u043e \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0441\u043e\u0431\u044b\u0442\u0438\u0439, \u043d\u0435 \u043f\u043e\u0442\u0435\u0440\u044f\u0432 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u0438, \u043d\u0430 \u043d\u0430\u0448 \u0432\u0437\u0433\u043b\u044f\u0434, \u0432\u044b\u0438\u0433\u0440\u0430\u0432 \u0432 \u043b\u0430\u043a\u043e\u043d\u0438\u0447\u043d\u043e\u0441\u0442\u0438. <\/p>\n<p>\u041f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u0447\u0430\u0441\u0442\u0438 \u043e\u043a\u043d\u0430, \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u043e\u0438\u0441\u043a \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0449\u0438\u0445 \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043e\u0432 \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u043f\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0443 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043e\u0432 \u043d\u0430 \u043e\u043a\u043d\u043e, \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043c\u0435\u0442\u043e\u0434 draw() \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0430. \u041a\u043e\u043d\u0442\u0440\u043e\u043b\u044b \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0438\u0435 \u0432 topmost() true \u0440\u0438\u0441\u0443\u044e\u0442\u0441\u044f \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u0447\u0442\u043e\u0431\u044b \u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u0432\u0435\u0440\u0445\u0443 \u0441\u0442\u0435\u043a\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043e\u0432.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u044f\u0441\u043d\u0438\u0442\u044c, \u043a\u0430\u043a \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430, \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u043c \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b \u043e\u043a\u043d\u0430, \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0430 \u0438 \u0433\u0440\u0430\u0444\u0438\u043a\u0430<\/p>\n<h3>\u041c\u0435\u0442\u043e\u0434\u044b window<\/h3>\n<details class=\"spoiler\">\n<summary>i_window.hpp<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \/ \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0435\u043d\u0438\u0435 \u043e\u043a\u043d\u0430<\/p>\n<pre><code class=\"cpp\">bool init(const std::string &amp;caption, const rect &amp;position, window_style style, std::function&lt;void(void)> close_callback); void destroy();<\/code><\/pre>\n<p>\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435\/\u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0430<\/p>\n<pre><code class=\"cpp\">void add_control(std::shared_ptr&lt;i_control> control, const rect &amp;position); void remove_control(std::shared_ptr&lt;i_control> control);<\/code><\/pre>\n<p>\u041f\u0435\u0440\u0435\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0435\u0442 \u0447\u0430\u0441\u0442\u044c \u043e\u043a\u043d\u0430 \u0441 \u0438\u043c\u0435\u044e\u0449\u0438\u043c\u0438\u0441\u044f \u043d\u0430 \u0434\u0430\u043d\u043d\u043e\u043c \u0443\u0447\u0430\u0441\u0442\u043a\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0430\u043c\u0438. \u042d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043e\u043c, \u043a\u043e\u0433\u0434\u0430 \u0435\u043c\u0443 \u043d\u0443\u0436\u043d\u043e \u0441\u0435\u0431\u044f \u043f\u0435\u0440\u0435\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c. \u0412 \u043e\u0442\u0432\u0435\u0442 \u043e\u043a\u043d\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 draw() \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0430 \u0441 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u043c graphic (\u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043e\u043c \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f).<\/p>\n<pre><code class=\"cpp\">void redraw(const rect &amp;position, bool clear = false);<\/code><\/pre>\n<p>\u041c\u0435\u0442\u043e\u0434\u044b \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0438 \u043d\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043e\u043a\u043d\u043e. \u0421\u043e\u0431\u044b\u0442\u0438\u044f \u0431\u044b\u0432\u0430\u044e\u0442 \u043e\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0435 \u0438\u043b\u0438 \u043e\u0442 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/p>\n<pre><code class=\"cpp\">std::string subscribe(std::function&lt;void(const event&amp;)> receive_callback, event_type event_types, std::shared_ptr&lt;i_control> control = nullptr); void unsubscribe(const std::string &amp;subscriber_id);<\/code><\/pre>\n<p>\u041f\u0440\u0438 \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0436\u0435\u043b\u0430\u0435\u043c\u044b\u0435 \u043a \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044e \u0442\u0438\u043f\u044b \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0438 \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a\u0443 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043a\u0435\u043d, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0434\u043b\u044f \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043e\u0442\u043f\u0438\u0441\u043a\u0438 \u0447\u0435\u0440\u0435\u0437 unsubscribe().<\/p>\n<p>\u041f\u043e\u0441\u043b\u0430\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0448\u0435\u0434\u0443\u043b\u0435\u0440 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 (Win32 \/ X11)<\/p>\n<pre><code class=\"cpp\">void emit_event(int32_t x, int32_t y);<\/code><\/pre>\n<p>\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0443\u044e \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u043e \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0435 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 \u043e\u043a\u043d\u0430 <code>HWND<\/code> \u0432 Windows \u0438\u043b\u0438 <code>xcb_connection \/ Display<\/code> \u0432 Linux.<\/p>\n<pre><code class=\"cpp\">system_context &amp;context();<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<h2>\u041c\u0435\u0442\u043e\u0434\u044b control<\/h2>\n<p>\u041a\u0430\u0436\u0434\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b \u0434\u043e\u043b\u0436\u0435\u043d \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u044d\u0442\u0438 \u043c\u0435\u0442\u043e\u0434\u044b. \u0422\u0430\u043a \u0436\u0435 \u043e\u043a\u043d\u043e, \u0441\u0430\u043c\u043e \u044f\u0432\u043b\u044f\u044f\u0441\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043e\u043c, \u0434\u043e\u043b\u0436\u043d\u043e \u0438\u0445 \u0438\u043c\u043f\u043b\u0435\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c.<\/p>\n<details class=\"spoiler\">\n<summary>i_control.hpp <\/summary>\n<div class=\"spoiler__content\">\n<p>\u041c\u0435\u0442\u043e\u0434 \u0433\u0434\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b \u0434\u043e\u043b\u0436\u0435\u043d \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0441\u0435\u0431\u044f. \u0412\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f\u00a0<em>\u0442\u043e\u043b\u044c\u043a\u043e \u043e\u043a\u043d\u043e\u043c<\/em>, \u043a\u043e\u0433\u0434\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u043f\u0435\u0440\u0435\u0440\u0438\u0441\u043e\u0432\u043a\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0430. \u0415\u0441\u043b\u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0443 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0435\u0440\u0435\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0441\u0435\u0431\u044f, \u043e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u044b\u0437\u0432\u0430\u0442\u044c <code>redraw()<\/code> \u0441\u0432\u043e\u0435\u0433\u043e \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u043e\u043a\u043d\u0430. <\/p>\n<pre><code class=\"cpp\">void draw(graphic &amp;gr, const rect &amp;paint_rect);<\/code><\/pre>\n<p>\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u043c\u0435\u0442\u043e\u0434 \u0434\u043b\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0430 \u043d\u0430 \u043e\u043a\u043d\u0435. \u041a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0437\u0430\u0434\u0430\u044e\u0442\u0441\u044f \u0432 \u043f\u0438\u043a\u0441\u0435\u043b\u044f\u0445 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043b\u0435\u0432\u043e\u0433\u043e \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u0443\u0433\u043b\u0430 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u043e\u043a\u043d\u0430.\u00a0<\/p>\n<pre><code class=\"cpp\">void set_position(const rect &amp;position, bool redraw = true);<\/code><\/pre>\n<p>\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u043c\u0435\u0442\u043e\u0434, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0430 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u043a\u043d\u0430<\/p>\n<pre><code class=\"cpp\">rect position() const;<\/code><\/pre>\n<p>\u041c\u0435\u0442\u043e\u0434, \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u043c \u043e\u043a\u043d\u043e\u043c \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 add_control(), \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0443 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0441\u0432\u043e\u0435 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0435 \u043e\u043a\u043d\u043e.<\/p>\n<pre><code class=\"cpp\">void set_parent(std::shared_ptr&lt;window> window_);<\/code><\/pre>\n<p>\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0435 \u043e\u043a\u043d\u043e<\/p>\n<pre><code class=\"cpp\">std::weak_ptr&lt;window> parent() const;<\/code><\/pre>\n<p>\u041c\u0435\u0442\u043e\u0434, \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u043c \u043e\u043a\u043d\u043e\u043c \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 remove_control() \u043e\u0447\u0438\u0449\u0430\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0435 \u043e\u043a\u043d\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0430<\/p>\n<pre><code class=\"cpp\">void clear_parent();<\/code><\/pre>\n<p>\u0421\u043e\u043e\u0431\u0449\u0430\u0435\u0442 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u043c\u0443 \u043e\u043a\u043d\u0443, \u043d\u0443\u0436\u043d\u043e \u043b\u0438 \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b \u043f\u043e\u0432\u0435\u0440\u0445 \u0432\u0441\u0435\u0445 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043e\u0432<\/p>\n<pre><code class=\"cpp\">bool topmost() const;<\/code><\/pre>\n<p>\u0418\u0437\u043c\u0435\u043d\u044f\u0435\u0442 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u0443\u044e \u0442\u0435\u043c\u0443 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0430. \u0415\u0441\u043b\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0440\u0430\u0432\u0435\u043d nullptr \u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0442\u0435\u043c\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e.<\/p>\n<pre><code class=\"cpp\">void update_theme(std::shared_ptr&lt;i_theme> theme_ = nullptr);<\/code><\/pre>\n<p>\u041c\u0435\u0442\u043e\u0434\u044b \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c\u044e<\/p>\n<pre><code class=\"cpp\">void show(); void hide(); bool showed() const;<\/code><\/pre>\n<p>\u041c\u0435\u0442\u043e\u0434\u044b \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u201c\u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u0441\u0442\u044c\u044e\u201d<\/p>\n<pre><code class=\"cpp\">virtual void enable(); void disable(); bool enabled() const;<\/code><\/pre>\n<p>\u041c\u0435\u0442\u043e\u0434\u044b \u0434\u043b\u044f \u0432\u044b\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u043d\u0438\u044f \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0430 \u0441 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u043d\u044b\u043c \u0444\u043e\u043a\u0443\u0441\u043e\u043c \u0432\u0432\u043e\u0434\u0430<\/p>\n<pre><code class=\"cpp\">bool focused() const; \/\/\/ Returns true if the control is focused bool focusing() const; \/\/\/ Returns true if the control receives focus<\/code><\/pre>\n<p>\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0443\u044e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u043e\u0448\u0438\u0431\u043a\u0438. \u0421\u043b\u0435\u0434\u0443\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u043f\u043e\u0441\u043b\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0430 \u0438\u043b\u0438 \u0435\u0441\u043b\u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043c\u0435\u0442\u043e\u0434\u044b \u0442\u0438\u043f\u0430 bool init() \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u044e\u0449\u0435\u0433\u043e \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c.<\/p>\n<pre><code class=\"cpp\">error get_error() const;<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<h2>\u041c\u0435\u0442\u043e\u0434\u044b graphic<\/h2>\n<p>\u041a\u0430\u0436\u0434\u043e\u0435 \u043e\u043a\u043d\u043e \u0438\u043c\u0435\u0435\u0442 \u0441\u0432\u043e\u0439 \u0433\u0440\u0430\u0444\u0438\u043a \u0434\u043b\u044f \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0432\u043e\u0438\u0445 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043e\u0432. \u041d\u043e \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u043c\u0435\u0448\u0430\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0433\u0440\u0430\u0444\u0438\u043a \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0430 \u0438\u043b\u0438 \u0438\u0437 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u0414\u043b\u044f \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0430, \u043e\u043a\u043d\u043e \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0441\u0432\u043e\u0439 \u0433\u0440\u0430\u0444\u0438\u043a \u0447\u0435\u0440\u0435\u0437 \u0432\u044b\u0437\u043e\u0432 \u043c\u0435\u0442\u043e\u0434\u0430 <code>draw()<\/code> \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0430.<\/p>\n<details class=\"spoiler\">\n<summary>graphic.hpp<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">graphic(system_context &amp;context);<\/code><\/pre>\n<p>\u041c\u0435\u0442\u043e\u0434\u044b \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438\/\u0434\u0435\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438<\/p>\n<pre><code class=\"cpp\">void init(const rect &amp;max_size, color background_color); void release();<\/code><\/pre>\n<p>\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0446\u0432\u0435\u0442 \u0444\u043e\u043d\u0430, \u044d\u0442\u0438\u043c \u0446\u0432\u0435\u0442\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043b\u0438\u0442 \u0445\u043e\u043b\u0441\u0442 \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 clear()<\/p>\n<pre><code class=\"cpp\">void set_background_color(color background_color); void clear(const rect &amp;position);<\/code><\/pre>\n<p>\u0421\u0431\u0440\u043e\u0441 (\u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0430) \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442<\/p>\n<pre><code class=\"cpp\">void flush(const rect &amp;updated_size);<\/code><\/pre>\n<p>\u041d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u0447\u043a\u0443, \u043b\u0438\u043d\u0438\u044e<\/p>\n<pre><code class=\"cpp\">void draw_pixel(const rect &amp;position, color color_); void draw_line(const rect &amp;position, color color_, uint32_t width = 1);<\/code><\/pre>\n<p>\u0418\u0437\u043c\u0435\u0440\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u0442\u0435\u043a\u0441\u0442\u0430 \u0441 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u043c \u0448\u0440\u0438\u0444\u0442\u043e\u043c<\/p>\n<pre><code class=\"cpp\">rect measure_text(const std::string &amp;text, const font &amp;font_);<\/code><\/pre>\n<p>\u041d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0435\u043a\u0441\u0442 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u043c \u0448\u0440\u0438\u0444\u0442\u043e\u043c<\/p>\n<pre><code class=\"cpp\">void draw_text(const rect &amp;position, const std::string &amp;text, color color_, const font &amp;font_);<\/code><\/pre>\n<p>\u041d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a<\/p>\n<pre><code class=\"cpp\">void draw_rect(const rect &amp;position, color fill_color);<\/code><\/pre>\n<p>\u041d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a \u0441\u043e \u0441\u043a\u0440\u0443\u0433\u043b\u0435\u043d\u043d\u044b\u043c\u0438 \u043a\u0440\u0430\u044f\u043c\u0438<\/p>\n<pre><code class=\"cpp\">void draw_rect(const rect &amp;position, color border_color, color fill_color, uint32_t border_width, uint32_t round);<\/code><\/pre>\n<p>\u041d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0431\u0443\u0444\u0435\u0440 RGB32<\/p>\n<pre><code class=\"cpp\">void draw_buffer(const rect &amp;position, uint8_t *buffer, size_t buffer_size);<\/code><\/pre>\n<p>\u041d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u0433\u0440\u0430\u0444\u0438\u043a\u0430<\/p>\n<pre><code class=\"cpp\">void draw_graphic(const rect &amp;position, graphic &amp;graphic_, int32_t left_shift, int32_t right_shift);<\/code><\/pre>\n<p>\u0414\u043e\u0441\u0442\u0443\u043f \u043a \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u043c\u0443 DC<\/p>\n<pre><code class=\"cpp\">#ifdef _WIN32 HDC drawable(); #elif linux xcb_drawable_t drawable(); #endif<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0421\u043f\u0438\u0441\u043e\u043a \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u0438 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0442\u044c\u0441\u044f \u043f\u043e \u043c\u0435\u0440\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438.\u00a0<\/p>\n<h2>\u0413\u043b\u0430\u0432\u043d\u044b\u0439 \u0446\u0438\u043a\u043b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f<\/h2>\n<p>\u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0430 Windows \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0446\u0438\u043a\u043b:<\/p>\n<pre><code class=\"cpp\">MSG msg; while (GetMessage(&amp;msg, nullptr, 0, 0)) {   TranslateMessage(&amp;msg);   DispatchMessage(&amp;msg); } return (int) msg.wParam;<\/code><\/pre>\n<p>\u041a\u0430\u0436\u0434\u043e\u0435 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u043e\u0435, \u043d\u0435 \u0434\u043e\u0447\u0435\u0440\u043d\u0435\u0435 \u043e\u043a\u043d\u043e, \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u0435\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0447\u0435\u0440\u0435\u0437 \u0438\u043c\u0435\u044e\u0449\u0435\u0439\u0441\u044f \u0432 \u043d\u0435\u043c wnd_proc. \u0414\u0430\u043b\u0435\u0435, \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u0438\u043f\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u044f, \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043b\u0438\u0431\u043e \u043f\u0435\u0440\u0435\u0440\u0438\u0441\u043e\u0432\u043a\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043e\u0432, \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c\/\u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u043e\u043a\u043d\u0430, \u043b\u0438\u0431\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u043f\u043e\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a\u0430\u043c. \u0421\u0440\u043e\u043a \u0436\u0438\u0437\u043d\u0438 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043e\u043a\u043d\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0441\u0440\u043e\u043a \u0436\u0438\u0437\u043d\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/p>\n<p>\u041d\u0430 \u043b\u0438\u043d\u0443\u043a\u0441 \u043a\u0430\u0440\u0442\u0438\u043d\u0430 \u0441\u043b\u0435\u0433\u043a\u0430 \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f, \u043d\u043e \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043e\u0432 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e. \u041a\u0430\u0436\u0434\u043e\u0435 \u043d\u0435 \u0434\u043e\u0447\u0435\u0440\u043d\u0435\u0435 \u043e\u043a\u043d\u043e, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0442\u0440\u0435\u0434 \u0434\u043b\u044f \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0432 xcb_wait_for_event() \u0438 \u043f\u043e \u043c\u0435\u0440\u0435 \u0438\u0445 \u043f\u043e\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u044f \u0440\u0430\u0441\u0441\u044b\u043b\u0430\u0435\u0442 \u0438\u0445 \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a\u0430\u043c. <\/p>\n<pre><code class=\"cpp\">bool window::init(...) {   ...   thread = std::thread(std::bind(&amp;window::process_events, this)); }  void window::process_events() {     xcb_generic_event_t *e = nullptr;     while (runned &amp;&amp; (e = xcb_wait_for_event(context_.connection)))     {         switch (e->response_type &amp; ~0x80)         {             case XCB_EXPOSE:              ...<\/code><\/pre>\n<p>\u0412\u0435\u0441\u044c \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0441\u043a\u0440\u044b\u0442 \u0432 <code>window<\/code> \u0438 <code>framework<\/code>. <code>framework<\/code> &#8212; \u044d\u0442\u043e \u043d\u043e\u0432\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043f\u043e\u044f\u0432\u0438\u0432\u0448\u0438\u0439\u0441\u044f \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043a\u0440\u0438\u0442\u0438\u043a\u0435 \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u0441 \u0442\u043e\u0440\u0447\u0430\u0449\u0438\u043c \u0437\u0430 ifdef&#8217;\u0430\u043c\u0438 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u043e \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u0432 <code>main<\/code>.<br \/><code>framework<\/code> \u0438\u043c\u0435\u0435\u0442 \u0432\u0441\u0435\u0433\u043e 3 \u0433\u043b\u0430\u0432\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>init(), run()<\/code> \u0438 <code>stop(). init() <\/code>\u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435<code> main(), run() <\/code>\u043f\u043e\u0441\u043b\u0435<code> window->init(...), <\/code>\u0430<code> stop() <\/code>\u043a\u043e\u0433\u0434\u0430 \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0430\u0436\u0430\u043b &#171;\u043a\u0440\u0435\u0441\u0442\u0438\u043a&#187;).<\/p>\n<pre><code class=\"cpp\">int main(..) {   wui::framework::init();    MainFrame mainFrame;   mainFrame.Run();    wui::framework::run();    return 0; }<\/code><\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c <code>wui::framework::end(); <\/code>\u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u043a\u043e\u043b\u043b\u0431\u0435\u043a\u0435 \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u044f \u0433\u043b\u0430\u0432\u043d\u043e\u0433\u043e \u043e\u043a\u043d\u0430:<\/p>\n<pre><code class=\"cpp\">void MainFrame::Run() {   window->init(wui::locale(\"main_frame\", \"caption\"), { -1, -1, width, height },                 wui::window_style::frame, [this]() {                    wui::framework::stop();                  }); }<\/code><\/pre>\n<h2>\u0422\u0440\u0430\u043d\u0437\u0438\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u044c<\/h2>\n<p>\u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0435 \u043c\u044b\u0441\u043b\u0438\u043c\u044b \u0431\u0435\u0437 \u043c\u043e\u0434\u0430\u043b\u044c\u043d\u044b\u0445 \u0434\u0438\u0430\u043b\u043e\u0433\u043e\u0432. \u0414\u043b\u044f \u0438\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u043a\u043d\u043e \u0438\u043c\u0435\u0435\u0442 \u043c\u0435\u0442\u043e\u0434:<\/p>\n<pre><code class=\"cpp\">void set_transient_for(std::shared_ptr&lt;window> window_, bool docked = true);<\/code><\/pre>\n<p>\u042d\u0442\u0438\u043c \u043c\u0435\u0442\u043e\u0434\u043e\u043c, \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u043c\u0443 \u043e\u043a\u043d\u0443 \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0434\u0440\u0443\u0433\u043e\u0435 \u043e\u043a\u043d\u043e \u043d\u0443\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043c\u043e\u0434\u0430\u043b\u044c\u043d\u044b\u043c \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435\u0433\u043e. \u0424\u043b\u0430\u0433 docked \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u043c\u043e\u0434\u0430\u043b\u044c\u043d\u043e\u0435 \u043e\u043a\u043d\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c\u0441\u044f \u0432 \u0431\u0430\u0437\u043e\u0432\u043e\u043c \u043e\u043a\u043d\u0435, \u0431\u0435\u0437 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u043e\u043a\u043d\u0430. \u0415\u0441\u043b\u0438 \u043c\u043e\u0434\u0430\u043b\u044c\u043d\u043e\u0435 \u043e\u043a\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e, \u044d\u0442\u043e\u0442 \u0444\u043b\u0430\u0433 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0438 \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u043d\u043e\u0432\u043e\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0435 \u043e\u043a\u043d\u043e. <\/p>\n<p>\u0421\u0442\u0440\u043e\u0433\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u043c\u043e\u0434\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0432 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u043e\u043c \u0441\u043c\u044b\u0441\u043b\u0435 WinAPI \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 \u043d\u0435\u0442. \u0422. \u0435. \u0432\u044b\u0437\u043e\u0432 <code>init()<\/code> \u0442\u0440\u0430\u043d\u0437\u0438\u0435\u043d\u0442\u043d\u043e\u0433\u043e \u043e\u043a\u043d\u0430 \u043d\u0435 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u043a\u043e\u0434, \u043d\u043e \u044d\u0442\u043e \u043e\u0431\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435\u043c \u043b\u043e\u0433\u0438\u043a\u0438 \u0432 \u043a\u043e\u043b\u043b\u0431\u044d\u043a\u0435 <code>close_callback<\/code> \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u043e\u043c \u0432 <code>init()<\/code>.<\/p>\n<p>\u041a\u0430\u043a \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430, \u0441 \u044d\u0442\u0438\u043c \u0432\u043f\u043e\u043b\u043d\u0435 \u043c\u043e\u0436\u043d\u043e \u0436\u0438\u0442\u044c, \u0430 \u0434\u043b\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432\u0435\u0449\u0435\u0439 \u044d\u0442\u043e \u0434\u0430\u0436\u0435 \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0443\u0434\u043e\u0431\u043d\u0435\u0435.<\/p>\n<h2>\u0420\u0435\u0441\u0443\u0440\u0441\u044b<\/h2>\n<p>\u0414\u043b\u044f \u0443\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u0438 \u0435\u0434\u0438\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u043e\u0433\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043e\u0432 \u0438 \u043d\u0430\u0434\u043f\u0438\u0441\u0435\u0439 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u043e\u0432, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0434\u0438\u0437\u0430\u0439\u043d\u0435\u0440\u043e\u0432, \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0447\u0438\u043a\u043e\u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b <code>theme<\/code> \u0438 <code>locale<\/code>. <\/p>\n<p>\u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0438\u043c\u0435\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u0442\u0435\u043c\u0443 \u0438 \u043b\u043e\u043a\u0430\u043b\u044c. \u042d\u0442\u043e \u043f\u043e \u0441\u0443\u0442\u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0438, \u0432\u044b\u0434\u0430\u044e\u0449\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u043f\u0430\u0440\u0435 \u0441\u0435\u043a\u0446\u0438\u044f + \u043a\u043b\u044e\u0447. \u0412 \u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b (\u0438 \u043e\u043a\u043d\u043e, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d\u043e \u0442\u043e\u0436\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b) \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u0442\u0435\u043c\u0430 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u044d\u0442\u0438\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043e\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0441\u0432\u043e\u0438\u0445 \u0446\u0432\u0435\u0442\u043e\u0432, \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432, \u0442\u043e\u043b\u0449\u0438\u043d, \u0448\u0440\u0438\u0444\u0442\u043e\u0432 \u0438 \u043f\u0440\u043e\u0447\u0435\u0433\u043e. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u0432 \u043a\u043e\u043d\u0442\u0440\u043e\u043b \u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u0443\u044e \u0442\u0435\u043c\u0443, \u0442\u043e\u0433\u0434\u0430 \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u0449\u0443\u044e \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u0442\u0435\u043c\u0443 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/p>\n<p>\u0423 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0434\u043b\u044f \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430\u0434\u043f\u0438\u0441\u0435\u0439 \u0435\u0441\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043b\u043e\u043a\u0430\u043b\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0432\u0441\u0435 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0432 \u043e\u0434\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u0438 \u0442\u0430\u043a\u0436\u0435, \u0432 \u043e\u0434\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435, \u043c\u0435\u043d\u044f\u0442\u044c \u0438\u0445 \u0434\u043b\u044f \u0432\u0441\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/p>\n<p>\u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438\u043c\u0435\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043c\u0435\u043d\u044f\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u0442\u0435\u043c\u0443 \u0438 \u043b\u043e\u043a\u0430\u043b\u044c, \u0447\u0442\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0441\u043c\u0435\u043d\u0443 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u0432\u0438\u0434\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043e\u0432 \u0438 \u043e\u043a\u043e\u043d \/ \u044f\u0437\u044b\u043a\u0430 \u0432\u0441\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/p>\n<p>\u0422\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u0441\u0445\u043e\u0436\u0435, \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 <code>theme<\/code><br \/>\u0422\u0435\u043c\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u0437 \u0441\u0435\u0431\u044f json \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0434\u043b\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043e\u0432, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0434\u043b\u044f \u043e\u043a\u043d\u0430 \u0438 \u043d\u0430\u0434\u043f\u0438\u0441\u0438 \u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439.<\/p>\n<details class=\"spoiler\">\n<summary>\u0422\u0435\u043c\u0430 dark<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"json\">{\u00a0\u00a0\u00a0\u00a0   \"controls\": [\u00a0\u00a0\u00a0\u00a0     {\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0       \"type\": \"window\",\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0       \"background\": \"#131519\",\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0       \"border\": \"#404040\",\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0       \"border_width\": 1,\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0       \"text\": \"#f5f5f0\",\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0       \"active_button\": \"#3b3d41\",\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0       \"caption_font\": {\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0         \"name\": \"Segoe UI\",\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0         \"size\": 18,\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0         \"decorations\": \"normal\"\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0       }\u00a0\u00a0\u00a0\u00a0     },\u00a0\u00a0\u00a0\u00a0     {\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0       \"type\": \"text\",\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0       \"color\": \"#f5f5f0\",\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0       \"font\": {\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0         \"name\": \"Segoe UI\",\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0         \"size\": 18\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0       }\u00a0\u00a0\u00a0\u00a0     },\u00a0 \u00a0      {\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0       \"type\": \"image\",\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0       \"resource\": \"IMAGES_DARK\",\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0       \"path\": \"~\/.hello_wui\/res\/images\/dark\"\u00a0\u00a0\u00a0\u00a0     },\u00a0\u00a0\u00a0\u00a0     . . .   }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u0422\u0435\u043c\u0430 light<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"json\">{   \"controls\": [     {       \"type\": \"window\",       \"background\": \"#fffffe\",       \"border\": \"#9a9a9a\",       \"border_width\": 1,       \"text\": \"#191914\",       \"caption_font\": {         \"name\": \"Segoe UI\",         \"size\": 18       }     },     {       \"type\": \"text\",       \"color\": \"#191914\",       \"font\": {         \"name\": \"Segoe UI\",         \"size\": 18       }     },     {       \"type\": \"image\",       \"resource\": \"IMAGES_LIGHT\",       \"path\": \"~\/.hello_wui\/res\/images\/light\"     }     ... } <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0414\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044e \u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0430\u043c \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u044b\u0439,\u00a0 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c. \u041f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043a\u0440\u0430\u0441\u043d\u0443\u044e \u043a\u043d\u043e\u043f\u043a\u0443) \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 json \u043d\u043e\u0432\u044b\u0439 \u0440\u0430\u0437\u0434\u0435\u043b: <\/p>\n<pre><code class=\"json\">{   \"type\": \"red_button\",   \"calm\": \"#c61818\",   \"active\": \"#e31010\",   \"border\": \"#c90000\",   \"border_width\": 1,   \"focused_border\": \"#dcd2dc\",   \"text\": \"#f0f1f1\",   \"disabled\": \"#a5a5a0\",   \"round\": 0,   \"focusing\": 1,   \"font\": {      \"name\": \"Segoe UI\",       \"size\": 18    } } <\/code><\/pre>\n<p>\u0410 \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0430 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0438\u043c\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0430: <code>\u201cred_button\u201d<\/code>, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre><code class=\"cpp\">cancelButton(new wui::button(wui::locale(\"button\", \"cancel\"), this { window->destroy(); }, \"red_button\"))<\/code><\/pre>\n<p>\u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043f\u0438\u043a\u0442\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u043c\u0438 \u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u043c\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b <code>image<\/code>. \u041e\u043d \u0442\u0430\u043a\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 <code>theme<\/code> \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430 win32 \u0440\u0435\u0441\u0443\u0440\u0441\u0430 \u0438\u043b\u0438 \u043f\u0443\u0442\u0438 \u043a \u0444\u0430\u0439\u043b\u0443 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435<\/p>\n<pre><code class=\"cpp\">logoImage(new wui::image(IMG_LOGO))\u00a0<\/code><\/pre>\n<p>\u0433\u0434\u0435:<\/p>\n<pre><code class=\"cpp\">#ifdef _WIN3 #define IMG_LOGO 4010 #else static constexpr const char* IMG_LOGO = \"logo.png\"; #endif<\/code><\/pre>\n<p>\u041b\u043e\u0433\u043e\u0442\u0438\u043f \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0439 \u0442\u0435\u043c\u043e\u0439.<\/p>\n<h2>\u0412\u043e\u043f\u0440\u043e\u0441\u044b \u043c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438<\/h2>\n<p>WUI \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u043c\u044c\u044e\u0442\u0435\u043a\u0441\u0430. \u041a\u043e\u043b\u043b\u0431\u044d\u043a\u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043e\u0432 \u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430 \u043d\u0430 Windows (<code>proc_wnd<\/code>) \u0438\u043b\u0438 \u0438\u0437 \u043f\u043e\u0442\u043e\u043a\u0430 \u043e\u043a\u043d\u0430 \u043e\u0436\u0438\u0434\u0430\u044e\u0449\u0435\u0433\u043e <code>xcb_wait_for_event()<\/code>. <\/p>\n<p>\u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u0432\u0441\u0435 \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u0438 \u0441 UI \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u043b\u0438\u0431\u043e \u0432 \u043a\u043e\u043b\u043b\u0431\u0435\u043a\u0430\u0445 \/ \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u044f\u0445, \u043b\u0438\u0431\u043e \u0432 \u043e\u0434\u043d\u043e\u043c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u043c UI \u0442\u0440\u0435\u0434\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. <\/p>\n<p>\u0415\u0441\u043b\u0438 \u0436\u0435 \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u0442\u0441\u044f <code>window.add_control()<\/code> \/ <code>window.remove_control()<\/code> \u0438\u0437 \u0440\u0430\u0437\u043d\u044b\u0445 \u0442\u0440\u0435\u0434\u043e\u0432, \u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0438\u0442\u044c \u0437\u0430\u0449\u0438\u0442\u0443 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043a\u043e\u0434\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/p>\n<h2>Unicode<\/h2>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e UTF-8 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0439 \u0432 \u043e\u0431\u044b\u0447\u043d\u044b\u0445 <code>std::string \/ char *<\/code>.\u00a0<\/p>\n<p>\u0414\u043b\u044f \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 WinAPI \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0443\u0436\u0435\u043d <code>utf16<\/code> \u0432 wchar, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f <code>boost::nowide::widen() \/ boost::nowide::narrow()<\/code>. <code>boost::nowide<\/code> \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u043e\u0442 boost \u0438 \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 WUI \u0432 thirdparty. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0435\u0441\u043b\u0438 \u0432 \u0432\u0430\u0448\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043d\u0435\u0442 boost \u0432\u0430\u043c \u043d\u0435 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0435\u0433\u043e \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0434\u043b\u044f WUI.\u00a0<\/p>\n<p>\u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0442\u0430\u043a\u0436\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>boost::nowide<\/code> \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b WUI \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e \u0441 WinAPI.<\/p>\n<p>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e \u0442\u043e\u043c, \u043f\u043e\u0447\u0435\u043c\u0443 <code>wchar<\/code> \u043d\u0435 \u043d\u0443\u0436\u0435\u043d, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u0437\u0434\u0435\u0441\u044c: <a href=\"https:\/\/utf8everywhere.org\/\" rel=\"noopener noreferrer nofollow\"><u>https:\/\/utf8everywhere.org\/<\/u><\/p>\n<p><\/a>\u041d\u0430 Linux <code>boost::nowide<\/code> \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f, \u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c \u043e\u0442 \u043d\u0435\u0433\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f.<\/p>\n<h2>\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043e\u0448\u0438\u0431\u043e\u043a<\/h2>\n<p>WUI \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f. \u041c\u0435\u0442\u043e\u0434\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c\u0441\u044f \u043e\u0448\u0438\u0431\u043a\u043e\u0439 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 bool. \u0414\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0435\u0439 \u043e \u0432\u043e\u0437\u043d\u0438\u043a\u0448\u0435\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043c\u0435\u0442\u043e\u0434 get_error() \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0438\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 <\/p>\n<pre><code class=\"cpp\">struct error {\u00a0\u00a0\u00a0\u00a0     error_type type;\u00a0\u00a0\u00a0\u00a0     std::string component, message;\u00a0\u00a0\u00a0\u00a0     bool is_ok() const; };<\/code><\/pre>\n<p>\u041e\u0448\u0438\u0431\u043a\u0438, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u0448\u0438\u0435 \u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u0430, \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0442\u0430\u043a:<\/p>\n<pre><code class=\"cpp\">newObject(new wui::image(IMG_LOGO))...  if (!newObject->get_error().is_ok()) { log(\u201cerror\u201d, newObject->get_error().str()); }<\/code><\/pre>\n<h2>Hello world app<\/h2>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u0441\u043d\u043e\u0432\u044b \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0435\u0433\u043e WUI \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435, \u0432\u043f\u0440\u043e\u0447\u0435\u043c \u0441\u0440\u0430\u0437\u0443 \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u043f\u043e\u0434 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0435\u0433\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0434\u043e \u043a\u0440\u0443\u043f\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430.\u00a0<\/p>\n<p>\u0414\u0430\u043d\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 <code>examples\/hello_world<\/code> \u0438 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043f\u043e\u043b\u043d\u043e\u0435 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432. \u041d\u0430 Windows \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0432 \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u043d\u044b\u0439 exe, \u043d\u0430 Linux\/Mac \u0445\u0440\u0430\u043d\u0438\u0442 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0432 \u043f\u0430\u043f\u043a\u0435 <code>\u201dres\/\u201d<\/code> \u0440\u044f\u0434\u043e\u043c \u0441 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u043c \u0444\u0430\u0439\u043b\u043e\u043c. \u0414\u043b\u044f \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043b\u0443\u0447\u0448\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0443\u0442\u0438 <code>\u201c~\/.app_name\/res\u201d<\/code> \u0438\u043b\u0438, \u0435\u0441\u043b\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u0432\u0438\u0442\u0441\u044f \u0438\u0437 \u043f\u043e\u0434 root, \u0447\u0442\u043e-\u0442\u043e \u0432\u0440\u043e\u0434\u0435 <code>\u201c\/opt\/app_name\/res\u201d<\/code> .<\/p>\n<p>\u041f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 <code>theme, locale<\/code> \u0438 <code>config<\/code>, \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438, \u0438\u043c\u0435\u044e\u0449\u0435\u043c \u0434\u0432\u0435 \u0446\u0432\u0435\u0442\u043e\u0432\u044b\u0435 \u0441\u0445\u0435\u043c\u044b (\u0442\u0435\u043c\u043d\u0430\u044f \u0438 \u0441\u0432\u0435\u0442\u043b\u0430\u044f), \u0434\u0432\u0430 \u044f\u0437\u044b\u043a\u0430 \u0438 \u0445\u0440\u0430\u043d\u044f\u0449\u0435\u043c \u0441\u0432\u043e\u044e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u0432 \u0440\u0435\u0435\u0441\u0442\u0440\u0435 \u043d\u0430 Windows \u0438 \u0432 ini \u0444\u0430\u0439\u043b\u0435 \u043d\u0430 Linux.<\/p>\n<details class=\"spoiler\">\n<summary>main.cpp<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\"> #ifdef _WIN32 int APIENTRY wWinMain(_In_ HINSTANCE,     _In_opt_ HINSTANCE,     _In_ LPWSTR    lpCmdLine,     _In_ int       nCmdShow) #elif __linux__ int main(int argc, char *argv[]) #endif {     wui::framework::init();      auto ok = wui::config::create_config(\"hello_world.ini\", \"Software\\\\wui\\\\hello_world\");     if (!ok)     {         std::cerr &lt;&lt; wui::config::get_error().str() &lt;&lt; std::endl;         return -1;     }      wui::error err;      wui::set_app_locales({         { wui::locale_type::eng, \"English\", \"res\/en_locale.json\", TXT_LOCALE_EN },         { wui::locale_type::rus, \"\u0420\u0443\u0441\u0441\u043a\u0438\u0439\", \"res\/ru_locale.json\", TXT_LOCALE_RU },     });      auto current_locale = static_cast&lt;wui::locale_type>(wui::config::get_int(\"User\", \"Locale\",          static_cast&lt;int32_t>(wui::get_default_system_locale())));      wui::set_current_app_locale(current_locale);      wui::set_locale_from_type(current_locale, err);     if (!err.is_ok())     {         std::cerr &lt;&lt; err.str() &lt;&lt; std::endl;         return -1;     }      wui::set_app_themes({         { \"dark\",  \"res\/dark.json\",  TXT_DARK_THEME },         { \"light\", \"res\/light.json\", TXT_LIGHT_THEME }     });      auto current_theme = wui::config::get_string(\"User\", \"Theme\", \"dark\");     wui::set_default_theme(\"dark\");     wui::set_current_app_theme(current_theme);      wui::set_default_theme_from_name(current_theme, err);     if (!err.is_ok())     {         std::cerr &lt;&lt; err.str() &lt;&lt; std::endl;         return -1;     }      MainFrame mainFrame;     mainFrame.Run();      wui::framework::run();      return 0; } <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0414\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043b\u043e\u0433\u043e\u0442\u0438\u043f, \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u043d\u0430\u0434\u043f\u0438\u0441\u044c \u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u043e\u043b\u0435 \u0432\u0432\u043e\u0434\u0430. \u041f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443, \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432\u044b\u0432\u043e\u0434 \u043e\u043a\u043d\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f. \u0422\u0430\u043a\u0436\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u0435 \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u044f \u043e\u043a\u043d\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c \u0441 \u0432\u044b\u0432\u043e\u0434\u043e\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/fbf\/23f\/9eb\/fbf23f9eb88ff1658c40d762d8959775.png\" width=\"667\" height=\"521\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/fbf\/23f\/9eb\/fbf23f9eb88ff1658c40d762d8959775.png\"\/><\/figure>\n<p>\u041d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u0435, \u0442\u0435\u043c\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0430 \u043d\u0430 \u0441\u0432\u0435\u0442\u043b\u0443\u044e, \u044f\u0437\u044b\u043a \u043d\u0430 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u0438\u0439 \u0438 \u043d\u0430\u0436\u0430\u0442\u0430 \u043a\u043d\u043e\u043f\u043a\u0430 \u201c\u041f\u0440\u0438\u044f\u0442\u043d\u043e \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f\u201d<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/56a\/020\/071\/56a020071a05c69f30fb57d2d419066b.png\" width=\"667\" height=\"521\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/56a\/020\/071\/56a020071a05c69f30fb57d2d419066b.png\"\/><\/figure>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u0434 \u0433\u043b\u0430\u0432\u043d\u043e\u0433\u043e \u043e\u043a\u043d\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">\/\/\/\/\/\/\/\/ Header  class MainFrame { public:     MainFrame();      void Run();  private:     static const int32_t WND_WIDTH = 400, WND_HEIGHT = 400;      std::shared_ptr&lt;wui::window> window;      std::shared_ptr&lt;wui::image> logoImage;     std::shared_ptr&lt;wui::text> whatsYourNameText;     std::shared_ptr&lt;wui::input> userNameInput;     std::shared_ptr&lt;wui::button> okButton;     std::shared_ptr&lt;wui::message> messageBox;      void ReceiveEvents(const wui::event &amp;ev);      void UpdateControlsPosition(); };  \/\/\/\/\/\/\/\/ Impl  MainFrame::MainFrame()     : window(new wui::window()),          logoImage(new wui::image(IMG_LOGO)),     whatsYourNameText(new wui::text(wui::locale(\"main_frame\", \"whats_your_name_text\"), wui::text_alignment::center, \"h1_text\")),     userNameInput(new wui::input(wui::config::get_string(\"User\", \"Name\", \"\"))),     okButton(new wui::button(wui::locale(\"main_frame\", \"ok_button\"), [this](){         wui::config::set_string(\"User\", \"Name\", userNameInput->text());         messageBox->show(wui::locale(\"main_frame\", \"hello_text\") + userNameInput->text(),         wui::locale(\"main_frame\", \"ok_message_caption\"), wui::message_icon::information, wui::message_button::ok, [this](wui::message_result) {             runned = false; window->destroy(); }); })),     messageBox(new wui::message(window)),      runned(false) {     window->subscribe(std::bind(&amp;MainFrame::ReceiveEvents,         this,         std::placeholders::_1),         static_cast&lt;wui::event_type>(static_cast&lt;int32_t>(wui::event_type::internal) |             static_cast&lt;int32_t>(wui::event_type::system) |             static_cast&lt;int32_t>(wui::event_type::keyboard)));      window->add_control(logoImage,         { 0 });     window->add_control(whatsYourNameText, { 0 });     window->add_control(userNameInput,     { 0 });     window->add_control(okButton,          { 0 });      window->set_default_push_control(okButton);      window->set_min_size(WND_WIDTH - 1, WND_HEIGHT - 1); }  void MainFrame::Run() {     if (runned)     {         return;     }     runned = true;      UpdateControlsPosition();      window->set_control_callback([&amp;](wui::window_control control, std::string &amp;tooltip_text, bool &amp;continue_) {         switch (control)         {             case wui::window_control::theme:             {                 wui::error err;                  auto nextTheme = wui::get_next_app_theme();                 wui::set_default_theme_from_name(nextTheme, err);                 if (!err.is_ok())                 {                     std::cerr &lt;&lt; err.str() &lt;&lt; std::endl;                     return;                 }                  wui::config::set_string(\"User\", \"Theme\", nextTheme);                  window->update_theme();             }             break; case wui::window_control::lang: {                 wui::error err;                  auto nextLocale = wui::get_next_app_locale();                 wui::set_locale_from_type(nextLocale, err);                 if (!err.is_ok())                 {                     std::cerr &lt;&lt; err.str() &lt;&lt; std::endl;                     return;                 }                  wui::config::set_int(\"User\", \"Locale\", static_cast&lt;int32_t>(nextLocale));  tooltip_text = wui::locale(\"window\", \"switch_lang\");  window->set_caption(wui::locale(\"main_frame\", \"caption\")); whatsYourNameText->set_text(wui::locale(\"main_frame\", \"whats_your_name_text\")); okButton->set_caption(wui::locale(\"main_frame\", \"ok_button\")); } break;             case wui::window_control::close:                 if (runned)                 {                     continue_ = false;                     messageBox->show(wui::locale(\"main_frame\", \"confirm_close_text\"),                         wui::locale(\"main_frame\", \"cross_message_caption\"), wui::message_icon::information, wui::message_button::yes_no,                         [this, &amp;continue_](wui::message_result r) { if (r == wui::message_result::yes) {                               wui::framework::stop(); }                         });                 }             break;         }     });      auto width = wui::config::get_int(\"MainFrame\", \"Width\", WND_WIDTH);     auto height = wui::config::get_int(\"MainFrame\", \"Height\", WND_HEIGHT);      window->init(wui::locale(\"main_frame\", \"caption\"), { -1, -1, width, height },         static_cast&lt;wui::window_style>(static_cast&lt;uint32_t>(wui::window_style::frame) |         static_cast&lt;uint32_t>(wui::window_style::switch_theme_button) | static_cast&lt;uint32_t>(wui::window_style::switch_lang_button) |         static_cast&lt;uint32_t>(wui::window_style::border_all)), [this]() {           wui::framework::stop();         }); }  void MainFrame::ReceiveEvents(const wui::event &amp;ev) {     if (ev.type == wui::event_type::internal)     {         switch (ev.internal_event_.type)         {             case wui::internal_event_type::window_created:                      break;             case wui::internal_event_type::size_changed:                         if (window->state() == wui::window_state::normal &amp;&amp;                     ev.internal_event_.x > 0 &amp;&amp; ev.internal_event_.y > 0)                 {                     wui::config::set_int(\"MainFrame\", \"Width\", ev.internal_event_.x);                     wui::config::set_int(\"MainFrame\", \"Height\", ev.internal_event_.y);                 }                 UpdateControlsPosition();             break;             case wui::internal_event_type::window_expanded:             case wui::internal_event_type::window_normalized:                 UpdateControlsPosition();             break;             case wui::internal_event_type::window_minimized:             break;         }     } }  void MainFrame::UpdateControlsPosition() {     const auto width = window->position().width(), height = window->position().height();      const int32_t top = 40, element_height = 40, space = 30;      wui::rect pos = { space, top, width - space, top + element_height };     whatsYourNameText->set_position(pos);     wui::line_up_top_bottom(pos, element_height, space);     userNameInput->set_position(pos);     wui::line_up_top_bottom(pos, element_height * 2, space);          int32_t center = width \/ 2;      pos.left = center - element_height, pos.right = center + element_height;      logoImage->set_position(pos);      okButton->set_position({center - 90,         height - element_height - space,         center + 90,         height - space     }); }  <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041e\u043a\u043d\u043e \u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044b \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0435 MainFrame. \u0422\u0430\u043c \u0436\u0435 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043d\u0430 \u043e\u043a\u043d\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044b. \u041a\u043e\u043b\u043b\u0431\u0435\u043a\u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043e\u0432 \u0434\u043b\u044f \u043a\u0440\u0430\u0442\u043a\u043e\u0441\u0442\u0438 \u043e\u0442\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043b\u044f\u043c\u0431\u0434.\u00a0<\/p>\n<p>\u041c\u0435\u0442\u043e\u0434 <code>Run()<\/code> \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043e\u043a\u043d\u043e \u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043b\u044f\u043c\u0431\u0434\u0443, \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0449\u0443\u044e \u043a\u043e\u043b\u043b\u0431\u0435\u043a\u0438 \u043e\u0442 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043e\u0432 \u043e\u043a\u043d\u0430 (\u043a\u043d\u043e\u043f\u043a\u0438 \u0441\u043c\u0435\u043d\u0430 \u044f\u0437\u044b\u043a\u0430 \u0438 \u0442\u0435\u043c\u044b).<br \/><code>ReceiveEvents()<\/code> \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043e\u0442 \u043e\u043a\u043d\u0430 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0440\u0435\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430 \u0440\u0435\u0441\u0430\u0439\u0437 \u043e\u043a\u043d\u0430 \u0432\u044b\u0437\u044b\u0432\u0430\u044f <code>UpdateControlsPosition()<\/code>. \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438 \u043f\u0435\u0440\u0435\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u043d\u043e\u0432\u044b\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043e\u0432.<\/p>\n<h2>\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u044b<\/h2>\n<p>\u041d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u044c\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e 14 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043e\u0432 \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u0435 WUI \u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u0445 \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u0435 \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u0421\u043f\u0438\u0441\u043e\u043a \u0438\u043c\u0435\u044e\u0449\u0438\u0445\u0441\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043e\u0432:<\/p>\n<h3>button<\/h3>\n<p>\u041a\u043d\u043e\u043f\u043a\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0432\u0438\u0434\u043e\u0432:<br \/>\u00a0 \u00a0 \u00a0 \u00a0 <code>text<br \/>\u00a0\u00a0\u00a0\u00a0image<br \/>\u00a0\u00a0\u00a0\u00a0image_right_text<br \/>\u00a0\u00a0\u00a0\u00a0image_bottom_text<br \/>\u00a0\u00a0\u00a0\u00a0switcher<br \/>\u00a0\u00a0\u00a0\u00a0radio<br \/>\u00a0\u00a0\u00a0\u00a0anchor<br \/>\u00a0\u00a0\u00a0\u00a0sheet<\/code><\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/381\/d2b\/c8b\/381d2bc8b0405b8ad492686254fb538c.png\" width=\"437\" height=\"412\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/381\/d2b\/c8b\/381d2bc8b0405b8ad492686254fb538c.png\"\/><\/figure>\n<h3>image<\/h3>\n<p>image \u043d\u0443\u0436\u0435\u043d \u0434\u043b\u044f \u0435\u0434\u0438\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u043e\u0433\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043f\u0438\u043a\u0442\u043e\u0433\u0440\u0430\u043c\u043c \u0441 \u0443\u0447\u0435\u0442\u043e\u043c \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u0442\u0435\u043c\u044b. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 <code>button<\/code> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 <code>image<\/code> \u0434\u043b\u044f \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0438\u043a\u0442\u043e\u0433\u0440\u0430\u043c\u043c \u043d\u0430 \u0441\u0435\u0431\u0435. image \u0440\u0438\u0441\u0443\u0435\u0442 \u0441\u0435\u0431\u044f \u0438\u0437 \u0440\u0435\u0441\u0443\u0440\u0441\u0430, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u0442\u0435\u043c\u0435. <\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f <code>image<\/code>:<\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0435\u0433\u043e image \u043a\u043b\u0430\u0441\u0441\u0430<\/p>\n<pre><code class=\"cpp\">logoImage(new wui::image(IMG_LOGO))...<\/code><\/pre>\n<p><code>IMG_LOGO<\/code> \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d \u0432 <code>resourse.h<\/code> \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"cpp\">#ifdef _WIN32 #define IMG_LOGO\u00a0 109 #else static constexpr const char* IMG_LOGO = \"logo.png\"; #endif<\/code><\/pre>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u0437\u044f\u0442\u043e \u0438\u0437 \u0440\u0435\u0441\u0443\u0440\u0441\u0430 exe \u043d\u0430 Windows \u0438\u043b\u0438 \u0438\u0437 \u0444\u0430\u0439\u043b\u0430 \u043d\u0430 \u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445.<br \/>\u041c\u0430\u0433\u0438\u044f \u0441\u043c\u0435\u043d\u044b \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043f\u0440\u0438 \u0441\u043c\u0435\u043d\u0435 \u0442\u0435\u043c\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c. image \u0438\u043c\u0435\u0435\u0442 \u0432 theme \u0441\u0432\u043e\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438:<\/p>\n<pre><code class=\"json\">light.json:     {       \"type\": \"image\",       \"resource\": \"IMAGES_LIGHT\",       \"path\": \"res\/images\/light\"     } dark.json:     {       \"type\": \"image\",       \"resource\": \"IMAGES_DARK\",       \"path\": \"res\/images\/dark\"     } <\/code><\/pre>\n<p>\u041f\u0443\u0442\u044c \u043a \u0444\u0430\u0439\u043b\u0443 \u0440\u0435\u0441\u0443\u0440\u0441\u0430 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u0437 \u043f\u0443\u0442\u0438 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u043c \u0432 theme \u0438 \u0438\u043c\u0435\u043d\u0438 \u0444\u0430\u0439\u043b\u0430 \u0432 <code>image<\/code> \u0447\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0437\u0430\u043c\u0435\u043d\u0435 \u0432\u0441\u0435\u0445 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u0440\u0438 \u0441\u043c\u0435\u043d\u0435 \u0442\u0435\u043c\u044b.<br \/>\u041d\u0430 Windows \u0441\u0442\u043e\u0438\u0442 \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044c \u043a\u0430\u043a \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u043d <code>rc<\/code> \u0444\u0430\u0439\u043b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/p>\n<pre><code class=\"cpp\">IMG_LOGO IMAGES_DARK \u00a0 \"res\\images\\dark\\logo.png\" IMG_LOGO IMAGES_LIGHT\u00a0 \"res\\images\\light\\logo.png\"<\/code><\/pre>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0437\u0430\u043c\u0435\u043d\u0430 \u0433\u0440\u0443\u043f\u043f\u044b <code>IMAGES_DARK \/ IMAGES_LIGHT<\/code> \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0439 \u044d\u0444\u0444\u0435\u043a\u0442 \u043a\u0430\u043a \u0441 \u0444\u0430\u0439\u043b\u0430\u043c\u0438, \u0431\u0435\u0437 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043c\u0435\u043d\u044f\u0442\u044c ID \u0440\u0435\u0441\u0443\u0440\u0441\u0430.<\/p>\n<h2>input<\/h2>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/277\/3d7\/9f9\/2773d79f9714fe2197c350b8f70bb293.png\" width=\"444\" height=\"157\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/277\/3d7\/9f9\/2773d79f9714fe2197c350b8f70bb293.png\"\/><\/figure>\n<p>\u0414\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0435\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0435 \u043f\u043e\u043b\u0435 \u0432\u0432\u043e\u0434\u0430. \u0422\u0430\u043a \u043a\u0430\u043a \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u0432\u043e\u044f, \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0435\u0442 Undo \/ Redo, \u043d\u043e \u0432 \u043f\u0435\u0440\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u0435 \u0442\u0430\u043c \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u044f\u0432\u0438\u0442\u044c\u0441\u044f \u0441\u043f\u0435\u043b\u043b \u0447\u0435\u043a\u0438\u043d\u0433, \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438, \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f.<\/p>\n<h3>list<\/h3>\n<p>\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a <code>item<\/code>\u2019\u043e\u0432 \u0441\u043e \u0441\u043a\u0440\u043e\u043b\u043b\u0438\u043d\u0433\u043e\u043c. \u041e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u043c \u043a\u043e\u0434\u043e\u043c \u0447\u0435\u0440\u0435\u0437 callback. \u0418\u043c\u0435\u0435\u0442\u0441\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c <code>item<\/code>\u2019\u044b \u0441 \u0440\u0430\u0437\u043d\u043e\u0439 \u0432\u044b\u0441\u043e\u0442\u043e\u0439. \u0421 \u0435\u0433\u043e \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0447\u0430\u0442, \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u043a \u0411\u0414, \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u043b\u044e\u0431\u043e\u0439 \u0441\u043f\u0438\u0441\u043e\u043a.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/aa3\/4f2\/bd9\/aa34f2bd948745a2a11d14db98f033eb.png\" alt=\"\u041f\u0440\u0438\u043c\u0435\u0440 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0447\u0430\u0442\u0430\" title=\"\u041f\u0440\u0438\u043c\u0435\u0440 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0447\u0430\u0442\u0430\" width=\"579\" height=\"236\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/aa3\/4f2\/bd9\/aa34f2bd948745a2a11d14db98f033eb.png\"\/><\/p>\n<div><figcaption>\u041f\u0440\u0438\u043c\u0435\u0440 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0447\u0430\u0442\u0430<\/figcaption><\/div>\n<\/figure>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ec9\/0e9\/7c3\/ec90e97c365d4b55d942c71f7ffac86c.png\" alt=\"\u0421\u043f\u0438\u0441\u043e\u043a \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043e\u0432\" title=\"\u0421\u043f\u0438\u0441\u043e\u043a \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043e\u0432\" width=\"285\" height=\"440\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ec9\/0e9\/7c3\/ec90e97c365d4b55d942c71f7ffac86c.png\"\/><\/p>\n<div><figcaption>\u0421\u043f\u0438\u0441\u043e\u043a \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043e\u0432<\/figcaption><\/div>\n<\/figure>\n<h3>menu<\/h3>\n<p>\u041c\u0435\u043d\u044e \u043b\u0435\u043d\u0442\u043e\u0447\u043d\u044b\u0435, \u0431\u0435\u0437 \u0431\u043e\u043a\u043e\u0432\u044b\u0445 \u043e\u0442\u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u0439. \u0412\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0440\u0430\u0441\u043a\u0440\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432\u043d\u0438\u0437, \u0443\u0434\u043b\u0438\u043d\u044f\u044f \u043c\u0435\u043d\u044e.<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/315\/ca4\/ce4\/315ca4ce431f50b0e50f2c100cda12c9.png\" width=\"296\" height=\"237\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/315\/ca4\/ce4\/315ca4ce431f50b0e50f2c100cda12c9.png\"\/><\/figure>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d27\/a7f\/cdc\/d27a7fcdcecac70bcba33311032bd667.png\" width=\"299\" height=\"445\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d27\/a7f\/cdc\/d27a7fcdcecac70bcba33311032bd667.png\"\/><\/figure>\n<details class=\"spoiler\">\n<summary>\u041c\u0435\u043d\u044e \u0437\u0430\u0434\u0430\u0435\u0442\u0441\u044f \u0432 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u0442\u0438\u043b\u0435, \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u043c:<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">menu->set_items({             { 0, wui::menu_item_state::separator, \"Bla bla bla\", \"\", menuImage1, {}, [](int32_t i) {} },             { 1, wui::menu_item_state::normal, \"Expand me 1\", \"\", nullptr, {                     { 11, wui::menu_item_state::normal, \"Expanded 1.1\", \"\", nullptr, {}, [](int32_t i) {} },                     { 12, wui::menu_item_state::normal, \"Expanded 1.2\", \"\", nullptr, {                             { 121, wui::menu_item_state::normal, \"Expanded 1.1.1\", \"\", nullptr, {}, [](int32_t i) {} },                             { 122, wui::menu_item_state::normal, \"Expanded 1.1.2\", \"Shift+Del\", menuImage2, {}, [](int32_t i) {} },                             { 123, wui::menu_item_state::separator, \"Expanded 1.1.3\", \"\", nullptr, {}, [](int32_t i) {} },                         }, [](int32_t i) {} },                     { 13, wui::menu_item_state::normal, \"Expanded 1.3\", \"\", nullptr, {}, [](int32_t i) {} },                 }, [](int32_t i) {} },             { 2, wui::menu_item_state::separator, \"Expand me 2\", \"Ctrl+Z\", nullptr, {                     { 21, wui::menu_item_state::normal, \"Expanded 2.1\", \"\", nullptr, {}, [](int32_t i) {} },                     { 22, wui::menu_item_state::normal, \"Expanded 2.2\", \"\", nullptr, {}, [](int32_t i) {} },                     { 23, wui::menu_item_state::separator, \"Expanded 2.3\", \"\", nullptr, {}, [](int32_t i) {} },                 }, [](int32_t i) {} },             { 3, wui::menu_item_state::normal, \"Exit\", \"Alt+F4\", nullptr, {}, [&amp;window](int32_t i) { window->destroy(); } }         });<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0412\u043d\u0443\u0442\u0440\u0438, \u043c\u0435\u043d\u044e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 list<\/p>\n<h2>message<\/h2>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b4a\/0e1\/b1a\/b4a0e1b1acdd614b5ca0c4ccce8b9fb1.png\" width=\"546\" height=\"211\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b4a\/0e1\/b1a\/b4a0e1b1acdd614b5ca0c4ccce8b9fb1.png\"\/><\/figure>\n<p>\u0418\u043c\u0435\u0435\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u043d\u0430\u0431\u043e\u0440\u044b \u043a\u043d\u043e\u043f\u043e\u043a \u0438 \u043f\u0438\u043a\u0442\u043e\u0433\u0440\u0430\u043c\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u0432 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f\u0445<br \/><code>message_icon, message_button<\/code> \u0438 <code>message_result<\/code>. \u041f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0435\u0441\u0442\u044c \u043e\u0434\u043d\u0430 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e \u043d\u0430\u0447\u0430\u043b\u0443 \u043f\u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043d\u0435\u043f\u0440\u0438\u0432\u044b\u0447\u043d\u043e\u0439, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e, \u0432\u044b\u0437\u043e\u0432 <code>message::show()<\/code> \u043d\u0435 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u043f\u043e\u0442\u043e\u043a. \u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 ID \u043d\u0430\u0436\u0430\u0442\u043e\u0439 \u043a\u043d\u043e\u043f\u043a\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043a\u043e\u043b\u043b\u0431\u0435\u043a\u0435. \u041f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre><code class=\"cpp\">messageBox->show(\u201cmessage\u201d, \"header\", wui::message_icon::information,                                  wui::message_button::yes_no, [this](wui::message_result result) {    if (result == wui::message_result::yes)    {        \/\/\/ \u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c \u0437\u0434\u0435\u0441\u044c    } }); <\/code><\/pre>\n<h3>panel<\/h3>\n<p>\u041f\u0440\u043e\u0441\u0442\u043e\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b, \u0434\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a \u0446\u0432\u0435\u0442\u0430 theme \u043d\u0430 \u043e\u043a\u043d\u0435.<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/8db\/d95\/9a7\/8dbd959a7292fe802c3d0e8397fcf888.png\" width=\"400\" height=\"104\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8db\/d95\/9a7\/8dbd959a7292fe802c3d0e8397fcf888.png\"\/><\/figure>\n<h3>select<\/h3>\n<p>\u0412\u044b\u043f\u0430\u0434\u0430\u044e\u0449\u0438\u0439 \u0441\u043f\u0438\u0441\u043e\u043a, \u043e\u043d \u0436\u0435 combo box. \u041d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430, \u0442 \u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u0438\u0437 \u0438\u043c\u0435\u044e\u0449\u0435\u0433\u043e\u0441\u044f. \u0420\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u0442\u0430\u043a\u0436\u0435 \u043d\u0430 list.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/1e3\/cbb\/680\/1e3cbb6803aa0f9a170b7ef979fce21c.png\" width=\"588\" height=\"234\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/1e3\/cbb\/680\/1e3cbb6803aa0f9a170b7ef979fce21c.png\"\/><\/figure>\n<h3>slider<\/h3>\n<p>\u041e\u043d \u0436\u0435 \u201c\u0440\u0435\u0433\u0443\u043b\u044f\u0442\u043e\u0440 \u0433\u0440\u043e\u043c\u043a\u043e\u0441\u0442\u0438\u201d. \u041a\u0430\u043a \u0438 progress \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u043c \u0438 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u043c.<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/83e\/eab\/716\/83eeab7165e344c98dc6e17b423e8b92.png\" width=\"90\" height=\"250\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/83e\/eab\/716\/83eeab7165e344c98dc6e17b423e8b92.png\"\/><\/figure>\n<p>\u0417\u0434\u0435\u0441\u044c text, slider \u0438 button<\/p>\n<h2>splitter<\/h2>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/86c\/b0a\/787\/86cb0a787741cde752b3ff398e964271.png\" width=\"883\" height=\"357\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/86c\/b0a\/787\/86cb0a787741cde752b3ff398e964271.png\"\/><\/figure>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0440\u0435\u0441\u0430\u0439\u0437\u0430 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u043e\u043a\u043e\u043d.<\/p>\n<h3>text<\/h3>\n<p>\u0422\u0435\u043a\u0441\u0442\u043e\u0432\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430. \u041f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0437\u0430\u0434\u0430\u0442\u044c \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435 \u0442\u0435\u043a\u0441\u0442\u0430 \u0438 \u0441\u0442\u0430\u0432\u0438\u0442 \u043c\u043d\u043e\u0433\u043e\u0442\u043e\u0447\u0438\u0435 \u0435\u0441\u043b\u0438 \u0442\u0435\u043a\u0441\u0442 \u043d\u0435 \u0432\u043b\u0435\u0437\u0430\u0435\u0442 \u0432 \u043e\u0442\u0432\u0435\u0434\u0435\u043d\u043d\u0443\u044e \u043e\u0431\u043b\u0430\u0441\u0442\u044c.<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a14\/202\/13f\/a1420213f688ecbf9f2d6a54664d8052.png\" width=\"401\" height=\"39\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a14\/202\/13f\/a1420213f688ecbf9f2d6a54664d8052.png\"\/><\/figure>\n<h2>tooltip<\/h2>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/552\/a1f\/b7e\/552a1fb7e4a882d2fb0c8fe948783437.png\" width=\"118\" height=\"74\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/552\/a1f\/b7e\/552a1fb7e4a882d2fb0c8fe948783437.png\"\/><\/figure>\n<p>\u0412\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0449\u0430\u044f \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0430.<\/p>\n<h3>trayicon<\/h3>\n<p>\u041f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u043a\u043e\u043d\u043a\u043e\u0439 \u0432 \u0442\u0440\u0435\u0435 \u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043f\u043b\u0430\u0448\u043a\u0430\u043c\u0438.<\/p>\n<h2>\u0417\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438<\/h2>\n<p>WUI \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0442\u0440\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0432 <code>thirdparty<\/code>. \u042d\u0442\u043e: <code>boost::nowide, nlohman::json<\/code> \u0438 <code>utf8<\/code> \u043e\u0442 Nemanja Trifunovic. \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0434\u0432\u0435, header only \u0438 \u0445\u043b\u043e\u043f\u043e\u0442 \u043d\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442. <code>boost::widen<\/code> \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0435 \u201c\u0432\u044b\u0440\u0435\u0437\u043a\u0438\u201d \u0438\u0437 boost, \u0438\u043c\u0435\u044e\u0442\u0441\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u043d\u0430 vs 2017 \u0438 2019 \u0432\u0435\u0440\u0441\u0438\u044f boost: 1.82. \u0415\u0441\u043b\u0438 \u0432 \u0432\u0430\u0448\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0443\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f boost (\u0442\u0435\u043c \u0431\u043e\u043b\u0435\u0435 \u0434\u0440\u0443\u0433\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438), \u043b\u0443\u0447\u0448\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0434\u043b\u044f wui \u043f\u0443\u0442\u044c \u043a \u0432\u0430\u0448\u0435\u043c\u0443 boost.<\/p>\n<p>\u0412\u043d\u0435\u0448\u043d\u0438\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u043d\u0430 Windows. \u041d\u0430 Linux, \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442, \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f xcb \u0438 cairo.<\/p>\n<h2>\u0412\u043c\u0435\u0441\u0442\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f<\/h2>\n<p>\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u0435 \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0448\u043b\u0430 \u043e\u043f\u044b\u0442\u043d\u0443\u044e \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u044e \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043a\u0440\u0443\u043f\u043d\u044b\u0445 \u043f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u044f\u0445 \u043f\u0440\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0438 \u043c\u0435\u0434\u0438\u0446\u0438\u043d\u0441\u043a\u043e\u0433\u043e \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0430. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 Windows \u043e\u0442 XP \u0434\u043e 11 \u0438 Linux \u043e\u0442 CentOS 6 \u0434\u043e Ubuntu 22. <\/p>\n<p>\u041f\u043e \u043d\u0430\u0434\u0435\u0436\u043d\u043e\u0441\u0442\u0438 \u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0432\u0435\u0441\u044c\u043c\u0430 \u0434\u043e\u0441\u0442\u043e\u0439\u043d\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b (\u043d\u0435\u0442 \u043f\u0430\u0434\u0435\u043d\u0438\u0439, \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u043e\u0432, \u0443\u0442\u0435\u0447\u0435\u043a \u043f\u0430\u043c\u044f\u0442\u0438), \u0447\u0442\u043e \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u043b\u043e \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c \u043f\u0440\u0438\u043d\u044f\u0442\u044b\u0445 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u0439.<\/p>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430 &#8212; \u044d\u0442\u043e \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 macOS \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u043e\u0432\u044b\u0445 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043e\u0432. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043d\u0443\u0436\u0435\u043d \u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u044c, \u043c\u043d\u043e\u0433\u043e\u0441\u0442\u0440\u043e\u0447\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440, \u0433\u0440\u0438\u0434 \u0434\u043b\u044f \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445, \u0447\u0430\u0440\u0442\u044b \u0438 \u043f\u0440\u043e\u0447\u0435\u0435. \u041d\u0443\u0436\u0435\u043d \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0445\u043e\u0442\u044f \u0431\u044b \u0434\u0438\u0430\u043b\u043e\u0433\u043e\u0432. \u0422\u0430\u043a\u0436\u0435 \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c X11 \u043d\u0430\u00a0 Wayland \u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0433\u0440\u0430\u0444\u0438\u043a\u0443 \u043d\u0430 Vulkan.<\/p>\n<p>\u0411\u0443\u0434\u0435\u043c \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u043d\u044b \u0437\u0430 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u0438\u0432\u043d\u0443\u044e \u043a\u0440\u0438\u0442\u0438\u043a\u0443, \u043f\u043e\u043c\u043e\u0449\u044c \u0432 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0438\u0434\u0435\u044f\u043c\u0438, \u043a\u043e\u0434\u043e\u043c, \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0435\u043c.<\/p>\n<p>\u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u0438\u043d\u0442\u0435\u0440\u0435\u0441!<\/p>\n<p>Github: <a href=\"https:\/\/github.com\/ud84\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/ud84<\/a><br \/>Project site: <a href=\"https:\/\/libwui.org\/\" rel=\"noopener noreferrer nofollow\">https:\/\/libwui.org\/<\/a><\/p>\n<\/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\/768336\/\"> https:\/\/habr.com\/ru\/articles\/768336\/<\/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>\u041d\u0430\u0447\u0430\u043b\u043e\u0441\u044c \u0432\u0441\u0435 \u043f\u043e\u0447\u0442\u0438 \u0434\u0432\u0430 \u0433\u043e\u0434\u0430 \u043d\u0430\u0437\u0430\u0434 \u0432 \u0434\u0435\u043a\u0430\u0431\u0440e, \u043d\u0430\u0448 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 (\u0432\u0438\u0434\u0435\u043e \u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440) \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b WTL \u0434\u043b\u044f Windows \u0438 GTKmm \u0434\u043b\u044f Linux. \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u043c\u0430\u043a\u0430 \u043d\u0435 \u0431\u044b\u043b\u043e. \u041e\u0433\u0440\u043e\u043c\u043d\u043e\u0439 \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u043e\u0441\u0442\u044c\u044e \u0431\u044b\u043b\u043e \u0442\u0430\u0449\u0438\u0442\u044c \u0434\u0432\u0430 \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u044b\u0445 \u043a\u043b\u0438\u0435\u043d\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435, \u043f\u043e \u0438\u0434\u0435\u0435, \u0434\u043e\u043b\u0436\u043d\u044b \u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0441\u0435 \u0441\u0442\u0440\u043e\u0433\u043e \u043e\u0434\u043d\u043e \u0438 \u0442\u043e\u0436\u0435. \u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u044d\u0442\u043e \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u043b\u043e\u0441\u044c. \u041e\u0442 \u043c\u044b\u0441\u043b\u0438 \u0447\u0442\u043e \u043d\u0430\u0434\u043e \u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u043a\u043b\u0438\u0435\u043d\u0442 \u0434\u043b\u044f \u043c\u0430\u043a\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u043b\u0441\u044f \u043d\u0435\u0440\u0432\u043d\u044b\u0439 \u0442\u0438\u043a&#8230;<\/p>\n<p>\u041d\u0430 \u0440\u0435\u0437\u043e\u043d\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441 &#8212; \u043f\u043e\u0447\u0435\u043c\u0443 \u0441\u0440\u0430\u0437\u0443 \u0434\u0435\u043b\u0430\u043b\u043e\u0441\u044c \u043d\u0435 \u043d\u0430 Qt \u043c\u043e\u0433\u0443 \u043b\u0438\u0448\u044c \u043e\u0442\u0432\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u044d\u0442\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0441, \u0442\u0430\u043a \u0441\u043a\u0430\u0436\u0435\u043c, \u0433\u0443\u0440\u043c\u0430\u043d\u0441\u043a\u0438\u043c\u0438 \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0435\u043d\u0438\u044f\u043c\u0438 \u0438, \u043e\u0442\u0447\u0430\u0441\u0442\u0438, \u0441 \u043b\u044e\u0431\u043e\u0432\u044c\u044e \u043a \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u043d\u044b\u043c exe. \u0414\u0430 \u0438 \u043d\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u043d\u0430 \u0441\u0442\u0430\u0440\u0442\u0435 \u043d\u0438\u0447\u0435\u0433\u043e \u043a\u0440\u043e\u043c\u0435 \u0432\u0438\u043d\u0434\u044b.<\/p>\n<p>\u0412 \u0442\u0435\u0447\u0435\u043d\u0438\u0435 \u0448\u0435\u0441\u0442\u0438 \u043b\u0435\u0442 \u0436\u0438\u0437\u043d\u0438 \u0441 \u0434\u0432\u0443\u043c\u044f \u043a\u043e\u0434\u043e\u0432\u044b\u043c\u0438 \u0431\u0430\u0437\u0430\u043c\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0438 \u0442\u043e\u0433\u043e \u0436\u0435, \u043d\u0435\u0441\u043f\u0435\u0448\u043d\u043e \u043f\u043e\u0434\u0431\u0438\u0440\u0430\u043b\u0438\u0441\u044c \u043b\u0435\u0433\u043a\u043e\u0432\u0435\u0441\u043d\u044b\u0435 UI \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u0445\u043e\u0442\u044f \u0431\u044b \u0432 \u0441\u0442\u0438\u043b\u0435 C++11.<\/p>\n<p>\u041d\u0430\u0434\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u043c\u044b \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c boost \u0438 \u0432\u0441\u0435\u0439 \u0434\u0443\u0448\u043e\u0439, \u043a\u0430\u043a \u043c\u043e\u0436\u0435\u043c, \u0435\u0433\u043e \u043b\u044e\u0431\u0438\u043c&#8230;<\/p>\n<p>\u0412 2021 \u0433\u043e\u0434\u0443 \u0432\u0438\u0434\u0438\u043c\u043e \u0413\u0443\u0433\u043b \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u043f\u043b\u043e\u0445\u043e \u0438\u043b\u0438 \u0437\u0432\u0451\u0437\u0434\u044b \u0442\u0430\u043a \u0441\u043e\u0448\u043b\u0438\u0441\u044c, \u043d\u043e \u043d\u0435 \u043d\u0430\u0448\u043b\u043e\u0441\u044c \u043d\u0438\u0447\u0435\u0433\u043e \u0441\u0442\u043e\u044f\u0449\u0435\u0433\u043e. \u0412\u0441\u0435 \u0447\u0442\u043e \u043f\u043e\u043f\u0430\u0434\u0430\u043b\u043e\u0441\u044c &#8212; \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433\u0435 html \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u0438 \u043e\u0431\u0435\u0440\u0442\u043a\u0430 \u043d\u0430\u0434 wxWidgets. \u0421\u0435\u0439\u0447\u0430\u0441 \u0442\u043e \u043c\u044b \u0437\u043d\u0430\u0435\u043c \u043f\u0440\u043e lvgl, \u0434\u0430&#8230; \u0410 \u0432\u043e\u043e\u0431\u0449\u0435, <a href=\"https:\/\/philippegroarke.com\/posts\/2018\/c++_ui_solutions\/\" rel=\"noopener noreferrer nofollow\">\u0442\u044b\u0441\u044f\u0447\u0438 \u0438\u0445<\/a>.<\/p>\n<p>wxWidgets \u043d\u0435 \u043f\u043b\u043e\u0445, \u043d\u043e \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0441\u0432\u043e\u0435\u0433\u043e \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f, \u0431\u0435\u0437 \u043e\u043a\u043e\u0448\u0435\u043a \u043f\u043e\u0434 \u043a\u043d\u043e\u043f\u043a\u0438, \u043f\u043e\u043b\u044f \u0432\u0432\u043e\u0434\u0430 \u0438 \u0441\u043f\u0438\u0441\u043a\u0438, boost\/bsd \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0439 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0435\u0439, \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043b\u0430\u043a\u043e\u043d\u0438\u0447\u043d\u043e\u0439, \u0438 \u0432 \u0438\u0434\u0435\u0430\u043b\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0435\u0439 \u043e\u0442 Windows XP \/ CentOS 6 \u043d\u0430 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u043c GDI \/ X11 \u0434\u043e Vulkan \u043d\u0430 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043c\u0430\u0448\u0438\u043d\u0430\u0445.<\/p>\n<p>\u0412 \u0438\u0442\u043e\u0433\u0435, \u0432\u0441\u0435 \u0436\u0435 \u0431\u044b\u043b\u043e \u043f\u0440\u0438\u043d\u044f\u0442\u043e \u0432\u043e\u043b\u0435\u0432\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 UI \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0438 \u0441\u0440\u0430\u0437\u0443 \u0432\u044b\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0435\u0433\u043e \u0432 Open Source \u043f\u043e\u0434 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0435\u0439 boost.\u00a0<\/p>\n<h2>\u0417\u0430\u0434\u0430\u0447\u0438 \u0434\u043b\u044f UI \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430<\/h2>\n<p>&#8212; \u0420\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0430 Windows (\u041a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c 7, \u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438 \u043d\u0430 XP)<\/p>\n<p>&#8212; \u0420\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0430 Linux (\u041d\u0430\u0447\u0438\u043d\u0430\u044f \u043e\u0442 \u0443\u0441\u043b\u043e\u0432\u043d\u043e\u0439 Ubuntu 16 \/ CentOS6)<\/p>\n<p>&#8212; \u0420\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0430 macOS<\/p>\n<p>&#8212; \u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u043e\u043a\u043d\u0430 \u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u043d\u0430 \u043d\u0438\u0445 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044b.\u00a0<\/p>\n<p>&#8212; \u041f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043e\u0431\u0449\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043a \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u043e-\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b \u043e\u0434\u0438\u043d \u0440\u0430\u0437, \u043d\u0430 \u043b\u044e\u0431\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435, \u0438 \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0438 \u0432\u0435\u0441\u0442\u0438 \u0441\u0435\u0431\u044f \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e \u043d\u0430 \u0432\u0441\u0435\u0445.<\/p>\n<p>&#8212; \u041f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043e\u0431\u0449\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043a \u0441\u043e\u0431\u044b\u0442\u0438\u044f\u043c. \u041b\u044e\u0431\u043e\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b \u0438\u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043b\u044e\u0431\u0443\u044e \u0433\u0440\u0443\u043f\u043f\u0443 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0443\u044e, \u0441 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0439 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438\/\u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439.<\/p>\n<p>&#8212; \u041f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f, \u0440\u0435\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u043c\u044b\u0448\u044c, \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u0443 \u0438 \u043f\u0440\u043e\u0447\u0438\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f.<\/p>\n<p>&#8212; \u0418\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043c\u0435\u043d\u044f\u0442\u044c \u0446\u0432\u0435\u0442\u043e\u0432\u0443\u044e \u0433\u0430\u043c\u043c\u0443 \/ \u0441\u0442\u0438\u043b\u044c \/ \u043f\u0438\u043a\u0442\u043e\u0433\u0440\u0430\u043c\u043c\u044b \/ \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0445 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043e\u0432 \/ \u043e\u043a\u043e\u043d \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430. \u0425\u0440\u0430\u043d\u0438\u0442\u044c \u0432\u0441\u0435 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432 json, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0438\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432 \u043d\u0435\u043c \u0436\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f.<\/p>\n<p>&#8212; \u041f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0445 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442 \u0434\u043b\u044f \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432 \u0438 \u043d\u0430\u0434\u043f\u0438\u0441\u0435\u0439 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430.<\/p>\n<p>&#8212; \u0418\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0442\u043a\u0440\u0435\u043f\u043b\u044f\u0442\u044c \/ \u043f\u0440\u0438\u043a\u0440\u0435\u043f\u043b\u044f\u0442\u044c \u043e\u043a\u043d\u0430 \u0434\u0440\u0443\u0433 \u043e\u0442 \u0434\u0440\u0443\u0433\u0430.<\/p>\n<p>&#8212; \u041f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 UI \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043e\u0432 \u0438 \u0438\u043c\u0435\u0442\u044c \u043f\u043e\u043d\u044f\u0442\u043d\u0443\u044e \u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0443\u044e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u044b\u0445 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043e\u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u043c\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c\u0438 \u0434\u043b\u044f \u0441\u0432\u043e\u0438\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439.<\/p>\n<p>&#8212; \u0418\u043c\u0435\u0442\u044c \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043a\u043e\u043d\u0444\u0438\u0433\u0430\u043c\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439. \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0440\u0435\u0435\u0441\u0442\u0440 Windows \u0438 ini \u0444\u0430\u0439\u043b\u044b. \u0415\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0441 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f.<\/p>\n<h2>\u041e\u0431\u0449\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430<\/h2>\n<figure class=\"full-width\"><\/figure>\n<p>\u0412\u0441\u0435 \u0431\u0430\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430 \u0434\u0432\u0443\u0445 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044f\u0445 &#8212; Window \u0438 Control. \u041e\u043a\u043d\u043e \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044b, \u0442\u0430\u043a\u0436\u0435 \u0441\u0430\u043c\u043e \u043e\u043a\u043d\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043e\u043c.\u00a0<\/p>\n<p>Control &#8212; \u044d\u0442\u043e \u043b\u044e\u0431\u043e\u0439 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c &#8212; \u043a\u043d\u043e\u043f\u043a\u0430, \u043f\u043e\u043b\u0435 \u0432\u0432\u043e\u0434\u0430, \u0441\u043f\u0438\u0441\u043e\u043a, \u043c\u0435\u043d\u044e \u0438 \u0442.\u0434. Control \u0437\u043d\u0430\u0435\u0442, \u043a\u0430\u043a \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0441\u043e\u0431\u044b\u0442\u0438\u044f, \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u044e\u0449\u0438\u0435 \u043e\u0442 Window, \u0445\u0440\u0430\u043d\u0438\u0442 \u0441\u0432\u043e\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0438 \u0440\u0438\u0441\u0443\u0435\u0442 \u0441\u0435\u0431\u044f \u043d\u0430 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u043c \u0435\u0433\u043e \u043e\u043a\u043d\u043e\u043c.<\/p>\n<p>Window &#8212; \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0438 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0438\u0445 \u0440\u0430\u0441\u0441\u044b\u043b\u043a\u0443 \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a\u0430\u043c. \u0422\u0430\u043a \u0436\u0435 \u043e\u043a\u043d\u043e \u0434\u0430\u0435\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u043d\u0430 \u043f\u0435\u0440\u0435\u0440\u0438\u0441\u043e\u0432\u043a\u0443 \u0441\u0432\u043e\u0438\u0445 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043e\u0432 \u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u043c \u0441\u0432\u043e\u0439 graphic. \u041a\u0440\u043e\u043c\u0435 \u044d\u0442\u043e\u0433\u043e, \u043e\u043a\u043d\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0444\u043e\u043a\u0443\u0441\u043e\u043c \u0432\u0432\u043e\u0434\u0430, \u043c\u043e\u0436\u0435\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043c\u043e\u0434\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u043c\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u0438\u043b\u0438 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0441\u043e\u0431\u044b\u0442\u0438\u0435.<\/p>\n<p>Graphic &#8212; \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043a \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u043c \u043c\u0435\u0442\u043e\u0434\u0430\u043c \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f. \u0412 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442, \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430 Windows GDI\/GDI+ \u0438 Linux xcb\/cairo. \u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u043d\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0438\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430 vulcan\/bare metal\/etc.<\/p>\n<p>\u0412 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 \u0442\u0430\u043a\u0436\u0435 \u0435\u0441\u0442\u044c \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b &#8212; \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b <code>common<\/code> (\u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0442\u0430\u043a\u0438\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0442\u0438\u043f\u044b, \u043a\u0430\u043a <code>rect, color, font<\/code>), <code>event<\/code> (\u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043c\u044b\u0448\u0438, \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044b, \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0435 \u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f), <code>graphic<\/code> (\u0434\u043b\u044f \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u043c \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435) <code>theme<\/code> (\u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442 \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u043d\u043e\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u0442\u0435\u043c) , <code>locale<\/code> (\u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430), <code>config <\/code>(\u0434\u043b\u044f \u0443\u0434\u043e\u0431\u043d\u043e\u0439, \u0435\u0434\u0438\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f)<\/p>\n<h2>\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0441\u043d\u043e\u0432\u043e\u043f\u043e\u043b\u0430\u0433\u0430\u044e\u0449\u0438\u0435 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u044b<\/h2>\n<p>\u0412 \u043e\u0431\u0449\u0438\u0445 \u0447\u0435\u0440\u0442\u0430\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \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<p>\u041e\u043a\u043d\u043e \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a: \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438, \u0432\u0432\u043e\u0434 \u0441 \u043c\u044b\u0448\u0438 \u0438 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044b, \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432, \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f. \u0414\u0430\u043d\u043d\u044b\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a\u0430\u043c \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u043e\u043a\u043d\u0430, \u044d\u0442\u043e, \u0432\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0435\u0441\u044f \u043d\u0430 \u043e\u043a\u043d\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044b, \u0432\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u043a\u043e\u0434 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438. \u0414\u043b\u044f \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b, \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u044f, \u043e\u0442\u043d\u043e\u0441\u044f\u0449\u0438\u0435\u0441\u044f \u043a \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0443: \u043c\u044b\u0448\u044c \u2014 \u0432 \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0435, \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u043c\u043e\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043e\u043c; \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u0430 \u2014 \u0435\u0441\u043b\u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0443 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442 \u0444\u043e\u043a\u0443\u0441 \u0432\u0432\u043e\u0434\u0430.  <\/p>\n<p>\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439\/\u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u043e\u0442 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0430 \u043a\u043e\u043b\u043b\u0431\u044d\u043a\u0430\u043c\u0438. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b\u043e \u0440\u0430\u0434\u0438\u043a\u0430\u043b\u044c\u043d\u043e \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0441\u043e\u0431\u044b\u0442\u0438\u0439, \u043d\u0435 \u043f\u043e\u0442\u0435\u0440\u044f\u0432 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u0438, \u043d\u0430 \u043d\u0430\u0448 \u0432\u0437\u0433\u043b\u044f\u0434, \u0432\u044b\u0438\u0433\u0440\u0430\u0432 \u0432 \u043b\u0430\u043a\u043e\u043d\u0438\u0447\u043d\u043e\u0441\u0442\u0438. <\/p>\n<p>\u041f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u0447\u0430\u0441\u0442\u0438 \u043e\u043a\u043d\u0430, \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u043e\u0438\u0441\u043a \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0449\u0438\u0445 \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043e\u0432 \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u043f\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0443 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043e\u0432 \u043d\u0430 \u043e\u043a\u043d\u043e, \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043c\u0435\u0442\u043e\u0434 draw() \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0430. \u041a\u043e\u043d\u0442\u0440\u043e\u043b\u044b \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0438\u0435 \u0432 topmost() true \u0440\u0438\u0441\u0443\u044e\u0442\u0441\u044f \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u0447\u0442\u043e\u0431\u044b \u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u0432\u0435\u0440\u0445\u0443 \u0441\u0442\u0435\u043a\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043e\u0432.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u044f\u0441\u043d\u0438\u0442\u044c, \u043a\u0430\u043a \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430, \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u043c \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b \u043e\u043a\u043d\u0430, \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0430 \u0438 \u0433\u0440\u0430\u0444\u0438\u043a\u0430<\/p>\n<h3>\u041c\u0435\u0442\u043e\u0434\u044b window<\/h3>\n<details class=\"spoiler\">\n<summary>i_window.hpp<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \/ \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0435\u043d\u0438\u0435 \u043e\u043a\u043d\u0430<\/p>\n<pre><code class=\"cpp\">bool init(const std::string &amp;caption, const rect &amp;position, window_style style, std::function&lt;void(void)> close_callback); void destroy();<\/code><\/pre>\n<p>\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435\/\u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0430<\/p>\n<pre><code class=\"cpp\">void add_control(std::shared_ptr&lt;i_control> control, const rect &amp;position); void remove_control(std::shared_ptr&lt;i_control> control);<\/code><\/pre>\n<p>\u041f\u0435\u0440\u0435\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0435\u0442 \u0447\u0430\u0441\u0442\u044c \u043e\u043a\u043d\u0430 \u0441 \u0438\u043c\u0435\u044e\u0449\u0438\u043c\u0438\u0441\u044f \u043d\u0430 \u0434\u0430\u043d\u043d\u043e\u043c \u0443\u0447\u0430\u0441\u0442\u043a\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0430\u043c\u0438. \u042d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043e\u043c, \u043a\u043e\u0433\u0434\u0430 \u0435\u043c\u0443 \u043d\u0443\u0436\u043d\u043e \u0441\u0435\u0431\u044f \u043f\u0435\u0440\u0435\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c. \u0412 \u043e\u0442\u0432\u0435\u0442 \u043e\u043a\u043d\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 draw() \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0430 \u0441 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u043c graphic (\u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043e\u043c \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f).<\/p>\n<pre><code class=\"cpp\">void redraw(const rect &amp;position, bool clear = false);<\/code><\/pre>\n<p>\u041c\u0435\u0442\u043e\u0434\u044b \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0438 \u043d\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043e\u043a\u043d\u043e. \u0421\u043e\u0431\u044b\u0442\u0438\u044f \u0431\u044b\u0432\u0430\u044e\u0442 \u043e\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0435 \u0438\u043b\u0438 \u043e\u0442 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/p>\n<pre><code class=\"cpp\">std::string subscribe(std::function&lt;void(const event&amp;)> receive_callback, event_type event_types, std::shared_ptr&lt;i_control> control = nullptr); void unsubscribe(const std::string &amp;subscriber_id);<\/code><\/pre>\n<p>\u041f\u0440\u0438 \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0436\u0435\u043b\u0430\u0435\u043c\u044b\u0435 \u043a \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044e \u0442\u0438\u043f\u044b \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0438 \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a\u0443 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043a\u0435\u043d, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0434\u043b\u044f \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043e\u0442\u043f\u0438\u0441\u043a\u0438 \u0447\u0435\u0440\u0435\u0437 unsubscribe().<\/p>\n<p>\u041f\u043e\u0441\u043b\u0430\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0448\u0435\u0434\u0443\u043b\u0435\u0440 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 (Win32 \/ X11)<\/p>\n<pre><code class=\"cpp\">void emit_event(int32_t x, int32_t y);<\/code><\/pre>\n<p>\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0443\u044e \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u043e \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0435 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 \u043e\u043a\u043d\u0430 <code>HWND<\/code> \u0432 Windows \u0438\u043b\u0438 <code>xcb_connection \/ Display<\/code> \u0432 Linux.<\/p>\n<pre><code class=\"cpp\">system_context &amp;context();<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<h2>\u041c\u0435\u0442\u043e\u0434\u044b control<\/h2>\n<p>\u041a\u0430\u0436\u0434\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b \u0434\u043e\u043b\u0436\u0435\u043d \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u044d\u0442\u0438 \u043c\u0435\u0442\u043e\u0434\u044b. \u0422\u0430\u043a \u0436\u0435 \u043e\u043a\u043d\u043e, \u0441\u0430\u043c\u043e \u044f\u0432\u043b\u044f\u044f\u0441\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043e\u043c, \u0434\u043e\u043b\u0436\u043d\u043e \u0438\u0445 \u0438\u043c\u043f\u043b\u0435\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c.<\/p>\n<details class=\"spoiler\">\n<summary>i_control.hpp <\/summary>\n<div class=\"spoiler__content\">\n<p>\u041c\u0435\u0442\u043e\u0434 \u0433\u0434\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b \u0434\u043e\u043b\u0436\u0435\u043d \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0441\u0435\u0431\u044f. \u0412\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f\u00a0<em>\u0442\u043e\u043b\u044c\u043a\u043e \u043e\u043a\u043d\u043e\u043c<\/em>, \u043a\u043e\u0433\u0434\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u043f\u0435\u0440\u0435\u0440\u0438\u0441\u043e\u0432\u043a\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0430. \u0415\u0441\u043b\u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0443 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0435\u0440\u0435\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0441\u0435\u0431\u044f, \u043e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u044b\u0437\u0432\u0430\u0442\u044c <code>redraw()<\/code> \u0441\u0432\u043e\u0435\u0433\u043e \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u043e\u043a\u043d\u0430. <\/p>\n<pre><code class=\"cpp\">void draw(graphic &amp;gr, const rect &amp;paint_rect);<\/code><\/pre>\n<p>\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u043c\u0435\u0442\u043e\u0434 \u0434\u043b\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0430 \u043d\u0430 \u043e\u043a\u043d\u0435. \u041a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0437\u0430\u0434\u0430\u044e\u0442\u0441\u044f \u0432 \u043f\u0438\u043a\u0441\u0435\u043b\u044f\u0445 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043b\u0435\u0432\u043e\u0433\u043e \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u0443\u0433\u043b\u0430 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u043e\u043a\u043d\u0430.\u00a0<\/p>\n<pre><code class=\"cpp\">void set_position(const rect &amp;position, bool redraw = true);<\/code><\/pre>\n<p>\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u043c\u0435\u0442\u043e\u0434, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0430 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u043a\u043d\u0430<\/p>\n<pre><code class=\"cpp\">rect position() const;<\/code><\/pre>\n<p>\u041c\u0435\u0442\u043e\u0434, \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u043c \u043e\u043a\u043d\u043e\u043c \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 add_control(), \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0443 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0441\u0432\u043e\u0435 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0435 \u043e\u043a\u043d\u043e.<\/p>\n<pre><code class=\"cpp\">void set_parent(std::shared_ptr&lt;window> window_);<\/code><\/pre>\n<p>\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0435 \u043e\u043a\u043d\u043e<\/p>\n<pre><code class=\"cpp\">std::weak_ptr&lt;window> parent() const;<\/code><\/pre>\n<p>\u041c\u0435\u0442\u043e\u0434, \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u043c \u043e\u043a\u043d\u043e\u043c \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 remove_control() \u043e\u0447\u0438\u0449\u0430\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0435 \u043e\u043a\u043d\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0430<\/p>\n<pre><code class=\"cpp\">void clear_parent();<\/code><\/pre>\n<p>\u0421\u043e\u043e\u0431\u0449\u0430\u0435\u0442 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u043c\u0443 \u043e\u043a\u043d\u0443, \u043d\u0443\u0436\u043d\u043e \u043b\u0438 \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b \u043f\u043e\u0432\u0435\u0440\u0445 \u0432\u0441\u0435\u0445 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043e\u0432<\/p>\n<pre><code class=\"cpp\">bool topmost() const;<\/code><\/pre>\n<p>\u0418\u0437\u043c\u0435\u043d\u044f\u0435\u0442 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u0443\u044e \u0442\u0435\u043c\u0443 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0430. \u0415\u0441\u043b\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0440\u0430\u0432\u0435\u043d nullptr \u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0442\u0435\u043c\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e.<\/p>\n<pre><code class=\"cpp\">void update_theme(std::shared_ptr&lt;i_theme> theme_ = nullptr);<\/code><\/pre>\n<p>\u041c\u0435\u0442\u043e\u0434\u044b \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c\u044e<\/p>\n<pre><code class=\"cpp\">void show(); void hide(); bool showed() const;<\/code><\/pre>\n<p>\u041c\u0435\u0442\u043e\u0434\u044b \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u201c\u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u0441\u0442\u044c\u044e\u201d<\/p>\n<pre><code class=\"cpp\">virtual void enable(); void disable(); bool enabled() const;<\/code><\/pre>\n<p>\u041c\u0435\u0442\u043e\u0434\u044b \u0434\u043b\u044f \u0432\u044b\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u043d\u0438\u044f \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0430 \u0441 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u043d\u044b\u043c \u0444\u043e\u043a\u0443\u0441\u043e\u043c \u0432\u0432\u043e\u0434\u0430<\/p>\n<pre><code class=\"cpp\">bool focused() const; \/\/\/ Returns true if the control is focused bool focusing() const; \/\/\/ Returns true if the control receives focus<\/code><\/pre>\n<p>\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0443\u044e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u043e\u0448\u0438\u0431\u043a\u0438. \u0421\u043b\u0435\u0434\u0443\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u043f\u043e\u0441\u043b\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0430 \u0438\u043b\u0438 \u0435\u0441\u043b\u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043c\u0435\u0442\u043e\u0434\u044b \u0442\u0438\u043f\u0430 bool init() \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u044e\u0449\u0435\u0433\u043e \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c.<\/p>\n<pre><code class=\"cpp\">error get_error() const;<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<h2>\u041c\u0435\u0442\u043e\u0434\u044b graphic<\/h2>\n<p>\u041a\u0430\u0436\u0434\u043e\u0435 \u043e\u043a\u043d\u043e \u0438\u043c\u0435\u0435\u0442 \u0441\u0432\u043e\u0439 \u0433\u0440\u0430\u0444\u0438\u043a \u0434\u043b\u044f \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0432\u043e\u0438\u0445 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043e\u0432. \u041d\u043e \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u043c\u0435\u0448\u0430\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0433\u0440\u0430\u0444\u0438\u043a \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0430 \u0438\u043b\u0438 \u0438\u0437 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u0414\u043b\u044f \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0430, \u043e\u043a\u043d\u043e \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0441\u0432\u043e\u0439 \u0433\u0440\u0430\u0444\u0438\u043a \u0447\u0435\u0440\u0435\u0437 \u0432\u044b\u0437\u043e\u0432 \u043c\u0435\u0442\u043e\u0434\u0430 <code>draw()<\/code> \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0430.<\/p>\n<details class=\"spoiler\">\n<summary>graphic.hpp<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">graphic(system_context &amp;context);<\/code><\/pre>\n<p>\u041c\u0435\u0442\u043e\u0434\u044b \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438\/\u0434\u0435\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438<\/p>\n<pre><code class=\"cpp\">void init(const rect &amp;max_size, color background_color); void release();<\/code><\/pre>\n<p>\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0446\u0432\u0435\u0442 \u0444\u043e\u043d\u0430, \u044d\u0442\u0438\u043c \u0446\u0432\u0435\u0442\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043b\u0438\u0442 \u0445\u043e\u043b\u0441\u0442 \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 clear()<\/p>\n<pre><code class=\"cpp\">void set_background_color(color background_color); void clear(const rect &amp;position);<\/code><\/pre>\n<p>\u0421\u0431\u0440\u043e\u0441 (\u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0430) \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442<\/p>\n<pre><code class=\"cpp\">void flush(const rect &amp;updated_size);<\/code><\/pre>\n<p>\u041d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u0447\u043a\u0443, \u043b\u0438\u043d\u0438\u044e<\/p>\n<pre><code class=\"cpp\">void draw_pixel(const rect &amp;position, color color_); void draw_line(const rect &amp;position, color color_, uint32_t width = 1);<\/code><\/pre>\n<p>\u0418\u0437\u043c\u0435\u0440\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u0442\u0435\u043a\u0441\u0442\u0430 \u0441 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u043c \u0448\u0440\u0438\u0444\u0442\u043e\u043c<\/p>\n<pre><code class=\"cpp\">rect measure_text(const std::string &amp;text, const font &amp;font_);<\/code><\/pre>\n<p>\u041d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0435\u043a\u0441\u0442 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u043c \u0448\u0440\u0438\u0444\u0442\u043e\u043c<\/p>\n<pre><code class=\"cpp\">void draw_text(const rect &amp;position, const std::string &amp;text, color color_, const font &amp;font_);<\/code><\/pre>\n<p>\u041d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a<\/p>\n<pre><code class=\"cpp\">void draw_rect(const <\/code><\/pre>\n<\/div>\n<\/details>\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-357840","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/357840","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=357840"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/357840\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=357840"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=357840"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=357840"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}