]> Pileus Git - ~andy/gtk/commitdiff
cssimage: Implement dependencies for images
authorBenjamin Otte <otte@redhat.com>
Tue, 28 Aug 2012 13:29:56 +0000 (15:29 +0200)
committerBenjamin Otte <otte@redhat.com>
Tue, 28 Aug 2012 13:42:25 +0000 (15:42 +0200)
gtk/gtkcssimage.c
gtk/gtkcssimagegradient.c
gtk/gtkcssimagelinear.c
gtk/gtkcssimageprivate.h
gtk/gtkcssimagevalue.c

index e10de72d0368ff5299eb4676c27f3b5cf139f559..d990fc79fe4724b6166b0ae7375980c5cb703073 100644 (file)
@@ -57,9 +57,10 @@ gtk_css_image_real_get_aspect_ratio (GtkCssImage *image)
 }
 
 static GtkCssImage *
-gtk_css_image_real_compute (GtkCssImage     *image,
-                            guint            property_id,
-                            GtkStyleContext *context)
+gtk_css_image_real_compute (GtkCssImage        *image,
+                            guint               property_id,
+                            GtkStyleContext    *context,
+                            GtkCssDependencies *dependencies)
 {
   return g_object_ref (image);
 }
@@ -115,18 +116,24 @@ _gtk_css_image_get_aspect_ratio (GtkCssImage *image)
 }
 
 GtkCssImage *
-_gtk_css_image_compute (GtkCssImage     *image,
-                        guint            property_id,
-                        GtkStyleContext *context)
+_gtk_css_image_compute (GtkCssImage        *image,
+                        guint               property_id,
+                        GtkStyleContext    *context,
+                        GtkCssDependencies *dependencies)
 {
+  GtkCssDependencies unused;
   GtkCssImageClass *klass;
 
   g_return_val_if_fail (GTK_IS_CSS_IMAGE (image), NULL);
   g_return_val_if_fail (GTK_IS_STYLE_CONTEXT (context), NULL);
 
+  if (dependencies == NULL)
+    dependencies = &unused;
+  *dependencies = 0;
+
   klass = GTK_CSS_IMAGE_GET_CLASS (image);
 
-  return klass->compute (image, property_id, context);
+  return klass->compute (image, property_id, context, dependencies);
 }
 
 void
index 254ebc8c4ad666df18bf5fd13e088c6bb503d4f9..adaee94df5b34aec720c33a4c0151728b0a9b69c 100644 (file)
 
 #include "gtkcssprovider.h"
 #include "gtksymboliccolorprivate.h"
+#include "gtkstylepropertiesprivate.h"
 
 G_DEFINE_TYPE (GtkCssImageGradient, _gtk_css_image_gradient, GTK_TYPE_CSS_IMAGE)
 
 static GtkCssImage *
