项目目录结构¶
本文介绍 EmbeddedGUI 项目的目录组织方式,帮助你快速定位代码和资源文件。
顶层目录总览¶
EmbeddedGUI/
|-- src/ # 核心库源代码
|-- example/ # 示例应用
|-- porting/ # 平台移植层
|-- scripts/ # 构建工具和辅助脚本
|-- doc/ # Sphinx 文档源码
|-- web/ # WebAssembly 在线演示站点静态文件
|-- tools/ # 内置开发工具 (w64devkit 等)
|-- build_cmake/ # CMake 构建目录(按需生成)
|-- output/ # 编译产物输出目录(按需生成)
|-- Makefile # 顶层 Makefile (配置 APP/PORT 等参数)
|-- CMakeLists.txt # CMake 构建配置
|-- setup.bat # Windows 环境入口脚本(转发到 setup_env.py)
|-- setup.sh # Linux / macOS 环境入口脚本
|-- requirements.txt # Python 依赖列表
|-- VERSION # 版本号文件
|-- LICENSE # MIT 许可证
`-- README.md # 项目说明
src/ – 核心库源代码¶
这是 EGUI 框架的核心实现,所有模块均以 egui_ 为前缀命名。
src/
|-- egui.h # 统一头文件,包含所有模块
|-- build.mk # 源码构建模块定义
|-- config/ # 编译期配置系统
|-- core/ # 核心框架
|-- canvas/ # 画布绘制引擎
|-- widget/ # UI 控件
|-- anim/ # 动画系统
|-- font/ # 字体渲染
|-- image/ # 图片处理
|-- mask/ # 遮罩支持
|-- style/ # 样式系统
|-- shadow/ # 阴影效果
|-- background/ # 背景绘制
|-- app/ # 应用框架 (Activity/Dialog/Toast)
|-- resource/ # 内置资源
|-- utils/ # 工具函数
`-- test/ # 测试代码
core/ – 核心框架¶
核心模块提供了 EGUI 框架的运行基础:
文件 |
说明 |
|---|---|
|
框架主循环,驱动渲染和事件处理 |
|
PFB (局部帧缓冲) 管理器 |
|
定时器系统 |
|
输入事件处理 |
|
触摸/运动事件 |
|
按键事件 |
|
触摸驱动接口 |
|
显示驱动接口 |
|
区域计算 (脏矩形) |
|
滚动物理引擎 |
|
速度追踪器 (惯性滑动) |
|
焦点管理 |
|
屏幕旋转支持 |
|
OOP 辅助宏 (类型转换) |
|
基础类型定义 |
|
通用 API 函数 |
canvas/ – 画布绘制引擎¶
画布相关实现位于 src/canvas/,包含 egui_canvas.c/h、egui_canvas_line.c、egui_canvas_line_hq.c、egui_canvas_circle_hq.c、egui_canvas_gradient.c/h、egui_canvas_bezier.c、egui_canvas_polygon.c、egui_canvas_triangle.c、egui_canvas_ellipse.c 和 egui_canvas_transform.c 等文件,用于基础图元、抗锯齿、渐变与变换渲染。
config/ – 配置系统¶
配置模块提供编译期默认配置与功能分组默认值:
文件 |
说明 |
|---|---|
|
配置入口,汇总各类默认配置头 |
|
主屏基础默认配置 |
|
多屏默认配置 |
|
Canvas 默认配置 |
|
快路径默认配置 |
|
控件默认配置 |
|
主题默认配置 |
|
调试默认配置 |
widget/ – UI 控件¶
包含 60+ UI 控件的实现,每个控件由一对 .c/.h 文件组成。主要控件分类:
基础控件: label (标签), button (按钮), image (图片), image_button (图片按钮)
输入控件: switch (开关), checkbox (复选框), radio_button (单选按钮), slider (滑块), arc_slider (弧形滑块), toggle_button (切换按钮), combobox (下拉框), roller (滚轮选择), number_picker (数字选择器), spinner (旋转选择), textblock (文本块)
布局控件: linearlayout (线性布局), gridlayout (网格布局), scroll (滚动视图), viewpage (分页视图), tileview (瓦片视图), list (列表)
进度控件: progress_bar (进度条), circular_progress_bar (圆形进度条), activity_ring (活动环)
图表控件: chart_line (折线图), chart_bar (柱状图), chart_pie (饼图), chart_scatter (散点图)
时钟控件: analog_clock (模拟时钟), digital_clock (数字时钟), stopwatch (秒表), mini_calendar (迷你日历)
其他控件: card (卡片), divider (分割线), page_indicator (页面指示器), notification_badge (通知徽章), led (LED 指示灯), gauge (仪表盘), compass (罗盘), heart_rate (心率), scale (刻度), button_matrix (按钮矩阵), table (表格), animated_image (动画图片), spangroup (富文本), window (窗口), menu (菜单), line (线条), keyboard (键盘), mp4 (视频)
anim/ – 动画系统¶
提供类 Android 的动画框架:
文件 |
说明 |
|---|---|
|
动画基类 |
|
平移动画 |
|
透明度动画 |
|
缩放动画 |
|
尺寸变化动画 |
|
颜色渐变动画 |
|
动画组合 (顺序/并行) |
|
插值器基类 |
支持 9 种插值器: linear (线性), accelerate (加速), decelerate (减速), accelerate_decelerate (先加速后减速), anticipate (回弹启动), overshoot (过冲), anticipate_overshoot (回弹过冲), bounce (弹跳), cycle (循环)。
font/ – 字体渲染¶
支持点阵字体和标准字体渲染,提供 UTF-8 编码支持。
image/ – 图片处理¶
图片解码和渲染,支持带 Alpha 通道的图片。
mask/ – 遮罩支持¶
提供圆形遮罩、圆角矩形遮罩、渐变遮罩和图片遮罩,用于实现圆角图片、异形裁剪等效果。
style/ – 样式系统¶
样式与主题相关实现位于 src/style/,包含 egui_style.c/h、egui_style_transition.c/h、egui_theme.c/h、egui_theme_dark.c 和 egui_theme_light.c。
utils/ – 工具函数¶
文件 |
说明 |
|---|---|
|
定点数运算 (三角函数、平方根等) |
|
双向链表 |
|
单向链表 |
|
通用工具函数 |
|
环形缓冲区实现 |
example/ – 示例应用¶
每个示例位于独立子目录中,通常包含 uicode_disp0.c (UI 代码)、uicode_disp0.h、build.mk (构建配置) 和可选的 resource/ (资源文件) 目录。
示例 |
说明 |
|---|---|
|
最简单的入门示例 (标签 + 按钮) |
|
基础控件演示集合,当前包含 62 个子应用 |
|
Virtual / ListView / GridView / Stage 示例集合,当前包含 19 个子应用 |
|
已迁移到独立仓库 |
|
Activity 生命周期和页面管理 |
|
基于 |
|
画布绘图 API 演示 |
|
图表控件演示 |
|
脏区刷新局部重绘演示 |
|
简易分页应用 |
|
渐变效果演示 |
|
Layer 机制演示 |
|
主屏和副屏同为 240x320,演示多屏 Activity 切换与副屏独立输入 |
|
主屏 240x320,副屏 128x64,演示异构副屏状态面板和跨屏状态联动 |
|
PFB 机制演示 |
|
性能测试基准 |
|
资源管理器示例 |
|
综合展示示例 |
|
体积分析 probe / 配置模板集合 |
|
样式和主题演示 |
|
SVG 规范对比基座 |
|
功能测试 |
|
单元测试 |
|
分页和滚动组合 |
其中 HelloBasic、HelloVirtual 和 HelloSizeAnalysis 都通过 APP_SUB 选择不同子目录;HelloCustomWidgets 已迁移到独立仓库 EmbeddedGUI_Widgets。
porting/ – 平台移植层¶
每个平台对应一个子目录,实现平台相关的显示驱动、触摸驱动和定时器:
平台 |
说明 |
|---|---|
|
PC 模拟器 (基于 SDL2,支持 Windows/Linux/macOS) |
|
STM32G0 系列 MCU (ARM Cortex-M0+) |
|
QEMU ARM 虚拟化环境 (自动化测试和性能基准) |
|
WebAssembly 编译 (浏览器在线演示) |
|
UI Designer 专用移植 |
|
PC 测试专用移植 |
scripts/ – 构建工具和辅助脚本¶
脚本 |
说明 |
|---|---|
|
完整编译检查 (CI 使用,含示例 icon font 检查) |
|
运行时验证 (截图对比) |
|
代码格式化 |
|
发布前多步骤一键检查,也支持 |
|
跨平台环境配置主脚本,负责 Python 依赖、工具链检查和 FFmpeg 准备 |
|
专项检查脚本(icon font、dirty animation、parity、render workflow、touch 语义) |
|
平台/工程维护脚本(如 |
|
Emscripten/WASM 构建脚本(如 |
|
录制与 GIF 导出辅助脚本 |
|
性能测试统一入口 |
|
ELF 二进制大小分析统一入口 |
|
本地工具与资源生成工具(如 w64devkit、ffmpeg) |
doc/ – 文档¶
基于 Sphinx 构建的项目文档:
doc/source/
|-- index.rst # 文档首页
|-- getting_started/ # 快速入门 (本系列文档)
|-- architecture/ # 架构说明
|-- widgets/ # 控件参考
|-- animation/ # 动画系统
|-- app/ # Activity / Dialog / Toast / 页面框架
|-- debug/ # 调试与渲染验证
|-- performance/ # 性能优化与基准
|-- porting/ # 移植指南
|-- resource/ # 资源管理
|-- size/ # 体积分析与配置模板
|-- appendix/ # FAQ / Changelog / API 索引
|-- ui_designer/ # UI Designer 入口页(演示 GIF + 跳转)
|-- images/ # 文档配图
`-- conf.py # Sphinx 配置
web/ – WebAssembly 在线演示¶
通过 Emscripten 将 EGUI 示例编译为 WebAssembly,可在浏览器中直接体验:
web/
|-- index.html # 演示首页(HelloShowcase)
|-- basic.html # HelloBasic 聚合页
|-- examples.html # 独立示例聚合页
|-- widgets repo # HelloCustomWidgets 已迁移到独立仓库 `EmbeddedGUI_Widgets`
|-- doc-render.js # README 渲染逻辑
|-- i18n.js # 中英文本切换
|-- lib/ # JavaScript 依赖库
|-- style.css # 页面样式
`-- demos/ # 运行 `scripts/web/wasm_build_demos.py` 后生成的 demo 包和 `demos.json`