From e351a48d6a302fda8fdb6217e20cad74e1202be6 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Fri, 22 Oct 2010 14:21:34 +0200 Subject: [PATCH] Make gtk_icon_info_load_symbolic() Take GdkRGBA colors. --- gtk/gtkicontheme.c | 146 +++++++++++++++++++++++++++++---------------- gtk/gtkicontheme.h | 10 ++-- 2 files changed, 101 insertions(+), 55 deletions(-) diff --git a/gtk/gtkicontheme.c b/gtk/gtkicontheme.c index 293d3d6785..e93a900403 100644 --- a/gtk/gtkicontheme.c +++ b/gtk/gtkicontheme.c @@ -3062,15 +3062,63 @@ gdk_color_to_css (GdkColor *color) color->blue >> 8); } +static GdkPixbuf * +_gtk_icon_info_load_symbolic_internal (GtkIconInfo *icon_info, + const gchar *css_fg, + const gchar *css_success, + const gchar *css_warning, + const gchar *css_error, + GError **error) +{ + GInputStream *stream; + GdkPixbuf *pixbuf; + gchar *data; + + data = g_strconcat ("\n" + "\n" + " \n" + " filename, "\"/>\n" + "", + NULL); + + stream = g_memory_input_stream_new_from_data (data, -1, g_free); + pixbuf = gdk_pixbuf_new_from_stream_at_scale (stream, + icon_info->desired_size, + icon_info->desired_size, + TRUE, + NULL, + error); + g_object_unref (stream); + + return pixbuf; +} + /** * gtk_icon_info_load_symbolic: * @icon_info: a #GtkIconInfo - * @fg: a #GdkColor representing the foreground color of the icon - * @success_color: (allow-none): a #GdkColor representing the warning color + * @fg: a #GdkRGBA representing the foreground color of the icon + * @success_color: (allow-none): a #GdkRGBA representing the warning color * of the icon or %NULL to use the default color - * @warning_color: (allow-none): a #GdkColor representing the warning color + * @warning_color: (allow-none): a #GdkRGBA representing the warning color * of the icon or %NULL to use the default color - * @error_color: (allow-none): a #GdkColor representing the error color + * @error_color: (allow-none): a #GdkRGBA representing the error color * of the icon or %NULL to use the default color (allow-none) * @was_symbolic: (allow-none): a #gboolean, returns whether the loaded icon * was a symbolic one and whether the @fg color was applied to it. @@ -3100,16 +3148,14 @@ gdk_color_to_css (GdkColor *color) **/ GdkPixbuf * gtk_icon_info_load_symbolic (GtkIconInfo *icon_info, - GdkColor *fg, - GdkColor *success_color, - GdkColor *warning_color, - GdkColor *error_color, + GdkRGBA *fg, + GdkRGBA *success_color, + GdkRGBA *warning_color, + GdkRGBA *error_color, gboolean *was_symbolic, GError **error) { GdkPixbuf *pixbuf; - GInputStream *stream; - gchar *data; gchar *css_fg; gchar *css_success; gchar *css_warning; @@ -3128,68 +3174,40 @@ gtk_icon_info_load_symbolic (GtkIconInfo *icon_info, if (was_symbolic) *was_symbolic = TRUE; - css_fg = gdk_color_to_css (fg); + css_fg = gdk_rgba_to_string (fg); if (!warning_color) { GdkColor warning_default_color = { 0, 0xf500, 0x7900, 0x3e00 }; css_warning = gdk_color_to_css (&warning_default_color); } else - css_warning = gdk_color_to_css (warning_color); + css_warning = gdk_rgba_to_string (warning_color); + if (!error_color) { GdkColor error_default_color = { 0, 0xcc00, 0x0000, 0x0000 }; css_error = gdk_color_to_css (&error_default_color); } else - css_error = gdk_color_to_css (error_color); + css_error = gdk_rgba_to_string (error_color); + if (!success_color) { GdkColor success_default_color = { 0, 0x4e00, 0x9a00, 0x0600 }; css_success = gdk_color_to_css (&success_default_color); } else - css_success = gdk_color_to_css (success_color); + css_success = gdk_rgba_to_string (success_color); - data = g_strconcat ( -"\n" -"\n" -" \n" -" filename, "\"/>\n" -"", - NULL); + pixbuf = _gtk_icon_info_load_symbolic_internal (icon_info, + css_fg, css_success, + css_warning, css_error, + error); g_free (css_fg); g_free (css_warning); g_free (css_success); g_free (css_error); - stream = g_memory_input_stream_new_from_data (data, -1, g_free); - - pixbuf = gdk_pixbuf_new_from_stream_at_scale (stream, - icon_info->desired_size, - icon_info->desired_size, - TRUE, - NULL, - error); - g_object_unref (stream); - return pixbuf; } @@ -3222,6 +3240,7 @@ gtk_icon_info_load_symbolic_for_style (GtkIconInfo *icon_info, gboolean *was_symbolic, GError **error) { + GdkPixbuf *pixbuf; GdkColor success_color; GdkColor warning_color; GdkColor error_color; @@ -3229,6 +3248,19 @@ gtk_icon_info_load_symbolic_for_style (GtkIconInfo *icon_info, GdkColor *success = NULL; GdkColor *warning = NULL; GdkColor *err = NULL; + gchar *css_fg, *css_success; + gchar *css_warning, *css_error; + + if (!icon_info->filename || + !g_str_has_suffix (icon_info->filename, "-symbolic.svg")) + { + if (was_symbolic) + *was_symbolic = FALSE; + return gtk_icon_info_load_icon (icon_info, error); + } + + if (was_symbolic) + *was_symbolic = TRUE; fg = &style->fg[state]; if (gtk_style_lookup_color (style, "success_color", &success_color)) @@ -3238,8 +3270,22 @@ gtk_icon_info_load_symbolic_for_style (GtkIconInfo *icon_info, if (gtk_style_lookup_color (style, "error_color", &error_color)) err = &error_color; - return gtk_icon_info_load_symbolic (icon_info, fg, success, warning, err, - was_symbolic, error); + css_fg = gdk_color_to_css (fg); + css_success = gdk_color_to_css (success); + css_warning = gdk_color_to_css (warning); + css_error = gdk_color_to_css (err); + + pixbuf = _gtk_icon_info_load_symbolic_internal (icon_info, + css_fg, css_success, + css_warning, css_error, + error); + + g_free (css_fg); + g_free (css_success); + g_free (css_warning); + g_free (css_error); + + return pixbuf; } /** diff --git a/gtk/gtkicontheme.h b/gtk/gtkicontheme.h index 37f7d89ba7..f493ba98a0 100644 --- a/gtk/gtkicontheme.h +++ b/gtk/gtkicontheme.h @@ -172,11 +172,11 @@ GdkPixbuf * gtk_icon_info_get_builtin_pixbuf (GtkIconInfo *icon_info GdkPixbuf * gtk_icon_info_load_icon (GtkIconInfo *icon_info, GError **error); GdkPixbuf * gtk_icon_info_load_symbolic (GtkIconInfo *icon_info, - GdkColor *fg, - GdkColor *success_color, - GdkColor *warning_color, - GdkColor *error_color, - gboolean *was_symbolic, + GdkRGBA *fg, + GdkRGBA *success_color, + GdkRGBA *warning_color, + GdkRGBA *error_color, + gboolean *was_symbolic, GError **error); GdkPixbuf * gtk_icon_info_load_symbolic_for_style (GtkIconInfo *icon_info, GtkStyle *style,