-gtk_css_image_gradient_compute (GtkCssImage     *image,
-                                guint            property_id,
-                                GtkStyleContext *context)
+gtk_css_image_gradient_compute (GtkCssImage        *image,
+                                guint               property_id,
+                                GtkStyleContext    *context,
+                                GtkCssDependencies *dependencies)
 {
   GtkCssImageGradient *gradient = GTK_CSS_IMAGE_GRADIENT (image);
   GtkCssImageGradient *copy;
@@ -39,7 +41,7 @@ gtk_css_image_gradient_compute (GtkCssImage     *image,
 
   copy = g_object_new (GTK_TYPE_CSS_IMAGE_GRADIENT, NULL);
   copy->gradient = gtk_gradient_ref (gradient->gradient);
-  copy->pattern = gtk_gradient_resolve_for_context (copy->gradient, context);
+  copy->pattern = _gtk_gradient_resolve_full (copy->gradient, context, dependencies);
 
   return GTK_CSS_IMAGE (copy);
 }
index 998d3660cf0732267a55744ccc814902baaf70ff..8dee6972bccc99a29b7078f3991a1f1a841e16ef 100644 (file)
@@ -409,9 +409,10 @@ gtk_css_image_linear_print (GtkCssImage *image,
 }
 
 static GtkCssImage *
-gtk_css_image_linear_compute (GtkCssImage     *image,
-                              guint            property_id,
-                              GtkStyleContext *context)
+gtk_css_image_linear_compute (GtkCssImage        *image,
+                              guint               property_id,
+                              GtkStyleContext    *context,
+                              GtkCssDependencies *dependencies)
 {
   GtkCssImageLinear *linear = GTK_CSS_IMAGE_LINEAR (image);
   GtkCssImageLinear *copy;
@@ -420,22 +421,29 @@ gtk_css_image_linear_compute (GtkCssImage     *image,
   copy = g_object_new (GTK_TYPE_CSS_IMAGE_LINEAR, NULL);
   copy->repeating = linear->repeating;
 
-  copy->angle = _gtk_css_value_compute (linear->angle, property_id, context, NULL);
+  copy->angle = _gtk_css_value_compute (linear->angle, property_id, context, dependencies);
   
   g_array_set_size (copy->stops, linear->stops->len);
   for (i = 0; i < linear->stops->len; i++)
     {
       GtkCssImageLinearColorStop *stop, *scopy;
+      GtkCssDependencies child_deps;
 
       stop = &g_array_index (linear->stops, GtkCssImageLinearColorStop, i);
       scopy = &g_array_index (copy->stops, GtkCssImageLinearColorStop, i);
               
-      scopy->color = _gtk_css_value_compute (stop->color, property_id, context, NULL);
+      scopy->color = _gtk_css_value_compute (stop->color, property_id, context, &child_deps);
+      *dependencies = _gtk_css_dependencies_union (*dependencies, child_deps);
       
       if (stop->offset)
-        scopy->offset = _gtk_css_value_compute (stop->offset, property_id, context, NULL);
+        {
+          scopy->offset = _gtk_css_value_compute (stop->offset, property_id, context, &child_deps);
+          *dependencies = _gtk_css_dependencies_union (*dependencies, child_deps);
+        }
       else
-        scopy->offset = NULL;
+        {
+          scopy->offset = NULL;
+        }
     }
 
   return GTK_CSS_IMAGE (copy);
index e14387ba3b78021dd0f48f47d357153de3eb91da..2899ef2822ee266ea9a4087ed91fdc36c404db9c 100644 (file)
@@ -57,7 +57,8 @@ struct _GtkCssImageClass
   /* create "computed value" in CSS terms, returns a new reference */
   GtkCssImage *(* compute)                         (GtkCssImage        *image,
                                                     guint               property_id,
-                                                    GtkStyleContext    *context);
+                                                    GtkStyleContext    *context,
+                                                    GtkCssDependencies *dependencies);
 
   /* draw to 0,0 with the given width and height */
   void         (* draw)                            (GtkCssImage        *image,
@@ -83,7 +84,8 @@ double         _gtk_css_image_get_aspect_ratio     (GtkCssImage        *image);
 
 GtkCssImage *  _gtk_css_image_compute              (GtkCssImage        *image,
                                                     guint               property_id,
-                                                    GtkStyleContext    *context);
+                                                    GtkStyleContext    *context,
+                                                    GtkCssDependencies *dependencies);
 
 void           _gtk_css_image_draw                 (GtkCssImage        *image,
                                                     cairo_t            *cr,
index e56db9d476afc721639f39afefc8b21017af6a3f..c40354ffdba600d7004565ad812ee26cd177062e 100644 (file)
@@ -46,7 +46,7 @@ gtk_css_value_image_compute (GtkCssValue        *value,
   if (image == NULL)
     return _gtk_css_value_ref (value);
 
-  computed = _gtk_css_image_compute (image, property_id, context);
+  computed = _gtk_css_image_compute (image, property_id, context, dependencies);
 
   if (computed == image)
     {
@@ -54,8 +54,6 @@ gtk_css_value_image_compute (GtkCssValue        *value,
       return _gtk_css_value_ref (value);
     }
 
-  *dependencies = GTK_CSS_DEPENDS_ON_EVERYTHING;
-
   return _gtk_css_image_value_new (computed);
 }