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:
		@ -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
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user