Merge pull request #51965 from theoway/fix_node_arranger_origin_bug
Fixes position offset of node groups set by arrange_nodes() in GraphEdit
This commit is contained in:
commit
51800eebc6
1 changed files with 12 additions and 7 deletions
|
@ -2013,7 +2013,6 @@ void GraphEdit::arrange_nodes() {
|
|||
|
||||
if (gn->is_selected()) {
|
||||
selected_nodes.insert(gn->get_name());
|
||||
origin = origin < gn->get_position_offset() ? origin : gn->get_position_offset();
|
||||
Set<StringName> s;
|
||||
for (List<Connection>::Element *E = connections.front(); E; E = E->next()) {
|
||||
GraphNode *p_from = Object::cast_to<GraphNode>(node_names[E->get().from]);
|
||||
|
@ -2037,6 +2036,11 @@ void GraphEdit::arrange_nodes() {
|
|||
}
|
||||
}
|
||||
|
||||
if (!selected_nodes.size()) {
|
||||
arranging_graph = false;
|
||||
return;
|
||||
}
|
||||
|
||||
HashMap<int, Vector<StringName>> layers = _layering(selected_nodes, upper_neighbours);
|
||||
_crossing_minimisation(layers, upper_neighbours);
|
||||
|
||||
|
@ -2063,16 +2067,16 @@ void GraphEdit::arrange_nodes() {
|
|||
for (const Set<StringName>::Element *E = block_heads.front(); E; E = E->next()) {
|
||||
_place_block(E->get(), gap_v, layers, root, align, node_names, inner_shift, sink, shift, new_positions);
|
||||
}
|
||||
origin.y = Object::cast_to<GraphNode>(node_names[layers[0][0]])->get_position_offset().y - (new_positions[layers[0][0]].y + (float)inner_shift[layers[0][0]]);
|
||||
origin.x = Object::cast_to<GraphNode>(node_names[layers[0][0]])->get_position_offset().x;
|
||||
|
||||
for (const Set<StringName>::Element *E = block_heads.front(); E; E = E->next()) {
|
||||
StringName u = E->get();
|
||||
StringName prev = u;
|
||||
float start_from = origin.y + new_positions[E->get()].y;
|
||||
do {
|
||||
Vector2 cal_pos;
|
||||
cal_pos.y = start_from + (real_t)inner_shift[u];
|
||||
new_positions.set(u, cal_pos);
|
||||
prev = u;
|
||||
u = align[u];
|
||||
} while (u != E->get());
|
||||
}
|
||||
|
@ -2095,10 +2099,11 @@ void GraphEdit::arrange_nodes() {
|
|||
if (current_node_size == largest_node_size) {
|
||||
cal_pos.x = start_from;
|
||||
} else {
|
||||
float current_node_start_pos;
|
||||
if (current_node_size >= largest_node_size / 2) {
|
||||
current_node_start_pos = start_from;
|
||||
} else {
|
||||
float current_node_start_pos = start_from;
|
||||
if (current_node_size < largest_node_size / 2) {
|
||||
if (!(i || j)) {
|
||||
start_from -= (largest_node_size - current_node_size);
|
||||
}
|
||||
current_node_start_pos = start_from + largest_node_size - current_node_size;
|
||||
}
|
||||
cal_pos.x = current_node_start_pos;
|
||||
|
|
Loading…
Reference in a new issue