Merge pull request #40436 from DanielZTing/master

Evenly distribute stretched Nodes in BoxContainer
This commit is contained in:
Rémi Verschelde 2020-07-24 13:47:18 +02:00 committed by GitHub
commit 513b39882a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -104,6 +104,7 @@ void BoxContainer::_resort() {
has_stretched = true;
bool refit_successful = true; //assume refit-test will go well
float error = 0; // Keep track of accumulated error in pixels
for (int i = 0; i < get_child_count(); i++) {
Control *c = Object::cast_to<Control>(get_child(i));
@ -119,8 +120,9 @@ void BoxContainer::_resort() {
if (msc.will_stretch) { //wants to stretch
//let's see if it can really stretch
int final_pixel_size = stretch_avail * c->get_stretch_ratio() / stretch_ratio_total;
float final_pixel_size = stretch_avail * c->get_stretch_ratio() / stretch_ratio_total;
// Add leftover fractional pixels to error accumulator
error += final_pixel_size - (int)final_pixel_size;
if (final_pixel_size < msc.min_size) {
//if available stretching area is too small for widget,
//then remove it from stretching area
@ -132,6 +134,11 @@ void BoxContainer::_resort() {
break;
} else {
msc.final_size = final_pixel_size;
// Dump accumulated error if one pixel or more
if (error >= 1) {
msc.final_size += 1;
error -= 1;
}
}
}
}