mirror of
https://github.com/brl/mutter.git
synced 2024-11-21 07:30:42 -05:00
clutter/box-layout: Request the correct size for homogeneous layouts
In case the layout is homogeneous, all children aligned by the box layout must be allocated the same size. In order to fit them all inside the container, the size request of the box layout has to look for the child with the largest size and use that size for all children. Fixes https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/2737 https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1333
This commit is contained in:
parent
77dc3a5065
commit
c2146b457e
@ -475,8 +475,10 @@ get_preferred_size_for_orientation (ClutterBoxLayout *self,
|
||||
ClutterActor *child;
|
||||
gint n_children = 0;
|
||||
gfloat minimum, natural;
|
||||
float largest_min_size, largest_nat_size;
|
||||
|
||||
minimum = natural = 0;
|
||||
largest_min_size = largest_nat_size = 0;
|
||||
|
||||
clutter_actor_iter_init (&iter, container);
|
||||
while (clutter_actor_iter_next (&iter, &child))
|
||||
@ -491,8 +493,22 @@ get_preferred_size_for_orientation (ClutterBoxLayout *self,
|
||||
get_child_size (child, priv->orientation,
|
||||
for_size, &child_min, &child_nat);
|
||||
|
||||
minimum += child_min;
|
||||
natural += child_nat;
|
||||
if (priv->is_homogeneous)
|
||||
{
|
||||
largest_min_size = MAX (largest_min_size, child_min);
|
||||
largest_nat_size = MAX (largest_nat_size, child_nat);
|
||||
}
|
||||
else
|
||||
{
|
||||
minimum += child_min;
|
||||
natural += child_nat;
|
||||
}
|
||||
}
|
||||
|
||||
if (priv->is_homogeneous)
|
||||
{
|
||||
minimum = largest_min_size * n_children;
|
||||
natural = largest_nat_size * n_children;
|
||||
}
|
||||
|
||||
if (n_children > 1)
|
||||
|
Loading…
Reference in New Issue
Block a user