[gtk+/nth-child: 5/33] css: Change to_string() to print()
- From: Benjamin Otte <otte src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/nth-child: 5/33] css: Change to_string() to print()
- Date: Fri, 27 May 2011 23:04:05 +0000 (UTC)
commit 962ba035bf4f35b3c2c030d98942ce32322a0ee2
Author: Benjamin Otte <otte redhat com>
Date: Mon May 23 07:02:36 2011 +0200
css: Change to_string() to print()
It's preferrable to print to an existing GString instead of returning a
char* everywhere that needs to be freed later.
gtk/gtkanimationdescription.c | 13 +--
gtk/gtkanimationdescription.h | 3 +-
gtk/gtkshadow.c | 29 ++---
gtk/gtkshadowprivate.h | 3 +-
gtk/gtkstyleproperty.c | 271 +++++++++++++++++++++++------------------
5 files changed, 169 insertions(+), 150 deletions(-)
---
diff --git a/gtk/gtkanimationdescription.c b/gtk/gtkanimationdescription.c
index 497c550..ac5e392 100644
--- a/gtk/gtkanimationdescription.c
+++ b/gtk/gtkanimationdescription.c
@@ -123,15 +123,14 @@ _gtk_animation_description_from_string (const gchar *str)
return _gtk_animation_description_new ((gdouble) duration, progress_type, loop);
}
-char *
-_gtk_animation_description_to_string (GtkAnimationDescription *desc)
+void
+_gtk_animation_description_print (GtkAnimationDescription *desc,
+ GString *str)
{
- GString *str;
int duration;
- g_return_val_if_fail (desc != NULL, NULL);
-
- str = g_string_new ("");
+ g_return_if_fail (desc != NULL);
+ g_return_if_fail (str != NULL);
duration = desc->duration;
if (duration % 1000 == 0)
@@ -162,8 +161,6 @@ _gtk_animation_description_to_string (GtkAnimationDescription *desc)
if (desc->loop)
g_string_append (str, " loop");
-
- return g_string_free (str, FALSE);
}
GType
diff --git a/gtk/gtkanimationdescription.h b/gtk/gtkanimationdescription.h
index 5423cd4..a71e683 100644
--- a/gtk/gtkanimationdescription.h
+++ b/gtk/gtkanimationdescription.h
@@ -43,7 +43,8 @@ GtkAnimationDescription * _gtk_animation_description_ref (GtkAnima
void _gtk_animation_description_unref (GtkAnimationDescription *desc);
GtkAnimationDescription * _gtk_animation_description_from_string (const gchar *str);
-char * _gtk_animation_description_to_string (GtkAnimationDescription *desc);
+void _gtk_animation_description_print (GtkAnimationDescription *desc,
+ GString *string);
G_END_DECLS
diff --git a/gtk/gtkshadow.c b/gtk/gtkshadow.c
index f1f58c8..ce84e4b 100644
--- a/gtk/gtkshadow.c
+++ b/gtk/gtkshadow.c
@@ -39,13 +39,11 @@ struct _GtkShadowElement {
GtkSymbolicColor *symbolic_color;
};
-static gchar *
-shadow_element_to_string (GtkShadowElement *element)
+static void
+shadow_element_print (GtkShadowElement *element,
+ GString *str)
{
gchar *color_str;
- GString *str;
-
- str = g_string_new (NULL);
if (element->inset)
g_string_append (str, "inset ");
@@ -67,8 +65,6 @@ shadow_element_to_string (GtkShadowElement *element)
g_string_append (str, color_str);
g_free (color_str);
-
- return g_string_free (str, FALSE);
}
static void
@@ -226,33 +222,28 @@ _gtk_shadow_resolve (GtkShadow *shadow,
return resolved_shadow;
}
-gchar *
-_gtk_shadow_to_string (GtkShadow *shadow)
+void
+_gtk_shadow_print (GtkShadow *shadow,
+ GString *str)
{
- GString *str;
gint length;
GList *l;
length = g_list_length (shadow->elements);
if (length == 0)
- return NULL;
-
- str = g_string_new (NULL);
+ return;
- g_string_append (str,
- shadow_element_to_string (shadow->elements->data));
+ shadow_element_print (shadow->elements->data, str);
if (length == 1)
- return g_string_free (str, FALSE);
+ return;
for (l = g_list_next (shadow->elements); l != NULL; l = l->next)
{
g_string_append (str, ", ");
- g_string_append (str, shadow_element_to_string (l->data));
+ shadow_element_print (l->data, str);
}
-
- return g_string_free (str, FALSE);
}
void
diff --git a/gtk/gtkshadowprivate.h b/gtk/gtkshadowprivate.h
index 46ef0ff..1594dc6 100644
--- a/gtk/gtkshadowprivate.h
+++ b/gtk/gtkshadowprivate.h
@@ -47,7 +47,8 @@ void _gtk_shadow_append (GtkShadow *shadow,
gboolean inset,
GtkSymbolicColor *color);
-gchar *_gtk_shadow_to_string (GtkShadow *shadow);
+void _gtk_shadow_print (GtkShadow *shadow,
+ GString *string);
GtkShadow *_gtk_shadow_resolve (GtkShadow *shadow,
GtkStyleProperties *props);
diff --git a/gtk/gtkstyleproperty.c b/gtk/gtkstyleproperty.c
index abed616..2bcb394 100644
--- a/gtk/gtkstyleproperty.c
+++ b/gtk/gtkstyleproperty.c
@@ -43,21 +43,22 @@
typedef gboolean (* ParseFunc) (GtkCssParser *parser,
GFile *base,
GValue *value);
-typedef char * (* ToStringFunc) (const GValue *value);
+typedef void (* PrintFunc) (const GValue *value,
+ GString *string);
static GHashTable *parse_funcs = NULL;
-static GHashTable *to_string_funcs = NULL;
+static GHashTable *print_funcs = NULL;
static GHashTable *properties = NULL;
static void
register_conversion_function (GType type,
ParseFunc parse,
- ToStringFunc to_string)
+ PrintFunc print)
{
if (parse)
g_hash_table_insert (parse_funcs, GSIZE_TO_POINTER (type), parse);
- if (to_string)
- g_hash_table_insert (to_string_funcs, GSIZE_TO_POINTER (type), to_string);
+ if (print)
+ g_hash_table_insert (print_funcs, GSIZE_TO_POINTER (type), print);
}
/*** IMPLEMENTATIONS ***/
@@ -88,15 +89,20 @@ rgba_value_parse (GtkCssParser *parser,
return TRUE;
}
-static char *
-rgba_value_to_string (const GValue *value)
+static void
+rgba_value_print (const GValue *value,
+ GString *string)
{
const GdkRGBA *rgba = g_value_get_boxed (value);
if (rgba == NULL)
- return g_strdup ("none");
-
- return gdk_rgba_to_string (rgba);
+ g_string_append (string, "none");
+ else
+ {
+ char *s = gdk_rgba_to_string (rgba);
+ g_string_append (string, s);
+ g_free (s);
+ }
}
static gboolean
@@ -131,15 +137,20 @@ color_value_parse (GtkCssParser *parser,
return TRUE;
}
-static char *
-color_value_to_string (const GValue *value)
+static void
+color_value_print (const GValue *value,
+ GString *string)
{
const GdkColor *color = g_value_get_boxed (value);
if (color == NULL)
- return g_strdup ("none");
-
- return gdk_color_to_string (color);
+ g_string_append (string, "none");
+ else
+ {
+ char *s = gdk_color_to_string (color);
+ g_string_append (string, s);
+ g_free (s);
+ }
}
static gboolean
@@ -157,15 +168,20 @@ symbolic_color_value_parse (GtkCssParser *parser,
return TRUE;
}
-static char *
-symbolic_color_value_to_string (const GValue *value)
+static void
+symbolic_color_value_print (const GValue *value,
+ GString *string)
{
GtkSymbolicColor *symbolic = g_value_get_boxed (value);
if (symbolic == NULL)
- return g_strdup ("none");
-
- return gtk_symbolic_color_to_string (symbolic);
+ g_string_append (string, "none");
+ else
+ {
+ char *s = gtk_symbolic_color_to_string (symbolic);
+ g_string_append (string, s);
+ g_free (s);
+ }
}
static gboolean
@@ -186,15 +202,20 @@ font_description_value_parse (GtkCssParser *parser,
return TRUE;
}
-static char *
-font_description_value_to_string (const GValue *value)
+static void
+font_description_value_print (const GValue *value,
+ GString *string)
{
const PangoFontDescription *desc = g_value_get_boxed (value);
if (desc == NULL)
- return g_strdup ("none");
-
- return pango_font_description_to_string (desc);
+ g_string_append (string, "none");
+ else
+ {
+ char *s = pango_font_description_to_string (desc);
+ g_string_append (string, s);
+ g_free (s);
+ }
}
static gboolean
@@ -221,13 +242,14 @@ boolean_value_parse (GtkCssParser *parser,
}
}
-static char *
-boolean_value_to_string (const GValue *value)
+static void
+boolean_value_print (const GValue *value,
+ GString *string)
{
if (g_value_get_boolean (value))
- return g_strdup ("true");
+ g_string_append (string, "true");
else
- return g_strdup ("false");
+ g_string_append (string, "false");
}
static gboolean
@@ -247,10 +269,11 @@ int_value_parse (GtkCssParser *parser,
return TRUE;
}
-static char *
-int_value_to_string (const GValue *value)
+static void
+int_value_print (const GValue *value,
+ GString *string)
{
- return g_strdup_printf ("%d", g_value_get_int (value));
+ g_string_append_printf (string, "%d", g_value_get_int (value));
}
static gboolean
@@ -270,10 +293,11 @@ uint_value_parse (GtkCssParser *parser,
return TRUE;
}
-static char *
-uint_value_to_string (const GValue *value)
+static void
+uint_value_print (const GValue *value,
+ GString *string)
{
- return g_strdup_printf ("%u", g_value_get_uint (value));
+ g_string_append_printf (string, "%u", g_value_get_uint (value));
}
static gboolean
@@ -293,14 +317,14 @@ double_value_parse (GtkCssParser *parser,
return TRUE;
}
-static char *
-double_value_to_string (const GValue *value)
+static void
+double_value_print (const GValue *value,
+ GString *string)
{
char buf[G_ASCII_DTOSTR_BUF_SIZE];
g_ascii_dtostr (buf, sizeof (buf), g_value_get_double (value));
-
- return g_strdup (buf);
+ g_string_append (string, buf);
}
static gboolean
@@ -320,14 +344,14 @@ float_value_parse (GtkCssParser *parser,
return TRUE;
}
-static char *
-float_value_to_string (const GValue *value)
+static void
+float_value_print (const GValue *value,
+ GString *string)
{
char buf[G_ASCII_DTOSTR_BUF_SIZE];
g_ascii_dtostr (buf, sizeof (buf), g_value_get_float (value));
-
- return g_strdup (buf);
+ g_string_append (string, buf);
}
static gboolean
@@ -344,15 +368,15 @@ string_value_parse (GtkCssParser *parser,
return TRUE;
}
-static char *
-string_value_to_string (const GValue *value)
+static void
+string_value_print (const GValue *value,
+ GString *str)
{
const char *string;
gsize len;
- GString *str;
string = g_value_get_string (value);
- str = g_string_new ("\"");
+ g_string_append_c (str, '"');
do {
len = strcspn (string, "\"\n\r\f");
@@ -381,7 +405,6 @@ string_value_to_string (const GValue *value)
} while (*string);
g_string_append_c (str, '"');
- return g_string_free (str, FALSE);
}
static gboolean
@@ -412,20 +435,23 @@ theming_engine_value_parse (GtkCssParser *parser,
return TRUE;
}
-static char *
-theming_engine_value_to_string (const GValue *value)
+static void
+theming_engine_value_print (const GValue *value,
+ GString *string)
{
GtkThemingEngine *engine;
char *name;
engine = g_value_get_object (value);
if (engine == NULL)
- return g_strdup ("none");
-
- /* XXX: gtk_theming_engine_get_name()? */
- g_object_get (engine, "name", &name, NULL);
-
- return name;
+ g_string_append (string, "none");
+ else
+ {
+ /* XXX: gtk_theming_engine_get_name()? */
+ g_object_get (engine, "name", &name, NULL);
+ g_string_append (string, name);
+ g_free (name);
+ }
}
static gboolean
@@ -453,15 +479,16 @@ animation_description_value_parse (GtkCssParser *parser,
return TRUE;
}
-static char *
-animation_description_value_to_string (const GValue *value)
+static void
+animation_description_value_print (const GValue *value,
+ GString *string)
{
GtkAnimationDescription *desc = g_value_get_boxed (value);
if (desc == NULL)
- return g_strdup ("none");
-
- return _gtk_animation_description_to_string (desc);
+ g_string_append (string, "none");
+ else
+ _gtk_animation_description_print (desc, string);
}
static gboolean
@@ -505,21 +532,21 @@ border_value_parse (GtkCssParser *parser,
return TRUE;
}
-static char *
-border_value_to_string (const GValue *value)
+static void
+border_value_print (const GValue *value, GString *string)
{
const GtkBorder *border = g_value_get_boxed (value);
if (border == NULL)
- return g_strdup ("none");
+ g_string_append (string, "none");
else if (border->left != border->right)
- return g_strdup_printf ("%d %d %d %d", border->top, border->right, border->bottom, border->left);
+ g_string_append_printf (string, "%d %d %d %d", border->top, border->right, border->bottom, border->left);
else if (border->top != border->bottom)
- return g_strdup_printf ("%d %d %d", border->top, border->right, border->bottom);
+ g_string_append_printf (string, "%d %d %d", border->top, border->right, border->bottom);
else if (border->top != border->left)
- return g_strdup_printf ("%d %d", border->top, border->right);
+ g_string_append_printf (string, "%d %d", border->top, border->right);
else
- return g_strdup_printf ("%d", border->top);
+ g_string_append_printf (string, "%d", border->top);
}
static gboolean
@@ -715,15 +742,20 @@ gradient_value_parse (GtkCssParser *parser,
return TRUE;
}
-static char *
-gradient_value_to_string (const GValue *value)
+static void
+gradient_value_print (const GValue *value,
+ GString *string)
{
GtkGradient *gradient = g_value_get_boxed (value);
if (gradient == NULL)
- return g_strdup ("none");
-
- return gtk_gradient_to_string (gradient);
+ g_string_append (string, "none");
+ else
+ {
+ char *s = gtk_gradient_to_string (gradient);
+ g_string_append (string, s);
+ g_free (s);
+ }
}
static GFile *
@@ -897,17 +929,18 @@ shadow_value_parse (GtkCssParser *parser,
return TRUE;
}
-static gchar *
-shadow_value_to_string (const GValue *value)
+static void
+shadow_value_print (const GValue *value,
+ GString *string)
{
GtkShadow *shadow;
shadow = g_value_get_boxed (value);
if (shadow == NULL)
- return g_strdup ("none");
-
- return _gtk_shadow_to_string (shadow);
+ g_string_append (string, "none");
+ else
+ _gtk_shadow_print (shadow, string);
}
static gboolean
@@ -1007,21 +1040,19 @@ enum_value_parse (GtkCssParser *parser,
return enum_value != NULL;
}
-static char *
-enum_value_to_string (const GValue *value)
+static void
+enum_value_print (const GValue *value,
+ GString *string)
{
GEnumClass *enum_class;
GEnumValue *enum_value;
- char *s;
enum_class = g_type_class_ref (G_VALUE_TYPE (value));
enum_value = g_enum_get_value (enum_class, g_value_get_enum (value));
- s = g_strdup (enum_value->value_nick);
+ g_string_append (string, enum_value->value_nick);
g_type_class_unref (enum_class);
-
- return s;
}
static gboolean
@@ -1070,16 +1101,15 @@ flags_value_parse (GtkCssParser *parser,
return TRUE;
}
-static char *
-flags_value_to_string (const GValue *value)
+static void
+flags_value_print (const GValue *value,
+ GString *string)
{
GFlagsClass *flags_class;
- GString *string;
guint i, flags;
flags_class = g_type_class_ref (G_VALUE_TYPE (value));
flags = g_value_get_flags (value);
- string = g_string_new (NULL);
for (i = 0; i < flags_class->n_values; i++)
{
@@ -1095,8 +1125,6 @@ flags_value_to_string (const GValue *value)
}
g_type_class_unref (flags_class);
-
- return g_string_free (string, FALSE);
}
static gboolean
@@ -1138,26 +1166,23 @@ bindings_value_parse (GtkCssParser *parser,
return TRUE;
}
-static char *
-bindings_value_to_string (const GValue *value)
+static void
+bindings_value_print (const GValue *value,
+ GString *string)
{
GPtrArray *array;
- GString *str;
guint i;
array = g_value_get_boxed (value);
- str = g_string_new (NULL);
for (i = 0; i < array->len; i++)
{
GtkBindingSet *binding_set = g_ptr_array_index (array, i);
if (i > 0)
- g_string_append (str, ", ");
- g_string_append (str, binding_set->set_name);
+ g_string_append (string, ", ");
+ g_string_append (string, binding_set->set_name);
}
-
- return g_string_free (str, FALSE);
}
/*** PACKING ***/
@@ -1284,50 +1309,50 @@ css_string_funcs_init (void)
return;
parse_funcs = g_hash_table_new (NULL, NULL);
- to_string_funcs = g_hash_table_new (NULL, NULL);
+ print_funcs = g_hash_table_new (NULL, NULL);
register_conversion_function (GDK_TYPE_RGBA,
rgba_value_parse,
- rgba_value_to_string);
+ rgba_value_print);
register_conversion_function (GDK_TYPE_COLOR,
color_value_parse,
- color_value_to_string);
+ color_value_print);
register_conversion_function (GTK_TYPE_SYMBOLIC_COLOR,
symbolic_color_value_parse,
- symbolic_color_value_to_string);
+ symbolic_color_value_print);
register_conversion_function (PANGO_TYPE_FONT_DESCRIPTION,
font_description_value_parse,
- font_description_value_to_string);
+ font_description_value_print);
register_conversion_function (G_TYPE_BOOLEAN,
boolean_value_parse,
- boolean_value_to_string);
+ boolean_value_print);
register_conversion_function (G_TYPE_INT,
int_value_parse,
- int_value_to_string);
+ int_value_print);
register_conversion_function (G_TYPE_UINT,
uint_value_parse,
- uint_value_to_string);
+ uint_value_print);
register_conversion_function (G_TYPE_DOUBLE,
double_value_parse,
- double_value_to_string);
+ double_value_print);
register_conversion_function (G_TYPE_FLOAT,
float_value_parse,
- float_value_to_string);
+ float_value_print);
register_conversion_function (G_TYPE_STRING,
string_value_parse,
- string_value_to_string);
+ string_value_print);
register_conversion_function (GTK_TYPE_THEMING_ENGINE,
theming_engine_value_parse,
- theming_engine_value_to_string);
+ theming_engine_value_print);
register_conversion_function (GTK_TYPE_ANIMATION_DESCRIPTION,
animation_description_value_parse,
- animation_description_value_to_string);
+ animation_description_value_print);
register_conversion_function (GTK_TYPE_BORDER,
border_value_parse,
- border_value_to_string);
+ border_value_print);
register_conversion_function (GTK_TYPE_GRADIENT,
gradient_value_parse,
- gradient_value_to_string);
+ gradient_value_print);
register_conversion_function (CAIRO_GOBJECT_TYPE_PATTERN,
pattern_value_parse,
NULL);
@@ -1336,16 +1361,16 @@ css_string_funcs_init (void)
NULL);
register_conversion_function (GTK_TYPE_SHADOW,
shadow_value_parse,
- shadow_value_to_string);
+ shadow_value_print);
register_conversion_function (G_TYPE_ENUM,
enum_value_parse,
- enum_value_to_string);
+ enum_value_print);
register_conversion_function (G_TYPE_FLAGS,
flags_value_parse,
- flags_value_to_string);
+ flags_value_print);
register_conversion_function (G_TYPE_PTR_ARRAY,
bindings_value_parse,
- bindings_value_to_string);
+ bindings_value_print);
}
gboolean
@@ -1380,18 +1405,22 @@ _gtk_css_value_parse (GValue *value,
char *
_gtk_css_value_to_string (const GValue *value)
{
- ToStringFunc func;
+ PrintFunc func;
css_string_funcs_init ();
- func = g_hash_table_lookup (to_string_funcs,
+ func = g_hash_table_lookup (print_funcs,
GSIZE_TO_POINTER (G_VALUE_TYPE (value)));
if (func == NULL)
- func = g_hash_table_lookup (to_string_funcs,
+ func = g_hash_table_lookup (print_funcs,
GSIZE_TO_POINTER (g_type_fundamental (G_VALUE_TYPE (value))));
if (func)
- return func (value);
+ {
+ GString *string = g_string_new (NULL);
+ func (value, string);
+ return g_string_free (string, FALSE);
+ }
return g_strdup_value_contents (value);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]