[gtk+/wip/cssnode3: 78/81] cssnode: Change the way we invalidate timestamps



commit bd2b6cefe638fa33692fc14cebdda438c4b9104c
Author: Benjamin Otte <otte redhat com>
Date:   Sat Feb 28 02:22:38 2015 +0100

    cssnode: Change the way we invalidate timestamps
    
    Do not propagate the TIMESTAMP change through the node tree, as that
    causes lots of uneeded markings of nodes as invalid.
    
    Instead, walk the node tree and find the nodes that have a non-static
    style and only invalidate timestamps on those.

 gtk/gtkcssnode.c |   25 +++++++++++++++++++++----
 1 files changed, 21 insertions(+), 4 deletions(-)
---
diff --git a/gtk/gtkcssnode.c b/gtk/gtkcssnode.c
index 0a70bdd..39ddd7c 100644
--- a/gtk/gtkcssnode.c
+++ b/gtk/gtkcssnode.c
@@ -846,6 +846,23 @@ gtk_css_node_invalidate_style_provider (GtkCssNode *cssnode)
     }
 }
 
+static void
+gtk_css_node_invalidate_timestamp (GtkCssNode *cssnode)
+{
+  GtkCssNode *child;
+
+  if (!cssnode->invalid)
+    return;
+
+  if (!gtk_css_style_is_static (cssnode->style))
+    gtk_css_node_invalidate (cssnode, GTK_CSS_CHANGE_TIMESTAMP);
+
+  for (child = cssnode->first_child; child; child = child->next_sibling)
+    {
+      gtk_css_node_invalidate_timestamp (child);
+    }
+}
+
 void
 gtk_css_node_invalidate_frame_clock (GtkCssNode *cssnode,
                                      gboolean    just_timestamp)
@@ -854,10 +871,10 @@ gtk_css_node_invalidate_frame_clock (GtkCssNode *cssnode,
   if (cssnode->parent)
     return;
 
-  if (just_timestamp)
-    gtk_css_node_invalidate (cssnode, GTK_CSS_CHANGE_TIMESTAMP);
-  else
-    gtk_css_node_invalidate (cssnode, GTK_CSS_CHANGE_TIMESTAMP | GTK_CSS_CHANGE_ANIMATIONS);
+  gtk_css_node_invalidate_timestamp (cssnode);
+
+  if (!just_timestamp)
+    gtk_css_node_invalidate (cssnode, GTK_CSS_CHANGE_ANIMATIONS);
 }
 
 void


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