iced_nodegraph

A node graph editor widget for iced

crates.io 0.5.0

Quick Start

use iced_nodegraph::{PinRef, edge, node, node_graph};
use iced::{Element, Theme, Point, Vector};
use iced::widget::text;
use iced_wgpu::Renderer;

#[derive(Debug, Clone)]
enum Message {
    EdgeConnected { from: PinRef, to: PinRef },
    NodesMoved { delta: Vector, node_ids: Vec<usize> },
}

fn view(edges: &[(PinRef, PinRef)]) -> Element<'_, Message, Theme, Renderer> {
    node_graph()
        .on_connect(|from, to| Message::EdgeConnected { from, to })
        .on_move(|delta, node_ids| Message::NodesMoved { delta, node_ids })
        .push_node(node(0, Point::new(100.0, 100.0), text("Node A")))
        .push_node(node(1, Point::new(300.0, 100.0), text("Node B")))
        .edges(edges.iter().map(|(from, to)| edge((), *from, *to)))
        .into()
}