[gtk+/wip/ebassi/gsk-renderer: 189/194] container: Prepare to prune render nodes



commit e2df7b6623ed5789bd0b5d8e1273f88695605e9e
Author: Matthias Clasen <mclasen redhat com>
Date:   Tue Aug 16 12:19:48 2016 -0400

    container: Prepare to prune render nodes
    
    Add a should_propagate function for render nodes. Eventually,
    this is meant to avoid creating render nodes for child widgets
    that are outside the parents clip area. Since we don't have
    that information available right now, just filter out nondrawable
    children for now.

 gtk/gtkcontainer.c |   15 ++++++++++++++-
 1 files changed, 14 insertions(+), 1 deletions(-)
---
diff --git a/gtk/gtkcontainer.c b/gtk/gtkcontainer.c
index 429348f..21d8e89 100644
--- a/gtk/gtkcontainer.c
+++ b/gtk/gtkcontainer.c
@@ -3886,6 +3886,16 @@ typedef struct {
   GArray *child_infos;
 } RenderData;
 
+static gboolean
+should_propagate_node (GtkWidget  *child,
+                       RenderData *data)
+{
+  if (!_gtk_widget_is_drawable (child))
+    return FALSE;
+
+  return TRUE;
+}
+
 static void
 propagate_render_node (GtkWidget *child,
                        gpointer   data_)
@@ -3954,6 +3964,9 @@ collect_child_infos (GtkWidget *widget,
   GList *siblings;
   GdkWindow *window;
 
+  if (!should_propagate_node (widget, data))
+    return;
+
   info.child = widget;
   info.window_depth = G_MAXINT;
 
@@ -3970,7 +3983,6 @@ collect_child_infos (GtkWidget *widget,
   g_array_append_val (data->child_infos, info);
 }
 
-
 void
 gtk_container_propagate_render_node (GtkContainer  *container,
                                      GskRenderer   *renderer,
@@ -3982,6 +3994,7 @@ gtk_container_propagate_render_node (GtkContainer  *container,
   data.container = container;
   data.renderer = renderer;
   data.parent = parent_node;
+
   data.child_infos = g_array_new (FALSE, TRUE, sizeof (ChildOrderInfo));
 
   gtk_container_forall (container, collect_child_infos, &data);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]