{"id":29946917,"url":"https://github.com/neuwcodebox/codeadapter","last_synced_at":"2026-02-27T20:02:40.328Z","repository":{"id":42578923,"uuid":"55895368","full_name":"neuwcodebox/CodeAdapter","owner":"neuwcodebox","description":"다른 라이브러리로부터 독립적인 코드를 짤 수 있도록 해주는 인터페이스 라이브러리.","archived":false,"fork":false,"pushed_at":"2017-04-07T13:27:16.000Z","size":219,"stargazers_count":6,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-08-03T06:12:49.657Z","etag":null,"topics":["audio","c-plus-plus","demo","graphics","gui","library"],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/neuwcodebox.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-04-10T11:34:11.000Z","updated_at":"2024-12-30T05:38:47.000Z","dependencies_parsed_at":"2022-09-05T12:21:20.768Z","dependency_job_id":null,"html_url":"https://github.com/neuwcodebox/CodeAdapter","commit_stats":null,"previous_names":["neuwcodebox/codeadapter"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/neuwcodebox/CodeAdapter","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/neuwcodebox%2FCodeAdapter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/neuwcodebox%2FCodeAdapter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/neuwcodebox%2FCodeAdapter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/neuwcodebox%2FCodeAdapter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/neuwcodebox","download_url":"https://codeload.github.com/neuwcodebox/CodeAdapter/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/neuwcodebox%2FCodeAdapter/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29911408,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-27T19:37:42.220Z","status":"ssl_error","status_checked_at":"2026-02-27T19:37:41.463Z","response_time":57,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["audio","c-plus-plus","demo","graphics","gui","library"],"created_at":"2025-08-03T06:03:22.705Z","updated_at":"2026-02-27T20:02:40.323Z","avatar_url":"https://github.com/neuwcodebox.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Code Adapter\n\nC++ GUI, 2D Graphics  \n다른 라이브러리의 인터페이스를 강제시켜서 로직 코드의 변경을 최대한 줄일 수 있게 해주는 라이브러리.\n\n## Project List\n\n* CodeAdapter : 강제시킨 인터페이스가 될 라이브러리.\n* CodeAdapterSFML : SFML 라이브러리의 인터페이스를 강제시킨 예제.\n* TestLab : 테스트 및 데모 프로젝트.\n\n## Features\n\n* 2D Graphics\n* GUI\n* Scene System\n* Audio\n\n## To Do / Doing\n\n* [x] Add more GUI controls.\n* [x] Upgrade demo project.\n* [ ] Network\n* [x] Audio\n* [ ] System time and date\n* [ ] File stream\n\n## Demo\n\n![](https://cloud.githubusercontent.com/assets/1130686/16357706/0831e87c-3b39-11e6-8cde-315f82a426aa.PNG \"\")\n\n```c++\n/*\n* main.cpp\n*/\n\n\n#include \u003cCodeAdapter\\EasyCA.h\u003e\n#include \u003cCodeAdapterSFML\\SFMLFactory.h\u003e\n\n#include \"HelloScene.h\"\n\n\n\n\nint main()\n{\n\tinitializeCA\u003cSFMLFactory\u003e();\n\n\n\tauto window = caFactory-\u003ecreateWindow();\n\twindow-\u003ecreate(caDraw::Size(1024, 768), caUtil::String(\"Hello, World!\"), false);\n\twindow-\u003esetFramerate(60);\n\n\n\tauto sceneManager = canew\u003ccaUtil::SceneManager\u003e();\n\tsceneManager-\u003ereplaceScene(*window, canew\u003cHelloScene\u003e());\n\n\twindow-\u003esetSceneManager(sceneManager);\n\n\n\twhile (window-\u003eisRunning())\n\t{\n\t\tcaTouch-\u003eupdate();\n\t\tcaKeyboard-\u003eupdate(*window);\n\n\n\t\tif (sceneManager-\u003ehasScene() == false\n\t\t\t|| caKeyboard-\u003eisKeyDown(caSys::Keys::Escape))\n\t\t{\n\t\t\twindow-\u003eexit();\n\t\t}\n\n\n\t\twindow-\u003eupdate();\n\t\twindow-\u003edraw(caDraw::Color(230, 230, 230));\n\t}\n\n\n\treturn 0;\n}\n```\n\n```c++\n/*\n* HelloScene.h\n*/\n\n\n#ifndef __HELLO_SCENE_H__\n#define __HELLO_SCENE_H__\n\n\n#include \"CodeAdapter\\EasyCA.h\"\n\n\n\n\nclass HelloScene : public caUtil::Scene\n{\npublic:\n\tHelloScene();\n\tvirtual ~HelloScene();\n\n\nprotected:\n\tcaDraw::PanelPtr m_panel;\n\tcaDraw::FontPtr m_font;\n\tcaDraw::FontPtr m_font2;\n\tcaDraw::FontPtr m_font3;\n\tcaDraw::TexturePtr m_texLogo;\n\tcaDraw::DrawableTexturePtr m_sprLogo;\n\tcaUI::LabelPtr m_logo;\n\tcaUI::LabelPtr m_logo2;\n\tcaUI::LabelPtr m_logo3;\n\tcaUI::ButtonPtr m_buttonNext;\n\tcaUI::VerticalScrollBarPtr m_scrollOpacity;\n\n\npublic:\n\tvirtual void onInitialize(caDraw::Window\u0026 owner) override;\n\tvirtual void onRelease() override;\n\tvirtual void onUpdate(caDraw::Window\u0026 owner) override;\n\tvirtual void onDrawBack(caDraw::Graphics\u0026 g) override;\n\tvirtual void onDrawFront(caDraw::Graphics\u0026 g) override;\n};\n\n\n#endif\n```\n\n```c++\n/*\n* HelloScene.cpp\n*/\n\n\n#include \"HelloScene.h\"\n\n\n\n\nHelloScene::HelloScene()\n{\n\n}\n\n\nHelloScene::~HelloScene()\n{\n\n}\n\n//###########################################################################\n\nvoid HelloScene::onInitialize(caDraw::Window\u0026 owner)\n{\n\tauto winSize = owner.getSize();\n\n\n\tm_panel = caFactory-\u003ecreatePanel();\n\tm_panel-\u003etransform.position = { 0, 0 };\n\tm_panel-\u003esize = static_cast\u003ccaDraw::SizeF\u003e(winSize);\n\n\tm_font = caFactory-\u003ecreateFont();\n\tm_font-\u003eloadFromFile(\"NanumGothic.ttf\");\n\tm_font-\u003esetCharacterSize(64);\n\tm_font-\u003esetStyle(caDraw::FontStyles::Bold);\n\n\tm_font2 = caFactory-\u003ecreateFont();\n\tm_font2-\u003eloadFromFile(\"NanumGothic.ttf\");\n\tm_font2-\u003esetCharacterSize(64);\n\tm_font2-\u003esetStyle(caDraw::FontStyles::Bold | caDraw::FontStyles::Underline);\n\n\tm_font3 = caFactory-\u003ecreateFont();\n\tm_font3-\u003eloadFromFile(\"NanumGothic.ttf\");\n\tm_font3-\u003esetCharacterSize(64);\n\tm_font3-\u003esetStyle(caDraw::FontStyles::StrikeOut | caDraw::FontStyles::Italic);\n\n\tm_texLogo = caFactory-\u003ecreateTexture();\n\tm_texLogo-\u003eloadFromFile(\"neurowhai.png\");\n\n\tm_sprLogo = canew\u003ccaDraw::DrawableTexture\u003e();\n\tm_sprLogo-\u003esetTexture(m_texLogo);\n\tm_sprLogo-\u003elocation.setLocation(static_cast\u003cf32\u003e(winSize.width / 2 - 555),\n\t\tstatic_cast\u003cf32\u003e(winSize.height / 2 - 555));\n\n\tm_logo = canew\u003ccaUI::Label\u003e();\n\tm_logo-\u003esetFont(m_font);\n\tm_logo-\u003esetText(L\"NeuroWhAI\");\n\tm_logo-\u003esetTextMargin({ 8, 0 });\n\tm_logo-\u003esetBackColor(caDraw::Color::Transparent);\n\tm_logo-\u003esetPosition({ 128, 164 });\n\tm_logo-\u003esetSize({ 330, 128 });\n\n\tm_logo2 = canew\u003ccaUI::Label\u003e(*m_logo);\n\tm_logo2-\u003esetFont(m_font2);\n\tm_logo2-\u003esetPosition({ 128, 164 + 70 });\n\n\tm_logo3 = canew\u003ccaUI::Label\u003e(*m_logo);\n\tm_logo3-\u003esetFont(m_font3);\n\tm_logo3-\u003esetPosition({ 128, 164 + 70 * 2 });\n\n\tm_buttonNext = canew\u003ccaUI::Button\u003e();\n\tm_buttonNext-\u003esetFont(m_font);\n\tm_buttonNext-\u003esetText(L\"Next page\");\n\tm_buttonNext-\u003esetBackColor(caDraw::Color::Gray);\n\tm_buttonNext-\u003esetPosition({ static_cast\u003cf32\u003e(winSize.width / 2 - 165), 600 });\n\tm_buttonNext-\u003esetSize({ 330, 100 });\n\tm_buttonNext-\u003eWhenClick = [me = this](const caUI::EventArgs\u0026 args)\n\t{\n\t\tme-\u003ereserveNextScene(nullptr);\n\t};\n\n\tm_scrollOpacity = canew\u003ccaUI::VerticalScrollBar\u003e();\n\tm_scrollOpacity-\u003esetPosition({ 0, 0 });\n\tm_scrollOpacity-\u003esetSize({ 24.0f, static_cast\u003cf32\u003e(winSize.height) });\n\tm_scrollOpacity-\u003esetMaxValue(255);\n\tm_scrollOpacity-\u003esetValue(255);\n\tm_scrollOpacity-\u003esetMinBarLength(64);\n\tm_scrollOpacity-\u003eWhenValueChanged =\n\t\t[\u0026logo = m_sprLogo](const caUI::ValueFEventArgs\u0026 args)\n\t{\n\t\tlogo-\u003ecolor.a = static_cast\u003ci32\u003e(args.value);\n\t};\n\n\n\tm_panel-\u003eaddDrawable(m_sprLogo);\n\n\tm_panel-\u003eaddControl(m_logo);\n\tm_panel-\u003eaddControl(m_logo2);\n\tm_panel-\u003eaddControl(m_logo3);\n\tm_panel-\u003eaddControl(m_scrollOpacity);\n\n\n\taddPanel(m_panel);\n}\n\n\nvoid HelloScene::onRelease()\n{\n\n}\n\n\nvoid HelloScene::onUpdate(caDraw::Window\u0026 owner)\n{\n\n}\n\n\nvoid HelloScene::onDrawBack(caDraw::Graphics\u0026 g)\n{\n\n}\n\n\nvoid HelloScene::onDrawFront(caDraw::Graphics\u0026 g)\n{\n\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fneuwcodebox%2Fcodeadapter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fneuwcodebox%2Fcodeadapter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fneuwcodebox%2Fcodeadapter/lists"}