summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2020-12-29 21:22:16 -0500
committerMatthias Clasen <mclasen@redhat.com>2020-12-29 21:30:52 -0500
commit878b34fae3e43b342a2ceb23f873baa3a2bd5515 (patch)
tree9866a462a8edfeaeff40c790ec2581e1908d4a0c
parent5fe433418d271acf06afc1538c3289b9e2ad4478 (diff)
downloadgtk+-encode-symbolic-debug.tar.gz
gtk4-encode-symbolic: Add debug outputencode-symbolic-debug
Add a --debug option that makes this tool produce some debug output that can be helpful in tracking down why symbolic svgs are broken.
-rw-r--r--docs/reference/gtk/gtk4-encode-symbolic-svg.xml7
-rw-r--r--gtk/gdkpixbufutilsprivate.h1
-rw-r--r--gtk/tools/encodesymbolic.c11
-rw-r--r--gtk/tools/gdkpixbufutils.c17
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 @@
<listitem><para>Write png files to <replaceable>DIRECTORY</replaceable>
instead of the current working directory.</para></listitem>
</varlistentry>
+ <varlistentry>
+ <term>--debug</term>
+ <listitem><para>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.</para></listitem>
+ </varlistentry>
</variablelist>
</refsect1>
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);