copy paste mysteries with ghost nodes and disappearing connections

This commit is contained in:
Sebastian
2024-11-01 14:46:51 +01:00
parent a10335ed47
commit 41cad27806
3 changed files with 10 additions and 12 deletions
+7 -9
View File
@@ -64,17 +64,15 @@ class GraphManager{
} }
SPTR_Node copyNode(SPTR_Node n, Vec2D<float> position){ SPTR_Node copyNode(SPTR_Node n, Vec2D<float> position){
auto nc = std::make_shared<Node>(*n); nodes.emplace_back(std::make_shared<Node>(*n));
nc->setPosition(position); nodes.back()->setPosition(position);
nodes.push_back(nc); return nodes.back();
return nc;
} }
std::shared_ptr<MidiNode> copyNode(std::shared_ptr<MidiNode> n, Vec2D<float> position){ std::shared_ptr<Node> copyNode(std::shared_ptr<MidiNode> n, Vec2D<float> position){
auto nc = std::make_shared<MidiNode>(*n); nodes.emplace_back(std::make_shared<Node>(*n));
nc->setPosition(position); nodes.back()->setPosition(position);
nodes.push_back(nc); return nodes.back();
return nc;
} }
SPTR_Node addMidiNode(Vec2D<float> position){ SPTR_Node addMidiNode(Vec2D<float> position){
+1 -1
View File
@@ -295,7 +295,7 @@ int main(){
} }
case InteractionState::PASTE_SELECTED_NODES: case InteractionState::PASTE_SELECTED_NODES:
{ {
for(auto &n: copied_nodes){ for(auto n: copied_nodes){
n->drag_offset = (n->position - copied_nodes.front()->position); n->drag_offset = (n->position - copied_nodes.front()->position);
} }
app.copyNodesAndConnections(copied_nodes, mouse_pos); app.copyNodesAndConnections(copied_nodes, mouse_pos);
+2 -2
View File
@@ -56,9 +56,9 @@ class AppState{
SPTR_Node old_node = n; SPTR_Node old_node = n;
SPTR_Node new_node = gm.copyNode(n, position + n->drag_offset); SPTR_Node new_node = gm.copyNode(n, position + n->drag_offset);
new_node->copied = false; new_node->copied = false;
new_node->selected = true; new_node->selected = false;
for(auto &c : copy_connections){ for(auto c : copy_connections){
if(c->start == old_node) c->start = new_node; if(c->start == old_node) c->start = new_node;
if(c->end == old_node) c->end = new_node; if(c->end == old_node) c->end = new_node;
} }