21#if defined(__has_include) && __has_include(<pulp/host/signal_graph.hpp>)
22#define PULP_VIEW_HAS_GRAPH_EDITOR_VIEW 1
31#include <unordered_map>
33namespace pulp::view::widgets {
35class GraphEditorView :
public View {
37 explicit GraphEditorView(host::SignalGraph& graph) : graph_(graph) {
44 void set_node_position(host::NodeId
id,
float x,
float y) {
45 positions_[id] = {
x,
y};
52 void paint(canvas::Canvas& c)
override;
58 void on_mouse_down(Point pos)
override;
59 void on_mouse_drag(Point pos)
override;
60 void on_mouse_up(Point pos)
override;
66 void on_mouse_event(
const MouseEvent& ev)
override;
67 bool wants_mouse_input()
const override {
80 void set_editor_host_provider(std::function<WindowHost*(host::NodeId)> provider) {
81 editor_host_provider_ = std::move(provider);
86 bool open_node_editor(host::NodeId
id);
89 void close_node_editor(host::NodeId
id);
92 bool is_editor_open(host::NodeId
id)
const {
93 return open_editors_.find(
id) != open_editors_.end();
101 static constexpr float kNodeWidth = 160.0f;
102 static constexpr float kNodeHeight = 80.0f;
103 static constexpr float kPortRadius = 6.0f;
104 static constexpr float kPortSpacing = 18.0f;
105 static constexpr float kCornerRadius = 8.0f;
108 Pos node_origin_(host::NodeId
id)
const;
109 Pos input_port_pos_(host::NodeId
id,
int port)
const;
110 Pos output_port_pos_(host::NodeId
id,
int port)
const;
111 bool hit_node_(
float mx,
float my, host::NodeId& out_id)
const;
112 bool hit_input_port_(
float mx,
float my, host::NodeId& out_id,
int& out_port)
const;
113 bool hit_output_port_(
float mx,
float my, host::NodeId& out_id,
int& out_port)
const;
115 void paint_node_(canvas::Canvas& c,
const host::GraphNode& n);
116 void paint_connection_(canvas::Canvas& c,
const host::Connection& conn);
117 void paint_ghost_(canvas::Canvas& c);
120 host::SignalGraph& graph_;
121 std::unordered_map<host::NodeId, Pos> positions_;
124 bool dragging_ =
false;
125 host::NodeId drag_src_node_ = 0;
126 int drag_src_port_ = -1;
127 bool drag_src_is_output_ =
true;
128 Pos drag_cursor_{0, 0};
131 host::NodeId selected_node_ = 0;
135 uint16_t last_modifiers_ = 0;
139 std::function<WindowHost*(host::NodeId)> editor_host_provider_;
140 std::unordered_map<host::NodeId, std::unique_ptr<EditorAttachment>> open_editors_;
146#define PULP_VIEW_HAS_GRAPH_EDITOR_VIEW 0
@ Automation
Definition graph_runtime_plan.hpp:88
@ Midi
Definition sample_region_proof.hpp:17
@ Feedback
Definition anticipation_eligibility.hpp:26
@ y
Definition input_events.hpp:42
@ x
Definition input_events.hpp:41