From 878b34fae3e43b342a2ceb23f873baa3a2bd5515 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Tue, 29 Dec 2020 21:22:16 -0500 Subject: gtk4-encode-symbolic: Add debug output Add a --debug option that makes this tool produce some debug output that can be helpful in tracking down why symbolic svgs are broken. --- docs/reference/gtk/gtk4-encode-symbolic-svg.xml | 7 +++++++ gtk/gdkpixbufutilsprivate.h | 1 + gtk/tools/encodesymbolic.c | 11 +++++++---- gtk/tools/gdkpixbufutils.c | 17 ++++++++++++++--- 4 files changed, 29 insertions(+), 7 deletions(-) diff --git a/docs/reference/gtk/gtk4-encode-symbolic-svg.xml b/docs/reference/gtk/gtk4-encode-symbolic-svg.xml index 230f4af6d7..330795bc92 100644 --- a/docs/reference/gtk/gtk4-encode-symbolic-svg.xml +++ b/docs/reference/gtk/gtk4-encode-symbolic-svg.xml @@ -61,6 +61,13 @@ Write png files to DIRECTORY instead of the current working directory. + + --debug + Generate png files of the various channels during + the conversion. If these files are not monochrome green, they + are often helpful in pinpointing the problematic parts of + the source svg. + diff --git a/gtk/gdkpixbufutilsprivate.h b/gtk/gdkpixbufutilsprivate.h index 73e1c79e96..703a550c38 100644 --- a/gtk/gdkpixbufutilsprivate.h +++ b/gtk/gdkpixbufutilsprivate.h @@ -63,6 +63,7 @@ GdkPixbuf *gtk_make_symbolic_pixbuf_from_data (const char *data, int width, int height, double scale, + const char *debug_output_to, GError **error); GdkPixbuf *gtk_make_symbolic_pixbuf_from_file (GFile *file, int width, diff --git a/gtk/tools/encodesymbolic.c b/gtk/tools/encodesymbolic.c index 3bca80100d..6f4a44f573 100644 --- a/gtk/tools/encodesymbolic.c +++ b/gtk/tools/encodesymbolic.c @@ -35,8 +35,11 @@ static char *output_dir = NULL; +static gboolean debug; + static GOptionEntry args[] = { { "output", 'o', 0, G_OPTION_ARG_FILENAME, &output_dir, N_("Output to this directory instead of cwd"), NULL }, + { "debug", 0, 0, G_OPTION_ARG_NONE, &debug, N_("Generate debug output") }, { NULL } }; @@ -65,7 +68,7 @@ main (int argc, char **argv) g_set_prgname ("gtk-encode-symbolic-svg"); - context = g_option_context_new ("PATH WIDTHxHEIGHT"); + context = g_option_context_new ("[OPTION…] PATH WIDTHxHEIGHT"); g_option_context_add_main_entries (context, args, GETTEXT_PACKAGE); g_option_context_parse (context, &argc, &argv, NULL); @@ -104,7 +107,9 @@ main (int argc, char **argv) return 1; } - symbolic = gtk_make_symbolic_pixbuf_from_data (data, len, width, height, 1.0, &error); + basename = g_path_get_basename (path); + + symbolic = gtk_make_symbolic_pixbuf_from_data (data, len, width, height, 1.0, debug ? basename : NULL, &error); if (symbolic == NULL) { g_printerr (_("Can’t load file: %s\n"), error->message); @@ -113,8 +118,6 @@ main (int argc, char **argv) g_free (data); - basename = g_path_get_basename (path); - dot = strrchr (basename, '.'); if (dot != NULL) *dot = 0; diff --git a/gtk/tools/gdkpixbufutils.c b/gtk/tools/gdkpixbufutils.c index 09802f5ef8..66a4cc46de 100644 --- a/gtk/tools/gdkpixbufutils.c +++ b/gtk/tools/gdkpixbufutils.c @@ -429,6 +429,7 @@ gtk_make_symbolic_pixbuf_from_data (const char *file_data, int width, int height, double scale, + const char *debug_output_basename, GError **error) { @@ -491,6 +492,16 @@ gtk_make_symbolic_pixbuf_from_data (const char *file_data, if (loaded == NULL) goto out; + if (debug_output_basename) + { + char *filename; + + filename = g_strdup_printf ("%s.debug%d.png", debug_output_basename, plane); + g_print ("Writing %s\n", filename); + gdk_pixbuf_save (loaded, filename, "png", NULL, NULL); + g_free (filename); + } + if (pixbuf == NULL) { pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, TRUE, 8, @@ -534,7 +545,7 @@ gtk_make_symbolic_pixbuf_from_resource (const char *path, data = g_bytes_get_data (bytes, &size); - pixbuf = gtk_make_symbolic_pixbuf_from_data (data, size, width, height, scale, error); + pixbuf = gtk_make_symbolic_pixbuf_from_data (data, size, width, height, scale, NULL, error); g_bytes_unref (bytes); @@ -555,7 +566,7 @@ gtk_make_symbolic_pixbuf_from_path (const char *path, if (!g_file_get_contents (path, &data, &size, error)) return NULL; - pixbuf = gtk_make_symbolic_pixbuf_from_data (data, size, width, height, scale, error); + pixbuf = gtk_make_symbolic_pixbuf_from_data (data, size, width, height, scale, NULL, error); g_free (data); @@ -576,7 +587,7 @@ gtk_make_symbolic_pixbuf_from_file (GFile *file, if (!g_file_load_contents (file, NULL, &data, &size, NULL, error)) return NULL; - pixbuf = gtk_make_symbolic_pixbuf_from_data (data, size, width, height, scale, error); + pixbuf = gtk_make_symbolic_pixbuf_from_data (data, size, width, height, scale, NULL, error); g_free (data); -- cgit v1.2.1