[gtk+/wip/cssnode3: 87/91] stylecontext: Add gtk_style_context_save_to_node()



commit ff4320c6d00f7c111500864a46b3b9dfcdab726e
Author: Benjamin Otte <otte redhat com>
Date:   Mon Feb 16 16:37:33 2015 +0100

    stylecontext: Add gtk_style_context_save_to_node()
    
    To be used instead of gtk_style_context_save() with persistent nodes.

 gtk/gtkstylecontext.c        |   36 ++++++++++++++++++++++++++++++++++--
 gtk/gtkstylecontextprivate.h |    3 +++
 2 files changed, 37 insertions(+), 2 deletions(-)
---
diff --git a/gtk/gtkstylecontext.c b/gtk/gtkstylecontext.c
index ee70537..ddad72c 100644
--- a/gtk/gtkstylecontext.c
+++ b/gtk/gtkstylecontext.c
@@ -1190,6 +1190,37 @@ gtk_style_context_get_parent (GtkStyleContext *context)
   return context->priv->parent;
 }
 
+/*
+ * gtk_style_context_save_to_node:
+ * @context: a #GtkStyleContext
+ * @node: the node to save to
+ *
+ * Saves the @context state, so temporary modifications done through
+ * gtk_style_context_add_class(), gtk_style_context_remove_class(),
+ * gtk_style_context_set_state(), etc. and rendering using
+ * gtk_render_background() or similar functions are done using the
+ * given @node.
+ *
+ * To undo, call gtk_style_context_restore().
+ *
+ * The matching call to gtk_style_context_restore() must be done
+ * before GTK returns to the main loop.
+ **/
+void
+gtk_style_context_save_to_node (GtkStyleContext *context,
+                                GtkCssNode      *node)
+{
+  GtkStyleContextPrivate *priv;
+
+  g_return_if_fail (GTK_IS_STYLE_CONTEXT (context));
+  g_return_if_fail (GTK_IS_CSS_NODE (node));
+
+  priv = context->priv;
+
+  priv->saved_nodes = g_slist_prepend (priv->saved_nodes, priv->cssnode);
+  priv->cssnode = g_object_ref (node);
+}
+
 /**
  * gtk_style_context_save:
  * @context: a #GtkStyleContext
@@ -1223,8 +1254,9 @@ gtk_style_context_save (GtkStyleContext *context)
   gtk_css_node_set_parent (cssnode, gtk_style_context_get_root (context));
   gtk_css_node_set_widget_type (cssnode, gtk_css_node_get_widget_type (priv->cssnode));
 
-  priv->saved_nodes = g_slist_prepend (priv->saved_nodes, priv->cssnode);
-  priv->cssnode = cssnode;
+  gtk_style_context_save_to_node (context, cssnode);
+
+  g_object_unref (cssnode);
 }
 
 /**
diff --git a/gtk/gtkstylecontextprivate.h b/gtk/gtkstylecontextprivate.h
index af9f4a7..4429950 100644
--- a/gtk/gtkstylecontextprivate.h
+++ b/gtk/gtkstylecontextprivate.h
@@ -36,6 +36,9 @@ const char *    gtk_style_context_get_id                     (GtkStyleContext *c
 GtkStyleProviderPrivate *
                 gtk_style_context_get_style_provider         (GtkStyleContext *context);
 
+void            gtk_style_context_save_to_node               (GtkStyleContext *context,
+                                                              GtkCssNode      *node);
+
 const GtkBitmask *
                 _gtk_style_context_get_changes               (GtkStyleContext *context);
 


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