{"id":24344361,"url":"https://github.com/arnozhang/strawframework","last_synced_at":"2025-12-24T10:16:41.862Z","repository":{"id":143871783,"uuid":"70670573","full_name":"arnozhang/strawframework","owner":"arnozhang","description":"Straw-Framework is a C++ GUI library.","archived":false,"fork":false,"pushed_at":"2023-04-05T08:48:43.000Z","size":1937,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-03-11T23:30:05.098Z","etag":null,"topics":["cplusplus","gui","gui-framework"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/arnozhang.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-10-12T06:38:06.000Z","updated_at":"2024-05-11T05:43:30.000Z","dependencies_parsed_at":null,"dependency_job_id":"b6ffe367-552f-4f6e-a736-a2bd45ef938d","html_url":"https://github.com/arnozhang/strawframework","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/arnozhang/strawframework","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arnozhang%2Fstrawframework","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arnozhang%2Fstrawframework/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arnozhang%2Fstrawframework/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arnozhang%2Fstrawframework/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/arnozhang","download_url":"https://codeload.github.com/arnozhang/strawframework/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arnozhang%2Fstrawframework/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28000524,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-12-24T02:00:07.193Z","response_time":83,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["cplusplus","gui","gui-framework"],"created_at":"2025-01-18T09:34:20.702Z","updated_at":"2025-12-24T10:16:41.846Z","avatar_url":"https://github.com/arnozhang.png","language":"C++","readme":"# StrawFramework 简介 \u0026 目标\n\n### 0、目前阶段\n\n`开发实验` 阶段，等接口 \u0026 功能基本稳定后，再将代码上传到 Github：\n\n- 接口未固定 —— 后续重构、修改可能性大；\n- 部分功能未实现 —— 如 EditText、ScrollView 等功能性组件；\n- Bug 多；\n\n缓慢持续进行中。。。\n\n### 1、简介\n\n`StrawFramework` 是一款基于 `C++` 的 `GUI` 开发框架。此前一直是开发 PC 端软件，但近年来由于我受 `Android` 开发的影响比较深，我决定把 Android 中的一些开发思路和经验借鉴过来，用 C++ 开发一款类似的 GUI 开发框架。`UI Layout`、`I18N`、`Drawable`、`Resources Manager` 等等模式和思路借鉴复制，另外针对 PC 端的开发模式，有一定其他不同的处理。\n\n### 2、目标\n\n- 桌面跨平台 C++ GUI 库——目前只开发 Windows PC 端，但接口有预留；\n- 借鉴 Android 开发中好的一些设计思路和模式；\n- 采用 XML 的方式进行界面排布、Drawable 等等资源编写；\n- 设计插件模式，让其他插件可以用 DLL / so 的方式接入进来；\n\n### 3、实现 / TODO 列表\n\n|功能 / 特性|描述|完成度|\n|---|---|---|\n|Base Component|Application/ MessageLoop / Log / Timer / Data ...|高|\n|DPI-Compatible|px / dp / sp ...|高|\n|Window / Dialog|CaptionWindow / Dialog / MessageBox ...|中|\n|Built-in Views|View / EditText / LineraLayout / ScrollView ...|中|\n|Theme|Style / Theme ...|中|\n|Layout|LinearLayout / AbsoluteLayout / FrameLayout ...|中|\n|Drawable|BitmapDrawable / ShapeDrawable / ColorDrawable \u003cbr\u003e GifDrawable / AnimationDrawable / StateListDrawable \u003cbr\u003e NinePatchDrawable ...|高|\n|I18N||高|\n|Resources Manager|Resource packer \u0026 read|中|\n|Menu||中|\n|Message / Event||低|\n|Customized View -\u003e XML||高|\n|Extension / Plugin||中|\n|UI Editor||未开始|\n|UI Spy||未开始|\n\n### 4、thirdparty library\n\n- [skia](https://github.com/google/skia)\n- [tinyxml2](https://github.com/leethomason/tinyxml2)\n\n### 5、一个简单的布局\n\n- 长度单位默认大小单位为： dp；\n- 和 Android 类似，可以使用 `@dimen` / `@string` / `@drawable` / `@layout` 来索引资源；\n- 支持 Layout-XML `include`；\n- 插件或者宿主 App 均可使用 `@platform:drawable/xxx` 类似的做法访问 StrawFramework 库中的资源；\n- 插件可使用 `@app:drawable/xxx` 访问宿主 App 库中的资源；\n- 使用类似 `style=\"@style/login_btn\"` 来为 View 指定样式/主题；\n\n```xml\n\u003cCaptionWindow\n    width=\"@dimen/wnd_width\"\n    height=\"@dimen/wnd_height\"\n    minSize=\"400, 300\"\n    title=\"@string/app_name\"\n    cursor=\"@drawable/aero_link\"\n    sizeable=\"bothSizeable\"\u003e\n    \n    \u003cFrameLayout\n        width=\"match_parent\"\n        height=\"match_parent\"\n        extensionName=\"com.straw.demo.main_caption_layout\"\u003e\n        \n        \u003cinclude layout=\"@layout/base_header\" /\u003e\n\n        \u003cLinearLayout\n            width=\"match_parent\"\n            height=\"match_parent\"\n            bottomMargin=\"30\"\n            extensionName=\"com.straw.demo.main_layout\"\n            gravity=\"centerHorizontal\"\n            padding=\"4\"\n            orientation=\"horizontal\"\u003e\n            \n            \u003cView\n                width=\"78\"\n                height=\"36\"\n                topMargin=\"10\"\n                layoutGravity=\"centerVertical\"\n                background=\"@drawable/audio_anim_left\"/\u003e\n                \n            \u003cView\n                width=\"150\"\n                height=\"180\"\n                leftMargin=\"40\"\n                topMargin=\"20\"\n                background=\"@drawable/demo\"/\u003e\n                \n            \u003cView\n                width=\"150\"\n                height=\"250\"\n                layoutGravity=\"bottom\"\n                bottomMargin=\"30\"\n                leftMargin=\"10\"\n                clickable=\"true\"\n                background=\"@drawable/caption\"/\u003e\n                \n        \u003c/LinearLayout\u003e\n        \n        \u003cView\n            width=\"80\"\n            height=\"80\"\n            layoutGravity=\"bottom\"\n            marginBottom=\"100\"\n            background=\"@drawable/jump\"/\u003e\n        \n        \u003cTextView\n            width=\"200\"\n            height=\"80\"\n            layoutGravity=\"bottomRight\"\n            textSize=\"30\"\n            textColor=\"@color/hello_text_color\"\n            gravity=\"center\"\n            textStyle=\"bold|italic|underline|strike\"\n            text=\"Hello World!\"/\u003e\n\n        \u003cView\n            width=\"match_parent\"\n            height=\"20\"\n            layoutGravity=\"bottom\"\n            background=\"#c44\"/\u003e\n            \n        \u003cButton\n            style=\"@style/login_btn\"\n            id=\"login\"\n            width=\"120\"\n            height=\"48\"\n            marginLeft=\"20\"\n            layoutGravity=\"centerVertical|left\"\n            text=\"Login\"\n            background=\"@drawable/state_drawable\"/\u003e\n            \n        \u003cButton\n            id=\"logout\"\n            width=\"120\"\n            height=\"42\"\n            layoutGravity=\"centerVertical|left\"\n            marginTop=\"60\"\n            marginLeft=\"20\"\n            text=\"Logout\"\n            textColor=\"@color/state_color\"\n            gravity=\"center\"\n            background=\"@platform:drawable/default_btn/default_btn\"/\u003e\n    \u003c/FrameLayout\u003e\n\u003c/CaptionWindow\u003e\n```\n\n### 6、部分截图\n\n![CaptionWindow](https://github.com/arnozhang/strawframework/blob/master/docs/screenshots/CaptionWindow.png?raw=true)\n\n![MessageBox](https://github.com/arnozhang/strawframework/blob/master/docs/screenshots/MessageBox.png?raw=true)\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farnozhang%2Fstrawframework","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Farnozhang%2Fstrawframework","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farnozhang%2Fstrawframework/lists"}