GtkAlignment now tries to allocate natural size to the child if available and does the height-for-width calculation depending on allocation.

This commit is contained in:
Tristan Van Berkom
2010-04-20 01:22:31 -04:00
parent 0b92348077
commit 3a9ab87489

View File

@ -423,7 +423,6 @@ gtk_alignment_size_allocate (GtkWidget *widget,
GtkAlignment *alignment; GtkAlignment *alignment;
GtkBin *bin; GtkBin *bin;
GtkAllocation child_allocation; GtkAllocation child_allocation;
GtkRequisition child_requisition;
gint width, height; gint width, height;
gint border_width; gint border_width;
gint padding_horizontal, padding_vertical; gint padding_horizontal, padding_vertical;
@ -439,8 +438,9 @@ gtk_alignment_size_allocate (GtkWidget *widget,
if (bin->child && gtk_widget_get_visible (bin->child)) if (bin->child && gtk_widget_get_visible (bin->child))
{ {
GtkExtendedLayout *layout = GTK_EXTENDED_LAYOUT (bin->child); GtkExtendedLayout *layout = GTK_EXTENDED_LAYOUT (bin->child);
gint child_nat_width;
gtk_extended_layout_get_desired_size (layout, NULL, &child_requisition); gint child_nat_height;
gint child_width, child_height;
border_width = GTK_CONTAINER (alignment)->border_width; border_width = GTK_CONTAINER (alignment)->border_width;
@ -451,22 +451,36 @@ gtk_alignment_size_allocate (GtkWidget *widget,
width = MAX (1, allocation->width - padding_horizontal - 2 * border_width); width = MAX (1, allocation->width - padding_horizontal - 2 * border_width);
height = MAX (1, allocation->height - padding_vertical - 2 * border_width); height = MAX (1, allocation->height - padding_vertical - 2 * border_width);
if (child_requisition.width > width) if (gtk_extended_layout_is_height_for_width (layout))
gtk_extended_layout_get_height_for_width (layout, width, NULL, {
&child_requisition.height); gtk_extended_layout_get_desired_width (layout, NULL, &child_nat_width);
else if (child_requisition.height > height)
gtk_extended_layout_get_width_for_height (layout, height, NULL,
&child_requisition.width);
if (width > child_requisition.width) child_width = MIN (width, child_nat_width);
child_allocation.width = (child_requisition.width *
gtk_extended_layout_get_height_for_width (layout, child_width, NULL, &child_nat_height);
child_height = MIN (height, child_nat_height);
}
else
{
gtk_extended_layout_get_desired_height (layout, NULL, &child_nat_height);
child_height = MIN (height, child_nat_height);
gtk_extended_layout_get_width_for_height (layout, child_height, NULL, &child_nat_width);
child_width = MIN (width, child_nat_width);
}
if (width > child_width)
child_allocation.width = (child_width *
(1.0 - alignment->xscale) + (1.0 - alignment->xscale) +
width * alignment->xscale); width * alignment->xscale);
else else
child_allocation.width = width; child_allocation.width = width;
if (height > child_requisition.height) if (height > child_height)
child_allocation.height = (child_requisition.height * child_allocation.height = (child_height *
(1.0 - alignment->yscale) + (1.0 - alignment->yscale) +
height * alignment->yscale); height * alignment->yscale);
else else