一款适用于Windows的温馨、实时更新的桌面篝火小组件。纯Rust + gpui + gpui-component编写,完全不使用图像资源——每个像素都是通过程序生成的。设计文档。
English README:README.en.md
运行效果
不置顶效果(聚焦到记事本,下同)
普通置顶效果
超级置顶效果
- 程序化场景:夜空 / 星星 / 月牙 / 远山 / 树影 / 石头 / 木柴堆全部矢量绘制,二进制零图片素材
- 轻交互:
- 左键单击火堆 加柴(火势升一档 + 粒子爆发)
- 长按 / 中键 吹气(火势暂弱,火星随风飘散)
- 快速划过火焰 带起火星、火苗随风偏摆
- 火不添柴会自然熄灭;熄灭后单击重新引燃(慢速生长动画)
- 循环音效:启动时整段解码进内存 + 首尾等功率交叉淡化,接缝无咔哒声;音量随火势平滑渐变
- 右键设置菜单:声音/火焰/窗口/显示/监控五个分页,所有参数可调、支持单项或全部恢复默认
- 三档置顶模式:关闭 / 普通 / 超级置顶(UIAccess,可盖住任务管理器等其他置顶窗口)
- 性能监控浮层(默认关):系统 CPU/内存/网速/NVIDIA GPU 占用 + 焦点窗口进程信息
- 自适应帧率:活跃 30fps / 弱火 15fps / 熄灭 5fps,安静时几乎不耗电
| 项目 | 要求 |
|---|---|
| 操作系统 | Windows 10 1809+ / Windows 11(x64) |
| Rust | 1.85+(edition 2024) |
| GPU | 支持 Direct3D 即可;N 卡可选装驱动以启用 GPU 监控 |
git clone <repo-url>
cd campfire
cargo build --release
# 产物:target/release/campfire.exe(单文件,绿色免安装)首次构建需要拉取 zed 主仓库的 gpui 依赖,耗时较长属正常现象。
| 操作 | 效果 |
|---|---|
| 左键点击火堆 | 加柴 / 引燃 |
| 长按火堆 或 中键 | 吹气 |
| 快速划过火焰 | 扬起火星 |
| 拖动空白区域 | 移动窗口(位置自动记忆) |
| 右键 | 打开/关闭设置菜单 |
| 拖拽窗口边缘 | 调整大小(有上下限) |
配置持久化在 config.json(查找顺序:启动参数显式路径 → 当前目录 → exe 所在目录及其祖先),写入采用临时文件原子替换,损坏时自动回退默认值。
Windows 按 Band 分层管理 Z 序:普通 HWND_TOPMOST 无法盖过任务管理器这类系统级置顶窗口。进程令牌携带 TokenUIAccess 属性后,其窗口进入更高的 ZBID_UIACCESS 段。
本项目的实现不做任何令牌复制(经典「借 winlogon 令牌」方案在带反作弊内核驱动的机器上会被内核拒绝,详见 src/uiaccess.rs 模块文档):
未提权实例 ──UAC──▶ 管理员实例
│ 注册一次性计划任务(SYSTEM)
▼
SYSTEM 辅助进程(自身 exe + worker 标志)
│ WTSQueryUserToken 直取会话主令牌(零复制)
│ SetTokenInformation(TokenUIAccess)
▼
最终进程(非提权 + UIAccess)✦ 管理员实例退出
注意事项:
- 每次以超级置顶模式启动会弹出一次 UAC 确认(与 GrantUiAccess 等工具行为一致)
- UIAccess 只在进程创建时生效,切换模式会自动重启进程并恢复窗口位置
- 获取失败(取消 UAC / 环境受限)时自动降级为普通置顶,不影响使用
可前往Spixed/super-topmost查看详细文档与多语言实现版本。
详细设计与各模块说明见 docs/ARCHITECTURE.md。
src/
├── main.rs # 应用入口、CampfireView(帧循环/交互/几何/置顶收尾)
├── menu.rs # 右键设置菜单(分页 UI 与参数回调)
├── win32.rs # 原生窗口操作(拖拽移动/鼠标捕获/Z 序/尺寸限制)
├── config.rs # 配置加载/原子保存/路径锚定
├── uiaccess.rs # 超级置顶:SYSTEM 辅助任务链路(含安全模型说明)
├── sim.rs # 火势状态机(纯逻辑,可单测)
├── fire.rs # 火焰粒子系统 + 共享发射环境 EmitterEnv
├── ember.rs # 火星粒子系统
├── scene.rs # 全部矢量绘制(夜空到辉光的 12 层)
├── stats.rs # 性能监控采集线程(sysinfo + NVML,优雅降级)
└── audio.rs # rodio 无缝循环音效(内存缓冲 + 接缝交叉淡化)
cargo fmt --all # 格式化
cargo clippy --all-targets -- -D warnings # 静态检查(CI 强制零警告)
cargo test # 单元测试
cargo build --release # 发布构建- 循环音效:"campfire deer camp 21 minutes - wind - snow - sleet - part 5 .wav" by Ambient-X,遵循 CC BY 4.0 许可(已内嵌于
assets/campfire_loop.wav)。



