#bindings #node #editor #ui #imgui #github #context

imnodes

Rust 对 https://github.com/Nelarius/imnodes 的绑定

4 个版本

0.2.2 2024年1月14日
0.2.1 2024年1月14日
0.2.0 2023年9月5日
0.1.0 2023年4月19日

GUI 中排名第 883

每月下载量 28

MIT/Apache

5MB
15K SLoC

PowerShell 4K SLoC // 0.2% comments C++ 4K SLoC // 0.1% comments Lua 2K SLoC // 0.0% comments Rust 1.5K SLoC // 0.0% comments Visual Studio Project 1K SLoC Python 586 SLoC // 0.2% comments Perl 448 SLoC // 0.1% comments Shell 304 SLoC // 0.2% comments Ruby 86 SLoC Visual Studio Solution 64 SLoC Batch 40 SLoC // 0.3% comments C 26 SLoC // 0.6% comments BASH 9 SLoC // 0.2% comments Zsh 6 SLoC

imnodes-rs

Tests

这些是使用 cimnodesimgui-rs 进行绑定的 imnodes

它受到 implot-rs 的启发。

example image

文档

cargodoc --no-deps --open

待办/想法

  • 添加使用 salsa 或其他增量计算库的示例
  • IO
    • 所有鼠标/修饰符辅助函数

希望得到

  • 使用 Serde 使能够声明图并渲染它们
    • 使用 imnode_* 函数加载和保存
  • 为所有内容添加注释
    • 找出坐标系的良好描述
  • 审查 unsafe 代码中的类型
    • 特别是 -> &mut sys::Style

示例(见 imnodes-wgpu-examples/src/hello_world.rs

fn show(ui: &imgui::Ui, context: &mut imnodes::EditorContext) {
    let mut id_generator = context.new_identifier_generator();

    imnodes::editor(context, |mut editor| {
        editor.add_node(id_generator.next_node(), |mut node| {
            node.add_titlebar(|| ui.text("simple node :)"));

            node.add_input(
                id_generator.next_input_pin(),
                imnodes::PinShape::Circle,
                || ui.text("input"),
            );

            node.add_output(
                id_generator.next_output_pin(),
                imnodes::PinShape::QuadFilled,
                || ui.text("output"),
            );
        });
    });
}

依赖关系

~12–18MB
~241K SLoC