[gtk/wip/matthiasc/icon-theme: 11/12] Move symbolic pixbuf recoloring code
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/wip/matthiasc/icon-theme: 11/12] Move symbolic pixbuf recoloring code
- Date: Fri, 18 Oct 2019 13:59:52 +0000 (UTC)
commit 416b2cd18da72afb5f4e2844bf375b4765d5748c
Author: Matthias Clasen <mclasen redhat com>
Date: Fri Oct 18 08:40:00 2019 -0500
Move symbolic pixbuf recoloring code
This function is better off next to the other
symbolic png code in gdkpixbufutils.c.
gtk/gdkpixbufutilsprivate.h | 6 ++
gtk/gtkicontheme.c | 134 +++++++-------------------------------------
gtk/tools/gdkpixbufutils.c | 93 ++++++++++++++++++++++++++++++
3 files changed, 119 insertions(+), 114 deletions(-)
---
diff --git a/gtk/gdkpixbufutilsprivate.h b/gtk/gdkpixbufutilsprivate.h
index bd6125ea52..d68d315df7 100644
--- a/gtk/gdkpixbufutilsprivate.h
+++ b/gtk/gdkpixbufutilsprivate.h
@@ -52,6 +52,12 @@ GdkPixbuf *_gdk_pixbuf_new_from_resource_scaled (const char *resource_path,
double scale,
GError **error);
+GdkPixbuf *gtk_color_symbolic_pixbuf (GdkPixbuf *symbolic,
+
const GdkRGBA *fg_color,
+ const GdkRGBA *success_color,
+ const GdkRGBA *warning_color,
+ const GdkRGBA *error_color);
+
GdkPixbuf *gtk_make_symbolic_pixbuf_from_data (const char *data,
gsize len,
int width,
diff --git a/gtk/gtkicontheme.c b/gtk/gtkicontheme.c
index 07743959b1..2baf09134c 100644
--- a/gtk/gtkicontheme.c
+++ b/gtk/gtkicontheme.c
@@ -3562,115 +3562,6 @@ gtk_icon_info_load_icon_finish (GtkIconInfo *icon_info,
return gtk_icon_info_load_icon (icon_info, error);
}
-#define MAX_RGB_STRING_LENGTH (3 + 1 + ((3 + 1) * 3) + 1 + 1)
-static inline void
-rgba_to_string_noalpha (const GdkRGBA *rgba,
- char *buff)
-{
- /* gdk_rgba_to_string inlined in here for the alpha == 1 case,
- * and g_strdup_printf replaced with g_snprintf */
- g_snprintf (buff,
- MAX_RGB_STRING_LENGTH,
- "rgb(%d,%d,%d)",
- (int)(0.5 + CLAMP (rgba->red, 0., 1.) * 255.),
- (int)(0.5 + CLAMP (rgba->green, 0., 1.) * 255.),
- (int)(0.5 + CLAMP (rgba->blue, 0., 1.) * 255.));
-}
-
-static void
-rgba_to_pixel(const GdkRGBA *rgba,
- guint8 pixel[4])
-{
- pixel[0] = rgba->red * 255;
- pixel[1] = rgba->green * 255;
- pixel[2] = rgba->blue * 255;
- pixel[3] = 255;
-}
-
-static GdkPixbuf *
-gtk_icon_theme_color_symbolic_pixbuf (GdkPixbuf *symbolic,
- const GdkRGBA *fg_color,
- const GdkRGBA *success_color,
- const GdkRGBA *warning_color,
- const GdkRGBA *error_color)
-{
- int width, height, x, y, src_stride, dst_stride;
- guchar *src_data, *dst_data;
- guchar *src_row, *dst_row;
- int alpha;
- GdkPixbuf *colored;
- guint8 fg_pixel[4], success_pixel[4], warning_pixel[4], error_pixel[4];
-
- alpha = fg_color->alpha * 255;
-
- rgba_to_pixel (fg_color, fg_pixel);
- rgba_to_pixel (success_color, success_pixel);
- rgba_to_pixel (warning_color, warning_pixel);
- rgba_to_pixel (error_color, error_pixel);
-
- width = gdk_pixbuf_get_width (symbolic);
- height = gdk_pixbuf_get_height (symbolic);
-
- colored = gdk_pixbuf_new (GDK_COLORSPACE_RGB, TRUE, 8, width, height);
-
- src_stride = gdk_pixbuf_get_rowstride (symbolic);
- src_data = gdk_pixbuf_get_pixels (symbolic);
-
- dst_data = gdk_pixbuf_get_pixels (colored);
- dst_stride = gdk_pixbuf_get_rowstride (colored);
-
- for (y = 0; y < height; y++)
- {
- src_row = src_data + src_stride * y;
- dst_row = dst_data + dst_stride * y;
- for (x = 0; x < width; x++)
- {
- guint r, g, b, a;
- int c1, c2, c3, c4;
-
- a = src_row[3];
- dst_row[3] = a * alpha / 255;
-
- if (a == 0)
- {
- dst_row[0] = 0;
- dst_row[1] = 0;
- dst_row[2] = 0;
- }
- else
- {
- c2 = src_row[0];
- c3 = src_row[1];
- c4 = src_row[2];
-
- if (c2 == 0 && c3 == 0 && c4 == 0)
- {
- dst_row[0] = fg_pixel[0];
- dst_row[1] = fg_pixel[1];
- dst_row[2] = fg_pixel[2];
- }
- else
- {
- c1 = 255 - c2 - c3 - c4;
-
- r = fg_pixel[0] * c1 + success_pixel[0] * c2 + warning_pixel[0] * c3 + error_pixel[0] *
c4;
- g = fg_pixel[1] * c1 + success_pixel[1] * c2 + warning_pixel[1] * c3 + error_pixel[1] *
c4;
- b = fg_pixel[2] * c1 + success_pixel[2] * c2 + warning_pixel[2] * c3 + error_pixel[2] *
c4;
-
- dst_row[0] = r / 255;
- dst_row[1] = g / 255;
- dst_row[2] = b / 255;
- }
- }
-
- src_row += 4;
- dst_row += 4;
- }
- }
-
- return colored;
-}
-
static GdkPixbuf *
gtk_icon_info_load_symbolic_png (GtkIconInfo *icon_info,
const GdkRGBA *fg,
@@ -3705,15 +3596,30 @@ gtk_icon_info_load_symbolic_png (GtkIconInfo *icon_info,
}
pixbuf = gdk_pixbuf_get_from_texture (icon_info->texture);
- colored = gtk_icon_theme_color_symbolic_pixbuf (pixbuf,
- fg ? fg : &fg_default,
- success_color ? success_color : &success_default,
- warning_color ? warning_color : &warning_default,
- error_color ? error_color : &error_default);
+ colored = gtk_color_symbolic_pixbuf (pixbuf,
+ fg ? fg : &fg_default,
+ success_color ? success_color : &success_default,
+ warning_color ? warning_color : &warning_default,
+ error_color ? error_color : &error_default);
g_object_unref (pixbuf);
return colored;
}
+#define MAX_RGB_STRING_LENGTH (3 + 1 + ((3 + 1) * 3) + 1 + 1)
+static inline void
+rgba_to_string_noalpha (const GdkRGBA *rgba,
+ char *buff)
+{
+ /* gdk_rgba_to_string inlined in here for the alpha == 1 case,
+ * and g_strdup_printf replaced with g_snprintf */
+ g_snprintf (buff,
+ MAX_RGB_STRING_LENGTH,
+ "rgb(%d,%d,%d)",
+ (int)(0.5 + CLAMP (rgba->red, 0., 1.) * 255.),
+ (int)(0.5 + CLAMP (rgba->green, 0., 1.) * 255.),
+ (int)(0.5 + CLAMP (rgba->blue, 0., 1.) * 255.));
+}
+
static GdkPixbuf *
gtk_icon_info_load_symbolic_svg (GtkIconInfo *icon_info,
const GdkRGBA *fg,
diff --git a/gtk/tools/gdkpixbufutils.c b/gtk/tools/gdkpixbufutils.c
index ae2684adb2..7d206f05a4 100644
--- a/gtk/tools/gdkpixbufutils.c
+++ b/gtk/tools/gdkpixbufutils.c
@@ -284,6 +284,99 @@ load_symbolic_svg (const char *escaped_file_data,
return pixbuf;
}
+static void
+rgba_to_pixel (const GdkRGBA *rgba,
+ guint8 pixel[4])
+{
+ pixel[0] = rgba->red * 255;
+ pixel[1] = rgba->green * 255;
+ pixel[2] = rgba->blue * 255;
+ pixel[3] = 255;
+}
+
+GdkPixbuf *
+gtk_color_symbolic_pixbuf (GdkPixbuf *symbolic,
+ const GdkRGBA *fg_color,
+ const GdkRGBA *success_color,
+ const GdkRGBA *warning_color,
+ const GdkRGBA *error_color)
+{
+ int width, height, x, y, src_stride, dst_stride;
+ guchar *src_data, *dst_data;
+ guchar *src_row, *dst_row;
+ int alpha;
+ GdkPixbuf *colored;
+ guint8 fg_pixel[4], success_pixel[4], warning_pixel[4], error_pixel[4];
+
+ alpha = fg_color->alpha * 255;
+
+ rgba_to_pixel (fg_color, fg_pixel);
+ rgba_to_pixel (success_color, success_pixel);
+ rgba_to_pixel (warning_color, warning_pixel);
+ rgba_to_pixel (error_color, error_pixel);
+
+ width = gdk_pixbuf_get_width (symbolic);
+ height = gdk_pixbuf_get_height (symbolic);
+
+ colored = gdk_pixbuf_new (GDK_COLORSPACE_RGB, TRUE, 8, width, height);
+
+ src_stride = gdk_pixbuf_get_rowstride (symbolic);
+ src_data = gdk_pixbuf_get_pixels (symbolic);
+
+ dst_data = gdk_pixbuf_get_pixels (colored);
+ dst_stride = gdk_pixbuf_get_rowstride (colored);
+ for (y = 0; y < height; y++)
+ {
+ src_row = src_data + src_stride * y;
+ dst_row = dst_data + dst_stride * y;
+ for (x = 0; x < width; x++)
+ {
+ guint r, g, b, a;
+ int c1, c2, c3, c4;
+
+ a = src_row[3];
+ dst_row[3] = a * alpha / 255;
+
+ if (a == 0)
+ {
+ dst_row[0] = 0;
+ dst_row[1] = 0;
+ dst_row[2] = 0;
+ }
+ else
+ {
+ c2 = src_row[0];
+ c3 = src_row[1];
+ c4 = src_row[2];
+
+ if (c2 == 0 && c3 == 0 && c4 == 0)
+ {
+ dst_row[0] = fg_pixel[0];
+ dst_row[1] = fg_pixel[1];
+ dst_row[2] = fg_pixel[2];
+ }
+ else
+ {
+ c1 = 255 - c2 - c3 - c4;
+
+ r = fg_pixel[0] * c1 + success_pixel[0] * c2 + warning_pixel[0] * c3 + error_pixel[0] *
c4;
+ g = fg_pixel[1] * c1 + success_pixel[1] * c2 + warning_pixel[1] * c3 + error_pixel[1] *
c4;
+ b = fg_pixel[2] * c1 + success_pixel[2] * c2 + warning_pixel[2] * c3 + error_pixel[2] *
c4;
+
+ dst_row[0] = r / 255;
+ dst_row[1] = g / 255;
+ dst_row[2] = b / 255;
+ }
+ }
+
+ src_row += 4;
+ dst_row += 4;
+ }
+ }
+
+ return colored;
+}
+
static void
extract_plane (GdkPixbuf *src,
GdkPixbuf *dst,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]