Fixes nodes being resized or moved when changing an anchor
This commit is contained in:
parent
9a62829759
commit
00473e0897
1 changed files with 13 additions and 5 deletions
|
@ -1357,24 +1357,32 @@ float Control::_a2s(float p_val, float p_anchor, float p_range) const {
|
|||
}
|
||||
|
||||
void Control::set_anchor(Margin p_margin, float p_anchor, bool p_keep_margin, bool p_push_opposite_anchor) {
|
||||
bool pushed = false;
|
||||
float parent_range = _get_parent_range((p_margin == MARGIN_LEFT || p_margin == MARGIN_RIGHT) ? 0 : 1);
|
||||
float previous_margin_pos = data.margin[p_margin] + data.anchor[p_margin] * parent_range;
|
||||
float previous_opposite_margin_pos = data.margin[(p_margin + 2) % 4] + data.anchor[(p_margin + 2) % 4] * parent_range;
|
||||
|
||||
data.anchor[p_margin] = CLAMP(p_anchor, 0.0, 1.0);
|
||||
|
||||
if (((p_margin == MARGIN_LEFT || p_margin == MARGIN_TOP) && data.anchor[p_margin] > data.anchor[(p_margin + 2) % 4]) ||
|
||||
((p_margin == MARGIN_RIGHT || p_margin == MARGIN_BOTTOM) && data.anchor[p_margin] < data.anchor[(p_margin + 2) % 4])) {
|
||||
if (p_push_opposite_anchor) {
|
||||
data.anchor[(p_margin + 2) % 4] = data.anchor[p_margin];
|
||||
pushed = true;
|
||||
} else {
|
||||
data.anchor[p_margin] = data.anchor[(p_margin + 2) % 4];
|
||||
}
|
||||
}
|
||||
|
||||
if (!p_keep_margin) {
|
||||
data.margin[p_margin] = _s2a(previous_margin_pos, data.anchor[p_margin], parent_range);
|
||||
if (p_push_opposite_anchor) {
|
||||
data.margin[(p_margin + 2) % 4] = _s2a(previous_opposite_margin_pos, data.anchor[(p_margin + 2) % 4], parent_range);
|
||||
}
|
||||
}
|
||||
|
||||
if (is_inside_tree()) {
|
||||
if (p_keep_margin) {
|
||||
_size_changed();
|
||||
}
|
||||
}
|
||||
|
||||
update();
|
||||
_change_notify();
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue