[gtk/wip/otte/for-master: 29/30] boxlayout: Split loop into if statmement




commit 0a31201c889a49667d7411bdafc7998a10a220ce
Author: Benjamin Otte <otte redhat com>
Date:   Tue Nov 9 01:59:08 2021 +0100

    boxlayout: Split loop into if statmement
    
    Turns it into 2 loops, one for the homogeneous part and one for the
    complicated part.

 gtk/gtkboxlayout.c | 111 +++++++++++++++++++++++++++++++----------------------
 1 file changed, 65 insertions(+), 46 deletions(-)
---
diff --git a/gtk/gtkboxlayout.c b/gtk/gtkboxlayout.c
index d942167a3d..44394059d4 100644
--- a/gtk/gtkboxlayout.c
+++ b/gtk/gtkboxlayout.c
@@ -311,7 +311,7 @@ gtk_box_layout_compute_opposite_size_for_size (GtkBoxLayout *self,
   int child_minimum_baseline, child_natural_baseline;
   int n_extra_widgets = 0;
   int spacing;
-  gboolean have_baseline;
+  gboolean have_baseline = FALSE;
 
   count_expand_children (widget, self->orientation, &nvis_children, &nexpand_children);
 
@@ -320,12 +320,51 @@ gtk_box_layout_compute_opposite_size_for_size (GtkBoxLayout *self,
 
   spacing = get_spacing (self, gtk_widget_get_css_node (widget));
   sizes = g_newa (GtkRequestedSize, nvis_children);
-  extra_space = MAX (0, for_size - (nvis_children - 1) * spacing);
+  g_assert ((nvis_children - 1) * spacing <= for_size);
+  extra_space = for_size - (nvis_children - 1) * spacing;
 
   if (self->homogeneous)
     {
       size_given_to_child = extra_space / nvis_children;
       n_extra_widgets = extra_space % nvis_children;
+
+      for (child = _gtk_widget_get_first_child (widget);
+           child != NULL;
+           child = _gtk_widget_get_next_sibling (child))
+        {
+          if (!gtk_widget_should_layout (child))
+            continue;
+
+          child_size = size_given_to_child;
+          if (n_extra_widgets)
+            {
+              child_size++;
+              n_extra_widgets--;
+            }
+
+          child_minimum_baseline = child_natural_baseline = -1;
+          /* Assign the child's position. */
+          gtk_widget_measure (child,
+                              OPPOSITE_ORIENTATION (self->orientation),
+                              child_size,
+                              &child_minimum, &child_natural,
+                              &child_minimum_baseline, &child_natural_baseline);
+
+          if (child_minimum_baseline >= 0)
+            {
+              have_baseline = TRUE;
+              computed_minimum_below = MAX (computed_minimum_below, child_minimum - child_minimum_baseline);
+              computed_natural_below = MAX (computed_natural_below, child_natural - child_natural_baseline);
+              computed_minimum_above = MAX (computed_minimum_above, child_minimum_baseline);
+              computed_natural_above = MAX (computed_natural_above, child_natural_baseline);
+            }
+          else
+            {
+              computed_minimum = MAX (computed_minimum, child_minimum);
+              computed_natural = MAX (computed_natural, child_natural);
+            }
+        }
+
     }
   else
     {
@@ -360,14 +399,15 @@ gtk_box_layout_compute_opposite_size_for_size (GtkBoxLayout *self,
                               NULL, &nat_for_min,
                               NULL, NULL);
           sizes[i].natural_size = MAX (sizes[i].natural_size, nat_for_min);
+          sizes[i].data = child;
 
           children_minimum_size += sizes[i].minimum_size;
           i += 1;
         }
 
       /* Bring children up to size first */
+      g_assert (children_minimum_size <= extra_space);
       extra_space -= children_minimum_size;
-      extra_space = MAX (0, extra_space);
       extra_space = gtk_distribute_natural_allocation (extra_space, nvis_children, sizes);
 
       /* Calculate space which hasn't distributed yet,
@@ -382,32 +422,12 @@ gtk_box_layout_compute_opposite_size_for_size (GtkBoxLayout *self,
         {
           size_given_to_child = 0;
         }
-    }
 
-  have_baseline = FALSE;
-  for (i = 0, child = _gtk_widget_get_first_child (widget);
-       child != NULL;
-       child = _gtk_widget_get_next_sibling (child))
-    {
-      if (!gtk_widget_should_layout (child))
-        continue;
-
-      /* Assign the child's size. */
-      if (self->homogeneous)
-        {
-          child_size = size_given_to_child;
-
-          if (n_extra_widgets > 0)
-            {
-              child_size++;
-              n_extra_widgets--;
-            }
-        }
-      else
+      for (i = 0; i < nvis_children; i++)
         {
           child_size = sizes[i].minimum_size;
 
-          if (gtk_widget_compute_expand (child, self->orientation))
+          if (gtk_widget_compute_expand (sizes[i].data, self->orientation))
             {
               child_size += size_given_to_child;
 
@@ -417,30 +437,29 @@ gtk_box_layout_compute_opposite_size_for_size (GtkBoxLayout *self,
                   n_extra_widgets--;
                 }
             }
-        }
 
-      child_minimum_baseline = child_natural_baseline = -1;
-      /* Assign the child's position. */
-      gtk_widget_measure (child,
-                          OPPOSITE_ORIENTATION (self->orientation),
-                          child_size,
-                          &child_minimum, &child_natural,
-                          &child_minimum_baseline, &child_natural_baseline);
+          child_minimum_baseline = child_natural_baseline = -1;
+          /* Assign the child's position. */
+          gtk_widget_measure (sizes[i].data,
+                              OPPOSITE_ORIENTATION (self->orientation),
+                              child_size,
+                              &child_minimum, &child_natural,
+                              &child_minimum_baseline, &child_natural_baseline);
 
-      if (child_minimum_baseline >= 0)
-        {
-          have_baseline = TRUE;
-          computed_minimum_below = MAX (computed_minimum_below, child_minimum - child_minimum_baseline);
-          computed_natural_below = MAX (computed_natural_below, child_natural - child_natural_baseline);
-          computed_minimum_above = MAX (computed_minimum_above, child_minimum_baseline);
-          computed_natural_above = MAX (computed_natural_above, child_natural_baseline);
-        }
-      else
-        {
-          computed_minimum = MAX (computed_minimum, child_minimum);
-          computed_natural = MAX (computed_natural, child_natural);
+          if (child_minimum_baseline >= 0)
+            {
+              have_baseline = TRUE;
+              computed_minimum_below = MAX (computed_minimum_below, child_minimum - child_minimum_baseline);
+              computed_natural_below = MAX (computed_natural_below, child_natural - child_natural_baseline);
+              computed_minimum_above = MAX (computed_minimum_above, child_minimum_baseline);
+              computed_natural_above = MAX (computed_natural_above, child_natural_baseline);
+            }
+          else
+            {
+              computed_minimum = MAX (computed_minimum, child_minimum);
+              computed_natural = MAX (computed_natural, child_natural);
+            }
         }
-      i += 1;
     }
 
   if (have_baseline)


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]