forked from AuroraMiddleware/gtk
Make GtkScrolledWindow offload border-width calculations to GtkContainerClass.
This commit is contained in:
parent
f106d369a7
commit
0e0d938cc3
@ -285,6 +285,7 @@ gtk_scrolled_window_class_init (GtkScrolledWindowClass *class)
|
|||||||
container_class->add = gtk_scrolled_window_add;
|
container_class->add = gtk_scrolled_window_add;
|
||||||
container_class->remove = gtk_scrolled_window_remove;
|
container_class->remove = gtk_scrolled_window_remove;
|
||||||
container_class->forall = gtk_scrolled_window_forall;
|
container_class->forall = gtk_scrolled_window_forall;
|
||||||
|
gtk_container_class_handle_border_width (container_class);
|
||||||
|
|
||||||
class->scrollbar_spacing = -1;
|
class->scrollbar_spacing = -1;
|
||||||
|
|
||||||
@ -1162,15 +1163,10 @@ gtk_scrolled_window_draw (GtkWidget *widget,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
GtkContainer *container = GTK_CONTAINER (widget);
|
relative_allocation.x = 0;
|
||||||
guint border_width;
|
relative_allocation.y = 0;
|
||||||
|
relative_allocation.width = gtk_widget_get_allocated_width (widget);
|
||||||
border_width = gtk_container_get_border_width (container);
|
relative_allocation.height = gtk_widget_get_allocated_height (widget);
|
||||||
|
|
||||||
relative_allocation.x = border_width;
|
|
||||||
relative_allocation.y = border_width;
|
|
||||||
relative_allocation.width = gtk_widget_get_allocated_width (widget) - 2 * border_width;
|
|
||||||
relative_allocation.height = gtk_widget_get_allocated_height (widget) - 2 * border_width;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
gtk_paint_shadow (style,
|
gtk_paint_shadow (style,
|
||||||
@ -1353,8 +1349,9 @@ gtk_scrolled_window_relative_allocation (GtkWidget *widget,
|
|||||||
GtkScrolledWindow *scrolled_window;
|
GtkScrolledWindow *scrolled_window;
|
||||||
GtkScrolledWindowPrivate *priv;
|
GtkScrolledWindowPrivate *priv;
|
||||||
GtkStyle *style;
|
GtkStyle *style;
|
||||||
gint scrollbar_spacing;
|
gint sb_spacing;
|
||||||
guint border_width;
|
gint sb_width;
|
||||||
|
gint sb_height;
|
||||||
|
|
||||||
g_return_if_fail (widget != NULL);
|
g_return_if_fail (widget != NULL);
|
||||||
g_return_if_fail (allocation != NULL);
|
g_return_if_fail (allocation != NULL);
|
||||||
@ -1362,11 +1359,14 @@ gtk_scrolled_window_relative_allocation (GtkWidget *widget,
|
|||||||
scrolled_window = GTK_SCROLLED_WINDOW (widget);
|
scrolled_window = GTK_SCROLLED_WINDOW (widget);
|
||||||
priv = scrolled_window->priv;
|
priv = scrolled_window->priv;
|
||||||
|
|
||||||
scrollbar_spacing = _gtk_scrolled_window_get_scrollbar_spacing (scrolled_window);
|
/* Get possible scrollbar dimensions */
|
||||||
|
sb_spacing = _gtk_scrolled_window_get_scrollbar_spacing (scrolled_window);
|
||||||
|
gtk_widget_get_preferred_height (priv->hscrollbar, &sb_height, NULL);
|
||||||
|
gtk_widget_get_preferred_width (priv->vscrollbar, &sb_width, NULL);
|
||||||
|
|
||||||
border_width = gtk_container_get_border_width (GTK_CONTAINER (widget));
|
/* Subtract some things from our available allocation size */
|
||||||
allocation->x = border_width;
|
allocation->x = 0;
|
||||||
allocation->y = border_width;
|
allocation->y = 0;
|
||||||
|
|
||||||
if (priv->shadow_type != GTK_SHADOW_NONE)
|
if (priv->shadow_type != GTK_SHADOW_NONE)
|
||||||
{
|
{
|
||||||
@ -1381,11 +1381,8 @@ gtk_scrolled_window_relative_allocation (GtkWidget *widget,
|
|||||||
|
|
||||||
if (priv->vscrollbar_visible)
|
if (priv->vscrollbar_visible)
|
||||||
{
|
{
|
||||||
GtkRequisition vscrollbar_requisition;
|
|
||||||
gboolean is_rtl;
|
gboolean is_rtl;
|
||||||
|
|
||||||
gtk_widget_get_preferred_size (priv->vscrollbar,
|
|
||||||
&vscrollbar_requisition, NULL);
|
|
||||||
is_rtl = gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL;
|
is_rtl = gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL;
|
||||||
|
|
||||||
if ((!is_rtl &&
|
if ((!is_rtl &&
|
||||||
@ -1394,22 +1391,18 @@ gtk_scrolled_window_relative_allocation (GtkWidget *widget,
|
|||||||
(is_rtl &&
|
(is_rtl &&
|
||||||
(priv->real_window_placement == GTK_CORNER_TOP_LEFT ||
|
(priv->real_window_placement == GTK_CORNER_TOP_LEFT ||
|
||||||
priv->real_window_placement == GTK_CORNER_BOTTOM_LEFT)))
|
priv->real_window_placement == GTK_CORNER_BOTTOM_LEFT)))
|
||||||
allocation->x += (vscrollbar_requisition.width + scrollbar_spacing);
|
allocation->x += (sb_width + sb_spacing);
|
||||||
|
|
||||||
allocation->width = MAX (1, allocation->width - (vscrollbar_requisition.width + scrollbar_spacing));
|
allocation->width = MAX (1, allocation->width - (sb_width + sb_spacing));
|
||||||
}
|
}
|
||||||
if (priv->hscrollbar_visible)
|
if (priv->hscrollbar_visible)
|
||||||
{
|
{
|
||||||
GtkRequisition hscrollbar_requisition;
|
|
||||||
|
|
||||||
gtk_widget_get_preferred_size (priv->hscrollbar,
|
|
||||||
&hscrollbar_requisition, NULL);
|
|
||||||
|
|
||||||
if (priv->real_window_placement == GTK_CORNER_BOTTOM_LEFT ||
|
if (priv->real_window_placement == GTK_CORNER_BOTTOM_LEFT ||
|
||||||
priv->real_window_placement == GTK_CORNER_BOTTOM_RIGHT)
|
priv->real_window_placement == GTK_CORNER_BOTTOM_RIGHT)
|
||||||
allocation->y += (hscrollbar_requisition.height + scrollbar_spacing);
|
allocation->y += (sb_height + sb_spacing);
|
||||||
|
|
||||||
allocation->height = MAX (1, allocation->height - (hscrollbar_requisition.height + scrollbar_spacing));
|
allocation->height = MAX (1, allocation->height - (sb_height + sb_spacing));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1425,9 +1418,12 @@ gtk_scrolled_window_size_allocate (GtkWidget *widget,
|
|||||||
GtkAllocation child_allocation;
|
GtkAllocation child_allocation;
|
||||||
GtkWidget *child;
|
GtkWidget *child;
|
||||||
gboolean scrollbars_within_bevel;
|
gboolean scrollbars_within_bevel;
|
||||||
gint scrollbar_spacing;
|
gint sb_spacing;
|
||||||
guint border_width;
|
gint sb_width;
|
||||||
|
gint sb_height;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
g_return_if_fail (GTK_IS_SCROLLED_WINDOW (widget));
|
g_return_if_fail (GTK_IS_SCROLLED_WINDOW (widget));
|
||||||
g_return_if_fail (allocation != NULL);
|
g_return_if_fail (allocation != NULL);
|
||||||
|
|
||||||
@ -1435,13 +1431,14 @@ gtk_scrolled_window_size_allocate (GtkWidget *widget,
|
|||||||
bin = GTK_BIN (scrolled_window);
|
bin = GTK_BIN (scrolled_window);
|
||||||
priv = scrolled_window->priv;
|
priv = scrolled_window->priv;
|
||||||
|
|
||||||
scrollbar_spacing = _gtk_scrolled_window_get_scrollbar_spacing (scrolled_window);
|
/* Get possible scrollbar dimensions */
|
||||||
|
sb_spacing = _gtk_scrolled_window_get_scrollbar_spacing (scrolled_window);
|
||||||
|
gtk_widget_get_preferred_height (priv->hscrollbar, &sb_height, NULL);
|
||||||
|
gtk_widget_get_preferred_width (priv->vscrollbar, &sb_width, NULL);
|
||||||
|
|
||||||
style = gtk_widget_get_style (widget);
|
style = gtk_widget_get_style (widget);
|
||||||
gtk_widget_style_get (widget, "scrollbars-within-bevel", &scrollbars_within_bevel, NULL);
|
gtk_widget_style_get (widget, "scrollbars-within-bevel", &scrollbars_within_bevel, NULL);
|
||||||
|
|
||||||
border_width = gtk_container_get_border_width (GTK_CONTAINER (scrolled_window));
|
|
||||||
|
|
||||||
gtk_widget_set_allocation (widget, allocation);
|
gtk_widget_set_allocation (widget, allocation);
|
||||||
|
|
||||||
if (priv->hscrollbar_policy == GTK_POLICY_ALWAYS)
|
if (priv->hscrollbar_policy == GTK_POLICY_ALWAYS)
|
||||||
@ -1456,10 +1453,10 @@ gtk_scrolled_window_size_allocate (GtkWidget *widget,
|
|||||||
child = gtk_bin_get_child (bin);
|
child = gtk_bin_get_child (bin);
|
||||||
if (child && gtk_widget_get_visible (child))
|
if (child && gtk_widget_get_visible (child))
|
||||||
{
|
{
|
||||||
gboolean previous_hvis;
|
|
||||||
gboolean previous_vvis;
|
gboolean previous_vvis;
|
||||||
|
gboolean previous_hvis;
|
||||||
guint count = 0;
|
guint count = 0;
|
||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
gtk_scrolled_window_relative_allocation (widget, &relative_allocation);
|
gtk_scrolled_window_relative_allocation (widget, &relative_allocation);
|
||||||
@ -1504,11 +1501,6 @@ gtk_scrolled_window_size_allocate (GtkWidget *widget,
|
|||||||
|
|
||||||
if (priv->hscrollbar_visible)
|
if (priv->hscrollbar_visible)
|
||||||
{
|
{
|
||||||
GtkRequisition hscrollbar_requisition;
|
|
||||||
|
|
||||||
gtk_widget_get_preferred_size (priv->hscrollbar,
|
|
||||||
&hscrollbar_requisition, NULL);
|
|
||||||
|
|
||||||
if (!gtk_widget_get_visible (priv->hscrollbar))
|
if (!gtk_widget_get_visible (priv->hscrollbar))
|
||||||
gtk_widget_show (priv->hscrollbar);
|
gtk_widget_show (priv->hscrollbar);
|
||||||
|
|
||||||
@ -1517,14 +1509,14 @@ gtk_scrolled_window_size_allocate (GtkWidget *widget,
|
|||||||
priv->real_window_placement == GTK_CORNER_TOP_RIGHT)
|
priv->real_window_placement == GTK_CORNER_TOP_RIGHT)
|
||||||
child_allocation.y = (relative_allocation.y +
|
child_allocation.y = (relative_allocation.y +
|
||||||
relative_allocation.height +
|
relative_allocation.height +
|
||||||
scrollbar_spacing +
|
sb_spacing +
|
||||||
(priv->shadow_type == GTK_SHADOW_NONE ?
|
(priv->shadow_type == GTK_SHADOW_NONE ?
|
||||||
0 : style->ythickness));
|
0 : style->ythickness));
|
||||||
else
|
else
|
||||||
child_allocation.y = border_width;
|
child_allocation.y = 0;
|
||||||
|
|
||||||
child_allocation.width = relative_allocation.width;
|
child_allocation.width = relative_allocation.width;
|
||||||
child_allocation.height = hscrollbar_requisition.height;
|
child_allocation.height = sb_height;
|
||||||
child_allocation.x += allocation->x;
|
child_allocation.x += allocation->x;
|
||||||
child_allocation.y += allocation->y;
|
child_allocation.y += allocation->y;
|
||||||
|
|
||||||
@ -1553,13 +1545,9 @@ gtk_scrolled_window_size_allocate (GtkWidget *widget,
|
|||||||
|
|
||||||
if (priv->vscrollbar_visible)
|
if (priv->vscrollbar_visible)
|
||||||
{
|
{
|
||||||
GtkRequisition vscrollbar_requisition;
|
|
||||||
if (!gtk_widget_get_visible (priv->vscrollbar))
|
if (!gtk_widget_get_visible (priv->vscrollbar))
|
||||||
gtk_widget_show (priv->vscrollbar);
|
gtk_widget_show (priv->vscrollbar);
|
||||||
|
|
||||||
gtk_widget_get_preferred_size (priv->vscrollbar,
|
|
||||||
&vscrollbar_requisition, NULL);
|
|
||||||
|
|
||||||
if ((gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL &&
|
if ((gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL &&
|
||||||
(priv->real_window_placement == GTK_CORNER_TOP_RIGHT ||
|
(priv->real_window_placement == GTK_CORNER_TOP_RIGHT ||
|
||||||
priv->real_window_placement == GTK_CORNER_BOTTOM_RIGHT)) ||
|
priv->real_window_placement == GTK_CORNER_BOTTOM_RIGHT)) ||
|
||||||
@ -1568,14 +1556,14 @@ gtk_scrolled_window_size_allocate (GtkWidget *widget,
|
|||||||
priv->real_window_placement == GTK_CORNER_BOTTOM_LEFT)))
|
priv->real_window_placement == GTK_CORNER_BOTTOM_LEFT)))
|
||||||
child_allocation.x = (relative_allocation.x +
|
child_allocation.x = (relative_allocation.x +
|
||||||
relative_allocation.width +
|
relative_allocation.width +
|
||||||
scrollbar_spacing +
|
sb_spacing +
|
||||||
(priv->shadow_type == GTK_SHADOW_NONE ?
|
(priv->shadow_type == GTK_SHADOW_NONE ?
|
||||||
0 : style->xthickness));
|
0 : style->xthickness));
|
||||||
else
|
else
|
||||||
child_allocation.x = border_width;
|
child_allocation.x = 0;
|
||||||
|
|
||||||
child_allocation.y = relative_allocation.y;
|
child_allocation.y = relative_allocation.y;
|
||||||
child_allocation.width = vscrollbar_requisition.width;
|
child_allocation.width = sb_width;
|
||||||
child_allocation.height = relative_allocation.height;
|
child_allocation.height = relative_allocation.height;
|
||||||
child_allocation.x += allocation->x;
|
child_allocation.x += allocation->x;
|
||||||
child_allocation.y += allocation->y;
|
child_allocation.y += allocation->y;
|
||||||
@ -1869,7 +1857,6 @@ gtk_scrolled_window_get_preferred_size (GtkWidget *widget,
|
|||||||
GtkStyle *style;
|
GtkStyle *style;
|
||||||
GtkWidget *child;
|
GtkWidget *child;
|
||||||
gint min_child_size, nat_child_size;
|
gint min_child_size, nat_child_size;
|
||||||
guint border_width;
|
|
||||||
|
|
||||||
scrollbar_spacing = _gtk_scrolled_window_get_scrollbar_spacing (scrolled_window);
|
scrollbar_spacing = _gtk_scrolled_window_get_scrollbar_spacing (scrolled_window);
|
||||||
|
|
||||||
@ -1964,11 +1951,10 @@ gtk_scrolled_window_get_preferred_size (GtkWidget *widget,
|
|||||||
extra_width = scrollbar_spacing + vscrollbar_requisition.width;
|
extra_width = scrollbar_spacing + vscrollbar_requisition.width;
|
||||||
}
|
}
|
||||||
|
|
||||||
border_width = gtk_container_get_border_width (GTK_CONTAINER (widget));
|
minimum_req.width += MAX (0, extra_width);
|
||||||
minimum_req.width += border_width * 2 + MAX (0, extra_width);
|
minimum_req.height += MAX (0, extra_height);
|
||||||
minimum_req.height += border_width * 2 + MAX (0, extra_height);
|
natural_req.width += MAX (0, extra_width);
|
||||||
natural_req.width += border_width * 2 + MAX (0, extra_width);
|
natural_req.height += MAX (0, extra_height);
|
||||||
natural_req.height += border_width * 2 + MAX (0, extra_height);
|
|
||||||
|
|
||||||
if (priv->shadow_type != GTK_SHADOW_NONE)
|
if (priv->shadow_type != GTK_SHADOW_NONE)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user