]> Pileus Git - ~andy/gtk/commitdiff
API: Add gtk_gradient_to_string()
authorBenjamin Otte <otte@redhat.com>
Mon, 11 Apr 2011 16:38:22 +0000 (18:38 +0200)
committerBenjamin Otte <otte@redhat.com>
Wed, 18 May 2011 19:58:43 +0000 (21:58 +0200)
docs/reference/gtk/gtk3-sections.txt
gtk/gtk.symbols
gtk/gtkgradient.c
gtk/gtkgradient.h

index 1fed765efef96af02bd299ae701d276f84957549..5333b01210520387ac001e5fd2f276cfba876661 100644 (file)
@@ -5747,6 +5747,7 @@ gtk_gradient_add_color_stop
 gtk_gradient_ref
 gtk_gradient_unref
 gtk_gradient_resolve
+gtk_gradient_to_string
 
 <SUBSECTION Standard>
 GTK_TYPE_GRADIENT
index 643bc3507cbffd142f8b615b82f758ba4ba23077..49d0f2cce748adb12cea5716253348b1fc6a10dd 100644 (file)
@@ -712,6 +712,7 @@ gtk_gradient_new_linear
 gtk_gradient_new_radial
 gtk_gradient_ref
 gtk_gradient_resolve
+gtk_gradient_to_string
 gtk_gradient_unref
 gtk_dialog_add_action_widget
 gtk_dialog_add_button
index a19b8fe58360e9faf7d02d616e2dab7fc7064d21..381586056622abf67c27927b4b8b2f44db8b3ef2 100644 (file)
@@ -280,3 +280,103 @@ gtk_gradient_resolve (GtkGradient         *gradient,
   *resolved_gradient = pattern;
   return TRUE;
 }
+
+static void
+append_number (GString    *str,
+               double      d,
+               const char *zero,
+               const char *half,
+               const char *one)
+{
+  if (zero && d == 0.0)
+    g_string_append (str, zero);
+  else if (half && d == 0.5)
+    g_string_append (str, half);
+  else if (one && d == 1.0)
+    g_string_append (str, one);
+  else
+    {
+      char buf[G_ASCII_DTOSTR_BUF_SIZE];
+
+      g_ascii_dtostr (buf, sizeof (buf), d);
+      g_string_append (str, buf);
+    }
+}
+
+/**
+ * gtk_gradient_to_string:
+ * @gradient: the gradient to print
+ *
+ * Creates a string representation for @gradient that is suitable
+ * for using in GTK CSS files.
+ *
+ * Returns: A string representation for @gradient
+ **/
+char *
+gtk_gradient_to_string (GtkGradient *gradient)
+{
+  GString *str;
+  guint i;
+
+  g_return_val_if_fail (gradient != NULL, NULL);
+
+  str = g_string_new ("-gtk-gradient (");
+
+  if (gradient->radius0 == 0 && gradient->radius1 == 0)
+    {
+      g_string_append (str, "linear, ");
+      append_number (str, gradient->x0, "left", "center", "right");
+      g_string_append_c (str, ' ');
+      append_number (str, gradient->y0, "top", "center", "bottom");
+      g_string_append (str, ", ");
+      append_number (str, gradient->x1, "left", "center", "right");
+      g_string_append_c (str, ' ');
+      append_number (str, gradient->y1, "top", "center", "bottom");
+    }
+  else
+    {
+      g_string_append (str, "radial, ");
+      append_number (str, gradient->x0, "left", "center", "right");
+      g_string_append_c (str, ' ');
+      append_number (str, gradient->y0, "top", "center", "bottom");
+      g_string_append (str, ", ");
+      append_number (str, gradient->radius0, NULL, NULL, NULL);
+      g_string_append (str, ", ");
+      append_number (str, gradient->x1, "left", "center", "right");
+      g_string_append_c (str, ' ');
+      append_number (str, gradient->y1, "top", "center", "bottom");
+      g_string_append (str, ", ");
+      append_number (str, gradient->radius1, NULL, NULL, NULL);
+    }
+  
+  for (i = 0; i < gradient->stops->len; i++)
+    {
+      ColorStop *stop;
+      char *s;
+
+      stop = &g_array_index (gradient->stops, ColorStop, i);
+
+      g_string_append (str, ", ");
+
+      if (stop->offset == 0.0)
+        g_string_append (str, "from (");
+      else if (stop->offset == 1.0)
+        g_string_append (str, "to (");
+      else
+        {
+          g_string_append (str, "color-stop (");
+          append_number (str, stop->offset, NULL, NULL, NULL);
+          g_string_append (str, ", ");
+        }
+
+      s = gtk_symbolic_color_to_string (stop->color);
+      g_string_append (str, s);
+      g_free (s);
+
+      g_string_append (str, ")");
+    }
+
+  g_string_append (str, ")");
+
+  return g_string_free (str, FALSE);
+}
index f097c40fd0a2d68afc537578362eeb4626c66c16..7d5403023516e2aae1b7213cdc950d8782f56ff5 100644 (file)
@@ -56,6 +56,8 @@ gboolean      gtk_gradient_resolve        (GtkGradient         *gradient,
                                            GtkStyleProperties  *props,
                                            cairo_pattern_t    **resolved_gradient);
 
+char *        gtk_gradient_to_string      (GtkGradient         *gradient);
+
 G_END_DECLS
 
 #endif /* __GTK_GRADIENT_H__ */