summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2015-11-18 01:47:16 +0100
committerBenjamin Otte <otte@redhat.com>2015-12-15 01:16:24 +0100
commit7454d0c6699596e766bf9cd08f41ced02a188c42 (patch)
tree15ddfde143f8bada730370a661b992ba6ce1696a
parent0ada9a6c531d03b51a9f183e9ae722f94c58a9d6 (diff)
downloadgtk+-7454d0c6699596e766bf9cd08f41ced02a188c42.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.c24
-rw-r--r--gtk/gtkcontainerprivate.h2
-rw-r--r--gtk/gtkwidget.c29
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);