[gtk+/wip/baedert/children: 24/44] Move gtk_container_propagate_draw to GtkWidget
- From: Timm Bäder <baedert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/wip/baedert/children: 24/44] Move gtk_container_propagate_draw to GtkWidget
- Date: Sun, 4 Dec 2016 11:01:14 +0000 (UTC)
commit c948c23bb904e63f0f1b08810d663bae9edebd44
Author: Timm Bäder <mail baedert org>
Date: Tue Nov 22 19:58:55 2016 +0100
Move gtk_container_propagate_draw to GtkWidget
gtk/gtkboxgadget.c | 2 +-
gtk/gtkcontainer.c | 101 +---------------------------------------------------
gtk/gtkcontainer.h | 5 ---
gtk/gtknotebook.c | 14 ++++----
gtk/gtkpaned.c | 4 +-
gtk/gtkstack.c | 24 ++++++------
gtk/gtktextview.c | 6 ++--
gtk/gtktoolbar.c | 8 ++--
gtk/gtktreeview.c | 10 +++---
gtk/gtkwidget.c | 38 +++++++++++++++++++
gtk/gtkwidget.h | 5 +++
11 files changed, 78 insertions(+), 139 deletions(-)
---
diff --git a/gtk/gtkboxgadget.c b/gtk/gtkboxgadget.c
index cfc67c3..4536b8f 100644
--- a/gtk/gtkboxgadget.c
+++ b/gtk/gtkboxgadget.c
@@ -508,7 +508,7 @@ gtk_box_gadget_draw (GtkCssGadget *gadget,
GtkBoxGadgetChild *child = &g_array_index (priv->children, GtkBoxGadgetChild, draw_index);
if (GTK_IS_WIDGET (child->object))
- gtk_container_propagate_draw (GTK_CONTAINER (owner), GTK_WIDGET (child->object), cr);
+ gtk_widget_propagate_draw (owner, GTK_WIDGET (child->object), cr);
else
gtk_css_gadget_draw (GTK_CSS_GADGET (child->object), cr);
}
diff --git a/gtk/gtkcontainer.c b/gtk/gtkcontainer.c
index 6efc2a9..4f074c8 100644
--- a/gtk/gtkcontainer.c
+++ b/gtk/gtkcontainer.c
@@ -3055,7 +3055,7 @@ gtk_container_draw (GtkWidget *widget,
for (i = 0; i < child_infos->len; i++)
{
child_info = &g_array_index (child_infos, ChildOrderInfo, i);
- gtk_container_propagate_draw (container, child_info->child, cr);
+ gtk_widget_propagate_draw (widget, child_info->child, cr);
}
g_array_free (child_infos, TRUE);
@@ -3133,105 +3133,6 @@ gtk_container_get_children_clip (GtkContainer *container,
gtk_container_forall (container, union_with_clip, out_clip);
}
-static void
-gtk_container_get_translation_to_child (GtkContainer *container,
- GtkWidget *child,
- int *x_out,
- int *y_out)
-{
- GtkAllocation allocation;
- GdkWindow *window, *w;
- int x, y;
-
- /* translate coordinates. Ugly business, that. */
- if (!_gtk_widget_get_has_window (GTK_WIDGET (container)))
- {
- _gtk_widget_get_allocation (GTK_WIDGET (container), &allocation);
- x = -allocation.x;
- y = -allocation.y;
- }
- else
- {
- x = 0;
- y = 0;
- }
-
- window = _gtk_widget_get_window (GTK_WIDGET (container));
-
- for (w = _gtk_widget_get_window (child); w && w != window; w = gdk_window_get_parent (w))
- {
- int wx, wy;
- gdk_window_get_position (w, &wx, &wy);
- x += wx;
- y += wy;
- }
-
- if (w == NULL)
- {
- x = 0;
- y = 0;
- }
-
- if (!_gtk_widget_get_has_window (child))
- {
- _gtk_widget_get_allocation (child, &allocation);
- x += allocation.x;
- y += allocation.y;
- }
-
- *x_out = x;
- *y_out = y;
-}
-
-/**
- * gtk_container_propagate_draw:
- * @container: a #GtkContainer
- * @child: a child of @container
- * @cr: Cairo context as passed to the container. If you want to use @cr
- * in container’s draw function, consider using cairo_save() and
- * cairo_restore() before calling this function.
- *
- * When a container receives a call to the draw function, it must send
- * synthetic #GtkWidget::draw calls to all children that don’t have their
- * own #GdkWindows. This function provides a convenient way of doing this.
- * A container, when it receives a call to its #GtkWidget::draw function,
- * calls gtk_container_propagate_draw() once for each child, passing in
- * the @cr the container received.
- *
- * gtk_container_propagate_draw() takes care of translating the origin of @cr,
- * and deciding whether the draw needs to be sent to the child. It is a
- * convenient and optimized way of getting the same effect as calling
- * gtk_widget_draw() on the child directly.
- *
- * In most cases, a container can simply either inherit the
- * #GtkWidget::draw implementation from #GtkContainer, or do some drawing
- * and then chain to the ::draw implementation from #GtkContainer.
- **/
-void
-gtk_container_propagate_draw (GtkContainer *container,
- GtkWidget *child,
- cairo_t *cr)
-{
- int x, y;
-
- g_return_if_fail (GTK_IS_CONTAINER (container));
- g_return_if_fail (GTK_IS_WIDGET (child));
- g_return_if_fail (cr != NULL);
- g_return_if_fail (_gtk_widget_get_parent (child) == GTK_WIDGET (container));
-
- if (!gtk_container_should_propagate_draw (container, child, cr))
- return;
-
- gtk_container_get_translation_to_child (container, child, &x, &y);
-
- cairo_save (cr);
- cairo_translate (cr, x, y);
-
- gtk_widget_draw_internal (child, cr, TRUE);
-
- cairo_restore (cr);
-}
-
/**
* gtk_container_get_path_for_child:
* @container: a #GtkContainer
diff --git a/gtk/gtkcontainer.h b/gtk/gtkcontainer.h
index 6725a80..42ad410 100644
--- a/gtk/gtkcontainer.h
+++ b/gtk/gtkcontainer.h
@@ -139,11 +139,6 @@ GDK_AVAILABLE_IN_ALL
GList* gtk_container_get_children (GtkContainer *container);
GDK_AVAILABLE_IN_ALL
-void gtk_container_propagate_draw (GtkContainer *container,
- GtkWidget *child,
- cairo_t *cr);
-
-GDK_AVAILABLE_IN_ALL
void gtk_container_set_focus_chain (GtkContainer *container,
GList *focusable_widgets);
GDK_AVAILABLE_IN_ALL
diff --git a/gtk/gtknotebook.c b/gtk/gtknotebook.c
index 8909d18..a0a6183 100644
--- a/gtk/gtknotebook.c
+++ b/gtk/gtknotebook.c
@@ -2371,9 +2371,9 @@ gtk_notebook_draw_stack (GtkCssGadget *gadget,
GtkNotebookPrivate *priv = notebook->priv;
if (gtk_notebook_has_current_page (notebook))
- gtk_container_propagate_draw (GTK_CONTAINER (notebook),
- priv->cur_page->child,
- cr);
+ gtk_widget_propagate_draw (widget,
+ priv->cur_page->child,
+ cr);
return FALSE;
}
@@ -3490,7 +3490,7 @@ on_drag_icon_draw (GtkWidget *widget,
requisition.height);
if (child)
- gtk_container_propagate_draw (GTK_CONTAINER (widget), child, cr);
+ gtk_widget_propagate_draw (widget, child, cr);
gtk_style_context_restore (context);
@@ -4592,9 +4592,9 @@ draw_tab (GtkCssGadget *gadget,
widget = gtk_css_gadget_get_owner (gadget);
- gtk_container_propagate_draw (GTK_CONTAINER (widget),
- page->tab_label,
- cr);
+ gtk_widget_propagate_draw (widget,
+ page->tab_label,
+ cr);
return gtk_widget_has_visible_focus (widget) &&
GTK_NOTEBOOK (widget)->priv->cur_page == page;
diff --git a/gtk/gtkpaned.c b/gtk/gtkpaned.c
index 1fadaf5..421a0fa 100644
--- a/gtk/gtkpaned.c
+++ b/gtk/gtkpaned.c
@@ -1679,7 +1679,7 @@ gtk_paned_render (GtkCssGadget *gadget,
gdk_window_get_width (priv->child1_window),
gdk_window_get_height (priv->child1_window));
cairo_clip (cr);
- gtk_container_propagate_draw (GTK_CONTAINER (widget), priv->child1, cr);
+ gtk_widget_propagate_draw (widget, priv->child1, cr);
cairo_restore (cr);
}
@@ -1693,7 +1693,7 @@ gtk_paned_render (GtkCssGadget *gadget,
gdk_window_get_width (priv->child2_window),
gdk_window_get_height (priv->child2_window));
cairo_clip (cr);
- gtk_container_propagate_draw (GTK_CONTAINER (widget), priv->child2, cr);
+ gtk_widget_propagate_draw (widget, priv->child2, cr);
cairo_restore (cr);
}
diff --git a/gtk/gtkstack.c b/gtk/gtkstack.c
index 610b2f6..b3a9fc4 100644
--- a/gtk/gtkstack.c
+++ b/gtk/gtkstack.c
@@ -1933,9 +1933,9 @@ gtk_stack_draw_crossfade (GtkWidget *widget,
gdouble progress = gtk_progress_tracker_get_progress (&priv->tracker, FALSE);
cairo_push_group (cr);
- gtk_container_propagate_draw (GTK_CONTAINER (stack),
- priv->visible_child->widget,
- cr);
+ gtk_widget_propagate_draw (widget,
+ priv->visible_child->widget,
+ cr);
cairo_save (cr);
/* Multiply alpha by progress */
@@ -2004,9 +2004,9 @@ gtk_stack_draw_under (GtkWidget *widget,
cairo_rectangle (cr, x, y, width, height);
cairo_clip (cr);
- gtk_container_propagate_draw (GTK_CONTAINER (stack),
- priv->visible_child->widget,
- cr);
+ gtk_widget_propagate_draw (widget,
+ priv->visible_child->widget,
+ cr);
cairo_restore (cr);
@@ -2077,9 +2077,9 @@ gtk_stack_draw_slide (GtkWidget *widget,
cairo_restore (cr);
}
- gtk_container_propagate_draw (GTK_CONTAINER (stack),
- priv->visible_child->widget,
- cr);
+ gtk_widget_propagate_draw (widget,
+ priv->visible_child->widget,
+ cr);
}
static gboolean
@@ -2171,9 +2171,9 @@ gtk_stack_render (GtkCssGadget *gadget,
}
else
- gtk_container_propagate_draw (GTK_CONTAINER (stack),
- priv->visible_child->widget,
- cr);
+ gtk_widget_propagate_draw (widget,
+ priv->visible_child->widget,
+ cr);
}
return FALSE;
diff --git a/gtk/gtktextview.c b/gtk/gtktextview.c
index 7f4f79a..c76eaf9 100644
--- a/gtk/gtktextview.c
+++ b/gtk/gtktextview.c
@@ -5945,9 +5945,9 @@ gtk_text_view_draw (GtkWidget *widget,
/* propagate_draw checks that event->window matches
* child->window
*/
- gtk_container_propagate_draw (GTK_CONTAINER (widget),
- vc->widget,
- cr);
+ gtk_widget_propagate_draw (widget,
+ vc->widget,
+ cr);
tmp_list = tmp_list->next;
}
diff --git a/gtk/gtktoolbar.c b/gtk/gtktoolbar.c
index 03d887e..439e216 100644
--- a/gtk/gtktoolbar.c
+++ b/gtk/gtktoolbar.c
@@ -827,9 +827,9 @@ gtk_toolbar_render (GtkCssGadget *gadget,
toolbar_content_draw (content, GTK_CONTAINER (widget), cr);
}
- gtk_container_propagate_draw (GTK_CONTAINER (widget),
- priv->arrow_button,
- cr);
+ gtk_widget_propagate_draw (widget,
+ priv->arrow_button,
+ cr);
return FALSE;
}
@@ -3137,7 +3137,7 @@ toolbar_content_draw (ToolbarContent *content,
widget = GTK_WIDGET (content->item);
if (widget)
- gtk_container_propagate_draw (container, widget, cr);
+ gtk_widget_propagate_draw (GTK_WIDGET (container), widget, cr);
}
static gboolean
diff --git a/gtk/gtktreeview.c b/gtk/gtktreeview.c
index d1c4847..18ca77d 100644
--- a/gtk/gtktreeview.c
+++ b/gtk/gtktreeview.c
@@ -5388,7 +5388,7 @@ gtk_tree_view_draw (GtkWidget *widget,
{
GtkTreeViewChild *child = list->data;
- gtk_container_propagate_draw (GTK_CONTAINER (tree_view), child->widget, cr);
+ gtk_widget_propagate_draw (widget, child->widget, cr);
}
if (tree_view->priv->drag_highlight_window)
@@ -5430,16 +5430,16 @@ gtk_tree_view_draw (GtkWidget *widget,
if (gtk_tree_view_column_get_visible (column))
{
button = gtk_tree_view_column_get_button (column);
- gtk_container_propagate_draw (GTK_CONTAINER (tree_view),
- button, cr);
+ gtk_widget_propagate_draw (widget,
+ button, cr);
}
}
if (tree_view->priv->drag_window)
{
button = gtk_tree_view_column_get_button (tree_view->priv->drag_column);
- gtk_container_propagate_draw (GTK_CONTAINER (tree_view),
- button, cr);
+ gtk_widget_propagate_draw (widget,
+ button, cr);
}
gtk_style_context_restore (context);
diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c
index 0e054b6..dfab843 100644
--- a/gtk/gtkwidget.c
+++ b/gtk/gtkwidget.c
@@ -15905,3 +15905,41 @@ gtk_widget_snapshot_child (GtkWidget *widget,
gtk_widget_snapshot (child, snapshot);
gtk_snapshot_translate_2d (snapshot, -x, -y);
}
+
+static gboolean
+gtk_widget_should_propagate_draw (GtkWidget *widget,
+ GtkWidget *child,
+ cairo_t *cr)
+{
+ GdkWindow *child_in_window;
+
+ if (!_gtk_widget_is_drawable (child))
+ return FALSE;
+
+ return TRUE;
+}
+
+void
+gtk_widget_propagate_draw (GtkWidget *widget,
+ GtkWidget *child,
+ cairo_t *cr)
+{
+ int x, y;
+
+ g_return_if_fail (GTK_IS_WIDGET (widget));
+ g_return_if_fail (GTK_IS_WIDGET (child));
+ g_return_if_fail (cr != NULL);
+ g_return_if_fail (_gtk_widget_get_parent (child) == widget);
+
+ if (!gtk_widget_should_propagate_draw (widget, child, cr))
+ return;
+
+ gtk_widget_get_translation_to_child (widget, child, &x, &y);
+
+ cairo_save (cr);
+ cairo_translate (cr, x, y);
+
+ gtk_widget_draw_internal (child, cr, TRUE);
+
+ cairo_restore (cr);
+}
diff --git a/gtk/gtkwidget.h b/gtk/gtkwidget.h
index 865c144..3bf2acc 100644
--- a/gtk/gtkwidget.h
+++ b/gtk/gtkwidget.h
@@ -1311,6 +1311,11 @@ GtkWidget * gtk_widget_get_next_sibling (GtkWidget *widget);
GDK_AVAILABLE_IN_3_90
GtkWidget * gtk_widget_get_prev_sibling (GtkWidget *widget);
+GDK_AVAILABLE_IN_3_90
+void gtk_widget_propagate_draw (GtkWidget *widget,
+ GtkWidget *child,
+ cairo_t *cr);
+
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkWidget, g_object_unref)
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkRequisition, gtk_requisition_free)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]