container: Split out a function

Computing the clip for all children is something I want to do in other
places.
This commit is contained in:
Benjamin Otte 2015-11-18 01:47:16 +01:00 committed by Matthias Clasen
parent 0f8233bd7b
commit 7a05016d93
3 changed files with 32 additions and 23 deletions

View File

@ -3751,6 +3751,30 @@ gtk_container_propagate_draw_internal (GtkContainer *container,
cairo_restore (cr);
}
static void
union_with_clip (GtkWidget *widget,
gpointer clip)
{
GtkAllocation widget_clip;
if (!gtk_widget_is_visible (widget) ||
!_gtk_widget_get_child_visible (widget))
return;
gtk_widget_get_clip (widget, &widget_clip);
gdk_rectangle_union (&widget_clip, clip, clip);
}
void
gtk_container_get_children_clip (GtkContainer *container,
GtkAllocation *out_clip)
{
memset (out_clip, 0, sizeof (GtkAllocation));
gtk_container_forall (container, union_with_clip, out_clip);
}
/**
* gtk_container_propagate_draw:
* @container: a #GtkContainer

View File

@ -42,6 +42,8 @@ void _gtk_container_maybe_start_idle_sizer (GtkContainer *container);
gboolean _gtk_container_get_border_width_set (GtkContainer *container);
void _gtk_container_set_border_width_set (GtkContainer *container,
gboolean border_width_set);
void gtk_container_get_children_clip (GtkContainer *container,
GtkAllocation *out_clip);
G_END_DECLS

View File

@ -15629,21 +15629,6 @@ gtk_widget_set_clip (GtkWidget *widget,
priv->clip = *clip;
}
static void
union_with_clip (GtkWidget *widget,
gpointer clip)
{
GtkAllocation widget_clip;
if (!gtk_widget_is_visible (widget) ||
!_gtk_widget_get_child_visible (widget))
return;
gtk_widget_get_clip (widget, &widget_clip);
gdk_rectangle_union (&widget_clip, clip, clip);
}
/*
* _gtk_widget_set_simple_clip:
* @widget: a #GtkWidget
@ -15690,19 +15675,17 @@ _gtk_widget_set_simple_clip (GtkWidget *widget,
if (GTK_IS_CONTAINER (widget))
{
if (_gtk_widget_get_has_window (widget))
{
clip.x -= allocation.x;
clip.y -= allocation.y;
}
GdkRectangle children_clip;
gtk_container_forall (GTK_CONTAINER (widget), union_with_clip, &clip);
gtk_container_get_children_clip (GTK_CONTAINER (widget), &children_clip);
if (_gtk_widget_get_has_window (widget))
{
clip.x += allocation.x;
clip.y += allocation.y;
children_clip.x += allocation.x;
children_clip.y += allocation.y;
}
gdk_rectangle_union (&children_clip, &clip, &clip);
}
gtk_widget_set_clip (widget, &clip);