Moonbit binding for Dear ImGui library - A simple GUI example
imgui-mbt/
├── CMakeLists.txt # CMake 构建配置
├── build.ps1 # Windows PowerShell 构建脚本
├── build.sh # Linux/macOS shell 构建脚本
├── moon.mod.json # Moonbit 模块配置
├── src/
│ ├── lib/
│ │ ├── hello.mbt # Moonbit GUI 库接口
│ │ ├── hello_test.mbt # 测试文件
│ │ ├── moon.pkg.json # 包配置
│ │ ├── imgui_bindings.cpp # C++ FFI 绑定实现
│ │ └── imgui_bindings.h # C FFI 头文件
│ └── main/
│ ├── main.mbt # 主程序入口
│ └── moon.pkg.json # 主程序包配置
├── external/ # 外部依赖库
│ ├── imgui/ # Dear ImGui 源码
│ ├── SDL3-3.4.0/ # SDL3 开发库
│ └── wgpu-windows-x86_64-gnu-release/ # WebGPU 实现
├── build/ # 构建输出目录
├── target/ # 运行时文件目录
└── LICENSE # Apache 2.0 许可证.\build.ps1# 配置项目
cmake -B build -G "Ninja" -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++
# 构建
cmake --build build# 安装依赖
sudo apt-get install libsdl3-dev # Ubuntu/Debian
# 或使用 brew install sdl3 # macOS
# 构建
./build.sh# 编译项目
moon build --target native
# 运行示例
moon runimport lib { imgui_init, imgui_shutdown, main_loop, cleanup }
fn main {
// 初始化 ImGui
let init_result = imgui_init()
if init_result {
println("Dear ImGui initialized successfully!")
} else {
println("Failed to initialize Dear ImGui")
cleanup()
return
}
// 运行主循环
println("Starting main loop...")
main_loop()
// 清理资源
cleanup()
println("Program exited successfully")
}// 窗口管理
imgui_begin("窗口标题")
imgui_end()
// 基本控件
imgui_button("按钮")
imgui_slider_float("滑动条", 50.0, 0.0, 100.0)
imgui_checkbox("复选框", true)
imgui_text("文本显示")
// 布局
imgui_separator()
imgui_same_line()Moonbit binding for Dear ImGui library - A simple GUI example