# YMGUI
**Repository Path**: yao_mi/ymgui
## Basic Information
- **Project Name**: YMGUI
- **Description**: 跨平台、mini开源gui框架,可移植win,linux,stm32,裸机就能跑
- **Primary Language**: C
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-08-02
- **Last Updated**: 2026-08-21
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# YMGUI
面向**嵌入式/裸机优先**的跨平台 GUI 库,C99 + GNU 扩展。软件光栅化 + 保留模式 + 分块刷新,桌面(Linux/SDL)开发、裸机(MCU + LCD)部署,两者共用同一套渲染代码,只换一个显示驱动回调。Windows、Android 和真实硬件的平台逻辑集中在 `SDL_LCD/` 或应用桥接层,不进入控件核心。
跨平台显示、输入与构建实践见 [CROSS_PLATFORM_PORTING.md](CROSS_PLATFORM_PORTING.md)。
## 状态
26 控件 · 5 类图元 · 32 单测全过 · 24 个交互 demo · 9 个完整应用 · clean build 0 错 0 警。
(Button/Label/Checkbox/Switch/Slider/Bar/Image/Arc/Spinner/Meter/TextInput/TextView/EditView/List/Chart/Dropdown/Table/Tabview/TreeView/Grid/Canvas/ColorPicker/Roller/BarChart/MsgBox + base 容器)
抗锯齿(4bpp 灰度字体 + Wu 斜线 + 距离场圆弧,`YMGUI_ANTIALIAS` 可裁)、中文/CJK(UTF-8 回退链 + 稀疏字模 + 外部 flash 回调,`YMGUI_FONT_CJK` 可裁)、状态/数据绑定地基均已落地。
## 效果预览
截图由 `./capture_shots.sh` 一键生成(SDL dummy 驱动无头渲染,产物落 `docs/shots/`)。
### 完整应用(`project_Demo/`)
用真实小应用验证"库够不够用",每个都催生或压榨了一批控件。
| | |
|---|---|
| **闹钟** 三滚轮设时 + 到点弹阻塞模态(MsgBox)
| **实时监控面板** Tabview/Meter/Arc/Chart + 数据绑定
|
| **电子表格** Grid + 公式引擎(SUM/AVG,定点)
| **文件管理器** TreeView 懒加载 + 预览 + 沙箱增删改
|
| **图层画板** Canvas + ColorPicker + 图层融合/工具
| **音乐播放器** BarChart 频谱 + Roller 歌词 + ffmpeg 解码
|
| **多行编辑器** EditView 选区/剪贴板/撤销/查找替换 + 菜单栏
| **视频播放器** Image 缩放模式 + 流式解码 + A/V 同步
|
| **上下文手势实验室** 右键/触摸长按菜单 + 捕获式卡片拖动
| |
### 控件演示(`Demo/`)
![]() button |
![]() form(复选/开关/滑块) |
![]() list |
![]() chart |
![]() dropdown(浮层展开) |
![]() table |
![]() tabview |
![]() treeview |
![]() msgbox(模态弹窗) |
![]() roller |
![]() barchart |
![]() dashboard(表盘簇) |
![]() canvas |
![]() colorpicker |
![]() image(缩放模式) |
![]() draw(图元) |
![]() textinput |
![]() textview |
![]() editview |
![]() layout(Stack/Align) |
![]() bind(数据绑定) |
![]() font_cjk |
![]() font_gb2312 |
![]() flush_band(分块刷新) |