mirror of
https://github.com/godotengine/godot.git
synced 2024-11-21 03:18:37 +08:00
Fixes nodes being resized or moved when changing an anchor
This commit is contained in:
parent
9a62829759
commit
00473e0897
@ -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) {
|
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);
|
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]) ||
|
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])) {
|
((p_margin == MARGIN_RIGHT || p_margin == MARGIN_BOTTOM) && data.anchor[p_margin] < data.anchor[(p_margin + 2) % 4])) {
|
||||||
if (p_push_opposite_anchor) {
|
if (p_push_opposite_anchor) {
|
||||||
data.anchor[(p_margin + 2) % 4] = data.anchor[p_margin];
|
data.anchor[(p_margin + 2) % 4] = data.anchor[p_margin];
|
||||||
pushed = true;
|
|
||||||
} else {
|
} else {
|
||||||
data.anchor[p_margin] = data.anchor[(p_margin + 2) % 4];
|
data.anchor[p_margin] = data.anchor[(p_margin + 2) % 4];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_inside_tree()) {
|
if (!p_keep_margin) {
|
||||||
if (p_keep_margin) {
|
data.margin[p_margin] = _s2a(previous_margin_pos, data.anchor[p_margin], parent_range);
|
||||||
_size_changed();
|
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()) {
|
||||||
|
_size_changed();
|
||||||
|
}
|
||||||
|
|
||||||
update();
|
update();
|
||||||
_change_notify();
|
_change_notify();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user