moon-egui

    High-performance, pure MoonBit Immediate-Mode GUI library for WebAssembly, Canvas, and Games.

    gui
    egui
    imgui
    canvas
    wasm
    immediate-mode
    ui
    Download zip
    Author
    Version
    0.1.1
    License
    Apache-2.0
    Last updated
    5 hours ago
    Downloads
    4

    #moon-egui

    面向 MoonBit 与 WebAssembly 的轻量级即时模式图形界面库


    #概述

    moon-egui 是面向 MoonBit 编程语言的轻量级即时模式图形界面库(Immediate-Mode GUI),面向 WebAssembly 与 HTML5 Canvas 2D 等图形交互场景设计。

    设计灵感源自 Rust 社区的 egui 与 C++ Dear ImGuimoon-egui 采用即时模式范式:代码即界面,界面即状态。通过逐帧声明式构建,提供直观的 UI 开发体验、轻量级的运行时占用与平稳的渲染表现。

    #为什么选择 moon-egui?

    在 WebAssembly 与 Canvas 绘图场景下构建交互界面时,开发者通常面临以下挑战:

    • 传统 Canvas 逻辑的维护负担:手写按钮坐标计算、命中碰撞检测与图层排序,代码量大且极易产生状态不同步缺陷。
    • DOM / 虚拟 DOM 的性能抖动:在 60 FPS 高频画布应用中引入保留模式框架,跨语言/跨边界调用与垃圾回收(GC)容易引发偶发掉帧。
    • C/C++ 绑定的工具链门槛:基于 FFI 的外部 GUI 包装依赖复杂的本地编译链,产物体积较大,且无法享受纯粹的包管理体验。

    #核心特性

    • 即时模式心智:逐帧声明界面,无需维护生命周期回调与双向同步,交互判定就地完成(例如 if ui.button("保存").clicked { ... })。
    • 零 FFI 原生依赖:100% 纯 MoonBit 编写,内核解耦宿主环境,零外部运行时依赖,一行 moon add 即装即用。
    • 微秒级帧管线:内置视口空间裁剪与图元合并,单帧内核开销低至 0.1ms,在百万节点画布下稳定跑满 60 FPS。
    • 开箱即用套件:内置层级窗口(支持拖拽置顶与视口约束)、标签栏、支持真实键盘输入的文本框、防穿透下拉框与工具提示。


    #安装

    moon add ling71671/moon-egui

    安装后在 moon.pkg 中引入即可使用:

    { "import": [ "LING71671/moon-egui/src/core", "LING71671/moon-egui/src/draw", "LING71671/moon-egui/src/math", "LING71671/moon-egui/src/color" ] }


    #在线演示 (Live Demos)

    您可以通过现代浏览器直接体验 moon-egui 的交互功能与图形渲染效果:


    #快速代码示例

    fn update_ui(ui : &mut UIContext, state : &mut AppState) {
    // 1. 全局系统菜单栏
    ui.menu_bar(fn() {
    ui.menu("文件", fn() {
    if ui.menu_item("新建项目") { state.new_project() }
    if ui.menu_item("保存配置") { state.save() }
    })
    ui.menu("视图", fn() {
    if ui.menu_item("切换主题") { state.toggle_theme() }
    })
    })

    // 2. 浮动可拖拽视窗
    ui.window("控制台 & 属性监视", 50.0, 50.0, 300.0, 420.0, fn() {
    ui.label("欢迎使用 moon-egui")

    if ui.button("触发测试") {
    state.counter 1
    }

    // Blender 风格数值拖拽调节
    ui.drag_float("重力参数", &mut state.gravity, speed=0.1, min=0.0, max=20.0)
    ui.checkbox("开启物理碰撞", &mut state.collision_enabled)

    // 折叠数据面板
    ui.collapsing_header("实时渲染监控", fn() {
    ui.sparkline("实时帧率曲线", state.fps_history)
    ui.progress_bar(state.progress)
    })
    })
    }


    #架构体系

    moon-egui 将 UI 求值与宿主渲染完全解耦,采用三层严谨的单向数据流管道:

    [ 输入事件流 (Input Events) ] • 鼠标指针绝对坐标与按键状态 • 键盘按键与修饰键 • 鼠标滚轮滑动增量 (Delta) │ ▼ [ moon-egui 纯算内核 ] • 输入状态机 (Hover, Active, Focused) • 线性游标排版与 AABB 空间命中判定 • 矩形 Scissor 裁剪栈 • 即时模式控件逻辑求值 │ ▼ [ 绘制指令序列 (DrawCmd Stream) ] • DrawCmd::Rect(x, y, w, h, color, radius) • DrawCmd::Text(x, y, text, size, color) • DrawCmd::Line(x1, y1, x2, y2, color, width) • DrawCmd::Clip(x, y, w, h) │ ▼ [ 可插拔渲染后端 (Render Backends) ] • HTML5 Canvas 2D (默认 Wasm 桥接) • WebGL / WebGPU (规划演进) • 原生窗口引擎 (Raylib / SDL / Minifb)


    #核心特性矩阵

    #已交付可用特性 (Available Now)

    • 底层图形与绘制内核 (Core Draw Engine):纯 MoonBit 实现的 Vec2, Rect, Color, DrawCmd 平台无关指令流,支持矩形、线段、圆、文本与嵌套矩形裁剪栈(Scissor Clipping)。
    • 交互状态机与多向排版 (Layout & Space Allocation)UIContext 维护 hot_id / active_id 状态机与布局作用域栈,支持单向垂直流、水平行内排版流(horizontal),allocate_space() 自动分配几何尺寸并完成鼠标交互命中判定。
    • 核心交互控件套件 (Available Widgets)
      • 基础输入button(支持快捷键、主次样式与尺寸)、text_edit(纯白骨瓷单行文本输入)、label / label_colored
      • 选择与调节checkbox(精密复选框)、toggle(双稳态胶囊开关)、radio(同心圆单选)、slider / slider_int(连续/步进数值条)、drag_value(数字微调器)、combo_box(轻量下拉选择框)、color_button(调色板取色器)。
      • 反馈与展示progress_bar(平滑进度条)、tooltip(悬浮气泡提示与视口防溢出)。
      • 排版微调separator(水平发丝分割线)、spacer(弹性留白)。
    • 视窗与高级容器系统 (Windows & Containers)
      • 全局顶层菜单栏menu_bar, menu, menu_item, menu_separator,具备前台图层投影隔离、桌面级 Hover-to-Switch 随动流转与外部点击安全闭合;
      • 自由浮动视窗window 支持标题栏拖拽位移、动态 Z-Index 置顶管理、内容局部坐标系与 Scissor 视口裁剪;
      • 高级容器collapsing_header(树形折叠分组)、scroll_area(滚轮驱动平滑视口滚动)、tab_bar(悬浮滑块标签导航)。
    • 无头纯算与高覆盖测试:核心图元与组件逻辑完全脱离浏览器,内置 58 项自动化无头白盒单元测试(100% 通过)。
    • Canvas 2D 宿主驱动器:轻量 JavaScript 桥接层与 60 FPS 渲染管线,结合 O(1) 视口边界裁剪与多尺度 LOD 架构。

    #规划与演进中特性 (Planned / In Roadmap)

    • 硬件加速渲染后端:WebGL / WebGPU 批量几何图元渲染器与自定义着色器流水线。
    • 跨平台原生桌面桥接:Raylib / SDL3 跨平台窗口环境驱动器适配。
    • 高级数据流图元:实时遥测波动折线图(Sparkline)、多视窗停靠排版系统(Docking System)。


    #开发路线图(2026 年 9 月 9 日 — 9 月 25 日)

    #第一阶段:核心架构与基础套件(9月9日 – 9月11日)[已全面交付]

    #第二阶段:专业工程能力深度演进(9月12日 – 9月25日)[推进中]

    完整攻坚指标与详细验收准则请参阅 ROADMAP.md (English)。


    #架构与技术文档

    系统完整的设计白皮书与技术规范统一整理在 docs/ 目录中:

    文档名称定位与说明核心覆盖范围
    研发路线图与里程碑 (English)交付周期与规划各阶段交付清单、详细验收准则与技术演进方向
    系统架构与技术白皮书 (English)内核运行机制Widget ID 哈希定位、游标排版模型、裁剪栈机制
    公共 API 参考手册 (English)开发者接口文档UIContext 方法签名、容器布局协议、Painter 绘图接口
    设计系统与视觉规范 (English)界面设计 Token深色/浅色配色方案、字阶规范、间距系统、交互状态机
    官方编码规范指南 (English)官方研发标准块语法(///\|)、命名、可见性、测试分层、.mbti 契约
    开源贡献规范指南 (English)工程协作标准研发流程、测试准则、Conventional Commits 提交约定
    更新日志与版本记录版本演进记录项目发布与代码变更历史跟踪


    #开源许可证

    本项目采用 Apache License 2.0 开源许可证。