#imgui #dear #bindings #ui #window #mouse #version

sys aflak_imgui-sys

对 dear imgui 的原始 FFI 绑定

1 个不稳定版本

使用旧的 Rust 2015

0.18.1 2018年8月11日

15#dear

38 每月下载
5 个crate中(直接使用2个)

MIT/Apache

10MB
194K SLoC

C 101K SLoC // 0.2% comments C++ 45K SLoC // 0.1% comments Visual Studio Project 40K SLoC // 0.0% comments Rust 2K SLoC // 0.0% comments Python 2K SLoC // 0.8% comments Objective-C++ 1.5K SLoC // 0.1% comments Objective-C 768 SLoC // 0.1% comments Visual Studio Solution 606 SLoC Perl 422 SLoC // 0.1% comments M4 322 SLoC // 0.2% comments Shell 227 SLoC // 0.2% comments AWK 142 SLoC Batch 71 SLoC GLSL 64 SLoC Forge Config 36 SLoC // 0.8% comments HICAD 24 SLoC INI 8 SLoC

包含 (ELF 可执行文件/库,1MB) example_glfw_opengl3,(ELF 可执行文件/库,600KB) third-party/cimgui/imgui/imgui.o,(ELF 可执行文件/库,730KB) imgui.o,(静态库,295KB) glfw3.lib,(ELF 可执行文件/库,280KB) third-party/cimgui/imgui/imgui_demo.o,(ELF 可执行文件/库,295KB) third-party/cimgui/imgui/imgui_draw.o 和更多

imgui-rs:ImGui的Rust绑定

仍然相当实验性!

最低 Rust 版本:1.20

Build Status Documentation on docs.rs

Hello world

ui.window(im_str!("Hello world"))
    .size((300.0, 100.0), ImGuiCond::FirstUseEver)
    .build(|| {
        ui.text(im_str!("Hello world!"));
        ui.text(im_str!("This...is...imgui-rs!"));
        ui.separator();
        let mouse_pos = ui.imgui().mouse_pos();
        ui.text(im_str!("Mouse Position: ({:.1},{:.1})", mouse_pos.0, mouse_pos.1));
    })

当前实现的功能

  • 低级API(imgui-sys)
  • 与 Glium 项目轻松集成的渲染器(可选)
  • 高级API的部分功能
  • 定义和传递 null-terminated UTF-8 到 ImGui 的不错方法。大多数情况下需要使用宏 im_str!。有关更多信息以及此设计的原因,请参阅 问题 #7
  • imgui_demo.cpp 的部分在 Rust 中重新实现,作为API使用示例(examples/test_window_impl.rs)

重要但未实现的功能

  • 文档(rustdoc)
  • 支持将自定义 Program 传递给 Glium 渲染器(例如,从着色器缓存或自定义着色器)

核心设计问题和当前选择

  • 闭包 VS begin/end 对(当前选择:闭包)
  • 可变引用 VS 返回值(当前选择:可变引用)
  • 传递 Ui<'ui> VS 传递 &'ui Ui(当前选择:Ui<'ui>)
  • 将 API 分割成更小的部分 VS 在 Ui 中所有绘制调用(当前选择:在 Ui 中所有绘制调用)
  • 可选参数的构建器模式 VS 其他(当前选择:构建器)
  • 构建器中的突变函数 VS 自消耗函数(当前选择:自消耗)

编译和运行演示

示例位于 imgui-examples 目录下。

git clone https://github.com/Gekkio/imgui-rs
cd imgui-rs
git submodule update --init --recursive
cd imgui-examples
cargo test

cargo run --example hello_world
cargo run --example test_window
cargo run --example test_window_impl

注意 Windows 用户:您需要使用 Rust 编译器的 MSVC ABI 版本及其相关 依赖项 来构建此库并运行示例。

如何贡献

  1. 更改或添加内容

  2. 运行 rustfmt 以保证代码风格一致性

     cargo install rustfmt
     cargo fmt -- --write-mode=overwrite
    
  3. 在 Github 上打开一个 pull request

许可证

许可协议为以下之一

由您自行选择。

使用了 ImGuicimgui

贡献

除非您明确表示,否则根据Apache-2.0许可证定义,您有意提交给作品的所有贡献将如上双许可,没有任何附加条款或条件。

依赖关系