diff options
author | Benjamin Otte <otte@redhat.com> | 2015-11-18 01:47:16 +0100 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2015-12-15 08:41:16 -0500 |
commit | 7a05016d938ada16b25b6a7b8683e98f107a5a6f (patch) | |
tree | 704984d42d01604e701648a2ad1e24adbf7d8013 | |
parent | 0f8233bd7b3a3a99135c536deaa2e5ec873f9e16 (diff) | |
download | gtk+-7a05016d938ada16b25b6a7b8683e98f107a5a6f.tar.gz |
container: Split out a function
Computing the clip for all children is something I want to do in other
places.
-rw-r--r-- | gtk/gtkcontainer.c | 24 | ||||
-rw-r--r-- | gtk/gtkcontainerprivate.h | 2 | ||||
-rw-r--r-- | gtk/gtkwidget.c | 29 |
3 files changed, 32 insertions, 23 deletions
diff --git a/gtk/gtkcontainer.c b/gtk/gtkcontainer.c index 3122bd629f..cb984318c2 100644 --- a/gtk/gtkcontainer.c +++ b/gtk/gtkcontainer.c @@ -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 diff --git a/gtk/gtkcontainerprivate.h b/gtk/gtkcontainerprivate.h index 78ee99c005..1961444f7c 100644 --- a/gtk/gtkcontainerprivate.h +++ b/gtk/gtkcontainerprivate.h @@ -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 diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c index e8b30f0773..0bf08a07ee 100644 --- a/gtk/gtkwidget.c +++ b/gtk/gtkwidget.c @@ -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); |