summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTristan Van Berkom <tristan.van.berkom@gmail.com>2010-04-20 01:22:31 -0400
committerTristan Van Berkom <tristan.van.berkom@gmail.com>2010-04-20 01:22:31 -0400
commit3a9ab87489d7396acfec49ce611e85cf9003f9fe (patch)
treeb0fcc90fe8479c6cf1cdd876bdc541fd0c17ea18
parent0b92348077489047af98f360fd9bb3d59ee6d04a (diff)
downloadgtk+-3a9ab87489d7396acfec49ce611e85cf9003f9fe.tar.gz
GtkAlignment now tries to allocate natural size to the child if available and does the height-for-width calculation depending on allocation.
-rw-r--r--gtk/gtkalignment.c40
1 files changed, 27 insertions, 13 deletions
diff --git a/gtk/gtkalignment.c b/gtk/gtkalignment.c
index 7e879ca056..73905f813a 100644
--- a/gtk/gtkalignment.c
+++ b/gtk/gtkalignment.c
@@ -423,7 +423,6 @@ gtk_alignment_size_allocate (GtkWidget *widget,
GtkAlignment *alignment;
GtkBin *bin;
GtkAllocation child_allocation;
- GtkRequisition child_requisition;
gint width, height;
gint border_width;
gint padding_horizontal, padding_vertical;
@@ -439,8 +438,9 @@ gtk_alignment_size_allocate (GtkWidget *widget,
if (bin->child && gtk_widget_get_visible (bin->child))
{
GtkExtendedLayout *layout = GTK_EXTENDED_LAYOUT (bin->child);
-
- gtk_extended_layout_get_desired_size (layout, NULL, &child_requisition);
+ gint child_nat_width;
+ gint child_nat_height;
+ gint child_width, child_height;
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);
height = MAX (1, allocation->height - padding_vertical - 2 * border_width);
- if (child_requisition.width > width)
- gtk_extended_layout_get_height_for_width (layout, width, NULL,
- &child_requisition.height);
- else if (child_requisition.height > height)
- gtk_extended_layout_get_width_for_height (layout, height, NULL,
- &child_requisition.width);
+ if (gtk_extended_layout_is_height_for_width (layout))
+ {
+ gtk_extended_layout_get_desired_width (layout, NULL, &child_nat_width);
+
+ child_width = MIN (width, child_nat_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_requisition.width)
- child_allocation.width = (child_requisition.width *
+ if (width > child_width)
+ child_allocation.width = (child_width *
(1.0 - alignment->xscale) +
width * alignment->xscale);
else
child_allocation.width = width;
- if (height > child_requisition.height)
- child_allocation.height = (child_requisition.height *
+ if (height > child_height)
+ child_allocation.height = (child_height *
(1.0 - alignment->yscale) +
height * alignment->yscale);
else