diff options
-rw-r--r-- | gtk/gtkbox.c | 119 |
1 files changed, 50 insertions, 69 deletions
diff --git a/gtk/gtkbox.c b/gtk/gtkbox.c index fac5464e53..927093e458 100644 --- a/gtk/gtkbox.c +++ b/gtk/gtkbox.c @@ -1041,8 +1041,8 @@ gtk_box_compute_size_for_opposing_orientation (GtkBox *box, gint *natural_baseline) { GtkBoxPrivate *private = gtk_box_get_instance_private (box); - GtkBoxChild *child; - GList *children; + GtkWidget *widget = GTK_WIDGET (box); + GtkWidget *child; gint nvis_children; gint nexpand_children; gint computed_minimum = 0, computed_natural = 0; @@ -1050,7 +1050,6 @@ gtk_box_compute_size_for_opposing_orientation (GtkBox *box, gint computed_minimum_below = 0, computed_natural_below = 0; gint computed_minimum_baseline = -1, computed_natural_baseline = -1; GtkRequestedSize *sizes; - GtkPackType packing; gint extra_space, size_given_to_child, i; gint children_minimum_size = 0; gint child_size, child_minimum, child_natural; @@ -1069,22 +1068,19 @@ gtk_box_compute_size_for_opposing_orientation (GtkBox *box, extra_space = avail_size - (nvis_children - 1) * spacing; /* Retrieve desired size for visible children */ - for (i = 0, children = private->children; children; children = children->next) + for (i = 0, child = _gtk_widget_get_first_child (widget); + child != NULL; + child = _gtk_widget_get_next_sibling (child)) { - child = children->data; - - if (_gtk_widget_get_visible (child->widget)) + if (_gtk_widget_get_visible (child)) { - gtk_widget_measure (child->widget, + gtk_widget_measure (child, private->orientation, -1, &sizes[i].minimum_size, &sizes[i].natural_size, NULL, NULL); children_minimum_size += sizes[i].minimum_size; - - sizes[i].data = child; - i += 1; } } @@ -1120,32 +1116,32 @@ gtk_box_compute_size_for_opposing_orientation (GtkBox *box, } have_baseline = FALSE; - /* Allocate child positions. */ - for (packing = GTK_PACK_START; packing <= GTK_PACK_END; ++packing) + for (i = 0, child = _gtk_widget_get_first_child (widget); + child != NULL; + child = _gtk_widget_get_next_sibling (child)) { - for (i = 0, children = private->children; - children; - children = children->next) - { - child = children->data; + /* If widget is not visible, skip it. */ + if (!_gtk_widget_get_visible (child)) + continue; - /* If widget is not visible, skip it. */ - if (!_gtk_widget_get_visible (child->widget)) - continue; + /* Assign the child's size. */ + if (private->homogeneous) + { + child_size = size_given_to_child; - /* If widget is packed differently skip it, but still increment i, - * since widget is visible and will be handled in next loop iteration. - */ - if (child->pack != packing) - { - i++; - continue; - } + if (n_extra_widgets > 0) + { + child_size++; + n_extra_widgets--; + } + } + else + { + child_size = sizes[i].minimum_size; - /* Assign the child's size. */ - if (private->homogeneous) + if (gtk_widget_compute_expand (child, private->orientation)) { - child_size = size_given_to_child; + child_size += size_given_to_child; if (n_extra_widgets > 0) { @@ -1153,45 +1149,30 @@ gtk_box_compute_size_for_opposing_orientation (GtkBox *box, n_extra_widgets--; } } - else - { - child_size = sizes[i].minimum_size; - - if (gtk_widget_compute_expand (child->widget, private->orientation)) - { - child_size += size_given_to_child; - - if (n_extra_widgets > 0) - { - child_size++; - n_extra_widgets--; - } - } - } + } - child_minimum_baseline = child_natural_baseline = -1; - /* Assign the child's position. */ - gtk_widget_measure (child->widget, - OPPOSITE_ORIENTATION (private->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 (child, + OPPOSITE_ORIENTATION (private->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); - } - i += 1; - } + 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) |