summaryrefslogtreecommitdiff
path: root/gtk/gtkscrolledwindow.c
diff options
context:
space:
mode:
authorTristan Van Berkom <tristan.van.berkom@gmail.com>2010-04-20 01:26:58 -0400
committerTristan Van Berkom <tristan.van.berkom@gmail.com>2010-04-20 01:26:58 -0400
commitc927f5e60d0710f705392d51eaf073de3e9df4d8 (patch)
tree8051508d4cbaab574c1f6261ec9b4ffd5209c42d /gtk/gtkscrolledwindow.c
parent0330658a7f9f2b721a40b647f449612d7fb83125 (diff)
downloadgtk+-c927f5e60d0710f705392d51eaf073de3e9df4d8.tar.gz
Split up width and height queries so that they make more sense (extended-layout)
Diffstat (limited to 'gtk/gtkscrolledwindow.c')
-rw-r--r--gtk/gtkscrolledwindow.c161
1 files changed, 85 insertions, 76 deletions
diff --git a/gtk/gtkscrolledwindow.c b/gtk/gtkscrolledwindow.c
index da7a968c1f..936335f424 100644
--- a/gtk/gtkscrolledwindow.c
+++ b/gtk/gtkscrolledwindow.c
@@ -1732,8 +1732,9 @@ gtk_scrolled_window_extended_layout_init (GtkExtendedLayoutIface *iface)
static void
gtk_scrolled_window_get_desired_size (GtkExtendedLayout *layout,
- GtkRequisition *minimum_size,
- GtkRequisition *natural_size)
+ GtkOrientation orientation,
+ gint *minimum_size,
+ gint *natural_size)
{
GtkScrolledWindow *scrolled_window;
GtkBin *bin;
@@ -1742,8 +1743,8 @@ gtk_scrolled_window_get_desired_size (GtkExtendedLayout *layout,
gint scrollbar_spacing;
GtkRequisition hscrollbar_requisition;
GtkRequisition vscrollbar_requisition;
- GtkRequisition min_child_requisition;
- GtkRequisition nat_child_requisition;
+ GtkRequisition minimum_req, natural_req;
+ gint min_child_size, nat_child_size;
scrolled_window = GTK_SCROLLED_WINDOW (layout);
bin = GTK_BIN (scrolled_window);
@@ -1752,10 +1753,10 @@ gtk_scrolled_window_get_desired_size (GtkExtendedLayout *layout,
extra_width = 0;
extra_height = 0;
- minimum_size->width = 0;
- minimum_size->height = 0;
- natural_size->width = 0;
- natural_size->height = 0;
+ minimum_req.width = 0;
+ minimum_req.height = 0;
+ natural_req.width = 0;
+ natural_req.height = 0;
gtk_widget_size_request (scrolled_window->hscrollbar,
&hscrollbar_requisition);
@@ -1764,60 +1765,69 @@ gtk_scrolled_window_get_desired_size (GtkExtendedLayout *layout,
if (bin->child && gtk_widget_get_visible (bin->child))
{
- gtk_extended_layout_get_desired_size (GTK_EXTENDED_LAYOUT (bin->child),
- &min_child_requisition,
- &nat_child_requisition);
-
- if (scrolled_window->hscrollbar_policy == GTK_POLICY_NEVER)
- {
- minimum_size->width += min_child_requisition.width;
- natural_size->width += nat_child_requisition.width;
- }
- else
+ if (orientation == GTK_ORIENTATION_HORIZONTAL)
{
- GtkWidgetAuxInfo *aux_info = _gtk_widget_get_aux_info (bin->child, FALSE);
-
- if (aux_info && aux_info->width > 0)
+ gtk_extended_layout_get_desired_width (GTK_EXTENDED_LAYOUT (bin->child),
+ &min_child_size,
+ &nat_child_size);
+
+ if (scrolled_window->hscrollbar_policy == GTK_POLICY_NEVER)
{
- minimum_size->width += aux_info->width;
- natural_size->width += aux_info->width;
- extra_width = -1;
+ minimum_req.width += min_child_size;
+ natural_req.width += nat_child_size;
}
else
- {
- minimum_size->width += vscrollbar_requisition.width;
- natural_size->width += vscrollbar_requisition.width;
- }
+ {
+ GtkWidgetAuxInfo *aux_info = _gtk_widget_get_aux_info (bin->child, FALSE);
+
+ if (aux_info && aux_info->width > 0)
+ {
+ minimum_req.width += aux_info->width;
+ natural_req.width += aux_info->width;
+ extra_width = -1;
+ }
+ else
+ {
+ minimum_req.width += vscrollbar_requisition.width;
+ natural_req.width += vscrollbar_requisition.width;
+ }
+ }
}
-
- if (scrolled_window->vscrollbar_policy == GTK_POLICY_NEVER)
- {
- minimum_size->height += min_child_requisition.height;
- natural_size->height += nat_child_requisition.height;
- }
- else
+ else /* GTK_ORIENTATION_VERTICAL */
{
- GtkWidgetAuxInfo *aux_info = _gtk_widget_get_aux_info (bin->child, FALSE);
-
- if (aux_info && aux_info->height > 0)
+ gtk_extended_layout_get_desired_height (GTK_EXTENDED_LAYOUT (bin->child),
+ &min_child_size,
+ &nat_child_size);
+
+ if (scrolled_window->vscrollbar_policy == GTK_POLICY_NEVER)
{
- minimum_size->height += aux_info->height;
- natural_size->height += aux_info->height;
- extra_height = -1;
+ minimum_req.height += min_child_size;
+ natural_req.height += nat_child_size;
}
else
- {
- minimum_size->height += hscrollbar_requisition.height;
- natural_size->height += hscrollbar_requisition.height;
- }
+ {
+ GtkWidgetAuxInfo *aux_info = _gtk_widget_get_aux_info (bin->child, FALSE);
+
+ if (aux_info && aux_info->height > 0)
+ {
+ minimum_req.height += aux_info->height;
+ natural_req.height += aux_info->height;
+ extra_height = -1;
+ }
+ else
+ {
+ minimum_req.height += hscrollbar_requisition.height;
+ natural_req.height += hscrollbar_requisition.height;
+ }
+ }
}
}
if (scrolled_window->hscrollbar_policy == GTK_POLICY_AUTOMATIC ||
scrolled_window->hscrollbar_policy == GTK_POLICY_ALWAYS)
{
- minimum_size->width = MAX (minimum_size->width, hscrollbar_requisition.width);
- natural_size->width = MAX (natural_size->width, hscrollbar_requisition.width);
+ minimum_req.width = MAX (minimum_req.width, hscrollbar_requisition.width);
+ natural_req.width = MAX (natural_req.width, hscrollbar_requisition.width);
if (!extra_height || scrolled_window->hscrollbar_policy == GTK_POLICY_ALWAYS)
extra_height = scrollbar_spacing + hscrollbar_requisition.height;
}
@@ -1825,23 +1835,38 @@ gtk_scrolled_window_get_desired_size (GtkExtendedLayout *layout,
if (scrolled_window->vscrollbar_policy == GTK_POLICY_AUTOMATIC ||
scrolled_window->vscrollbar_policy == GTK_POLICY_ALWAYS)
{
- minimum_size->height = MAX (minimum_size->height, vscrollbar_requisition.height);
- natural_size->height = MAX (natural_size->height, vscrollbar_requisition.height);
+ minimum_req.height = MAX (minimum_req.height, vscrollbar_requisition.height);
+ natural_req.height = MAX (natural_req.height, vscrollbar_requisition.height);
if (!extra_height || scrolled_window->vscrollbar_policy == GTK_POLICY_ALWAYS)
extra_width = scrollbar_spacing + vscrollbar_requisition.width;
}
- minimum_size->width += GTK_CONTAINER (layout)->border_width * 2 + MAX (0, extra_width);
- minimum_size->height += GTK_CONTAINER (layout)->border_width * 2 + MAX (0, extra_height);
- natural_size->width += GTK_CONTAINER (layout)->border_width * 2 + MAX (0, extra_width);
- natural_size->height += GTK_CONTAINER (layout)->border_width * 2 + MAX (0, extra_height);
+ minimum_req.width += GTK_CONTAINER (layout)->border_width * 2 + MAX (0, extra_width);
+ minimum_req.height += GTK_CONTAINER (layout)->border_width * 2 + MAX (0, extra_height);
+ natural_req.width += GTK_CONTAINER (layout)->border_width * 2 + MAX (0, extra_width);
+ natural_req.height += GTK_CONTAINER (layout)->border_width * 2 + MAX (0, extra_height);
if (scrolled_window->shadow_type != GTK_SHADOW_NONE)
{
- minimum_size->width += 2 * GTK_WIDGET (layout)->style->xthickness;
- minimum_size->height += 2 * GTK_WIDGET (layout)->style->ythickness;
- natural_size->width += 2 * GTK_WIDGET (layout)->style->xthickness;
- natural_size->height += 2 * GTK_WIDGET (layout)->style->ythickness;
+ minimum_req.width += 2 * GTK_WIDGET (layout)->style->xthickness;
+ minimum_req.height += 2 * GTK_WIDGET (layout)->style->ythickness;
+ natural_req.width += 2 * GTK_WIDGET (layout)->style->xthickness;
+ natural_req.height += 2 * GTK_WIDGET (layout)->style->ythickness;
+ }
+
+ if (orientation == GTK_ORIENTATION_HORIZONTAL)
+ {
+ if (minimum_size)
+ *minimum_size = minimum_req.width;
+ if (natural_size)
+ *natural_size = natural_req.width;
+ }
+ else
+ {
+ if (minimum_size)
+ *minimum_size = minimum_req.height;
+ if (natural_size)
+ *natural_size = natural_req.height;
}
}
@@ -1850,31 +1875,15 @@ gtk_scrolled_window_get_desired_width (GtkExtendedLayout *layout,
gint *minimum_size,
gint *natural_size)
{
- GtkRequisition minimum, natural;
-
- gtk_scrolled_window_get_desired_size (layout, &minimum, &natural);
-
- if (minimum_size)
- *minimum_size = minimum.width;
-
- if (natural_size)
- *natural_size = natural.width;
+ gtk_scrolled_window_get_desired_size (layout, GTK_ORIENTATION_HORIZONTAL, minimum_size, natural_size);
}
static void
gtk_scrolled_window_get_desired_height (GtkExtendedLayout *layout,
gint *minimum_size,
gint *natural_size)
-{
- GtkRequisition minimum, natural;
-
- gtk_scrolled_window_get_desired_size (layout, &minimum, &natural);
-
- if (minimum_size)
- *minimum_size = minimum.height;
-
- if (natural_size)
- *natural_size = natural.height;
+{
+ gtk_scrolled_window_get_desired_size (layout, GTK_ORIENTATION_VERTICAL, minimum_size, natural_size);
}
static void