summaryrefslogtreecommitdiff
path: root/gdk-pixbuf/gdk-pixbuf-csource.c
diff options
context:
space:
mode:
authorTim Janik <timj@gtk.org>2001-06-26 20:56:32 +0000
committerTim Janik <timj@src.gnome.org>2001-06-26 20:56:32 +0000
commitd4f0062f5e9c8a3fe8e4c7ba0daff28b5e76f69a (patch)
treecbec6c1be2f06e4fbe13852147b9554e02d70f83 /gdk-pixbuf/gdk-pixbuf-csource.c
parent3704749e94a270a7101dce94d498c3649ceb6c3c (diff)
downloadgtk+-d4f0062f5e9c8a3fe8e4c7ba0daff28b5e76f69a.tar.gz
use gdk_pixbuf_new_from_stream(). fixed up item factory so inlined pixbufs
Tue Jun 26 10:04:30 2001 Tim Janik <timj@gtk.org> * gtk/gtkiconfactory.c: * gtk/gtkitemfactory.c: use gdk_pixbuf_new_from_stream(). fixed up item factory so inlined pixbufs actually work. Tue Jun 26 09:48:02 2001 Tim Janik <timj@gtk.org> * Makefile.am (noinst_PROGRAMS): get rid of make-inline-pixbuf * gdk-pixbuf-data.[hc]: provide gdk_pixbuf_new_from_stream() instead from gdk_pixbuf_new_from_inline(). * gdk-pixdata.[hc]: auxillary GdkPixdata structure, public installed API for applications that need to serialize/deserialize on their own (gimp, BEAST). * gdk-pixbuf/gdk-pixbuf-csource.c: provide publically installed program that can dump images in CSource format and Pixbuf stream format. supports RLE encoding, MACRO formatting etc... invoke with --help.
Diffstat (limited to 'gdk-pixbuf/gdk-pixbuf-csource.c')
-rw-r--r--gdk-pixbuf/gdk-pixbuf-csource.c286
1 files changed, 286 insertions, 0 deletions
diff --git a/gdk-pixbuf/gdk-pixbuf-csource.c b/gdk-pixbuf/gdk-pixbuf-csource.c
new file mode 100644
index 0000000000..05bb685278
--- /dev/null
+++ b/gdk-pixbuf/gdk-pixbuf-csource.c
@@ -0,0 +1,286 @@
+/* Gdk-Pixbuf-CSource - GdkPixbuf based image CSource generator
+ * Copyright (C) 1999, 2001 Tim Janik
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+#include "config.h"
+
+#include "../gtk/gtkcompat.h" /* versioning */
+#include "gdk-pixbuf.h"
+#include "gdk-pixdata.h"
+#include <stdio.h>
+#include <string.h>
+
+
+/* --- defines --- */
+#undef G_LOG_DOMAIN
+#define G_LOG_DOMAIN "Gdk-Pixbuf-CSource"
+#define PRG_NAME "gdk-pixbuf-csource"
+#define PKG_NAME "Gtk+"
+#define PKG_HTTP_HOME "http://www.gtk.org"
+
+
+/* --- prototypes --- */
+static void parse_args (gint *argc_p,
+ gchar ***argv_p);
+static void print_blurb (FILE *bout,
+ gboolean print_help);
+
+
+/* --- variables --- */
+static guint gen_type = GDK_PIXDATA_DUMP_PIXDATA_STREAM;
+static guint gen_ctype = GDK_PIXDATA_DUMP_GTYPES | GDK_PIXDATA_DUMP_STATIC | GDK_PIXDATA_DUMP_CONST;
+static gboolean use_rle = TRUE;
+static gboolean with_decoder = FALSE;
+static gchar *image_name = "my_pixbuf";
+static gboolean build_list = FALSE;
+
+
+/* --- functions --- */
+static void
+print_csource (FILE *f_out,
+ GdkPixbuf *pixbuf)
+{
+ GdkPixdata pixdata;
+ gpointer free_me;
+ GString *gstring;
+
+ free_me = gdk_pixdata_from_pixbuf (&pixdata, pixbuf, use_rle);
+ gstring = gdk_pixdata_to_csource (&pixdata, image_name,
+ gen_type | gen_ctype |
+ (with_decoder ? GDK_PIXDATA_DUMP_RLE_DECODER : 0));
+
+ fprintf (f_out, "%s\n", gstring->str);
+
+ g_free (free_me);
+}
+
+int
+main (int argc,
+ char *argv[])
+{
+ GdkPixbuf *pixbuf;
+ GError *error = NULL;
+
+ /* initialize glib/GdkPixbuf */
+ g_type_init (0);
+
+ /* parse args and do fast exits */
+ parse_args (&argc, &argv);
+
+ if (!build_list)
+ {
+ if (argc != 2)
+ {
+ print_blurb (stderr, TRUE);
+ return 1;
+ }
+
+ pixbuf = gdk_pixbuf_new_from_file (argv[1], &error);
+ if (!pixbuf)
+ {
+ fprintf (stderr, "failed to load \"%s\": %s\n",
+ argv[1],
+ error->message);
+ g_error_free (error);
+ return 1;
+ }
+
+ print_csource (stdout, pixbuf);
+ gdk_pixbuf_unref (pixbuf);
+ }
+ else /* parse name, file pairs */
+ {
+ gchar **p = argv + 1;
+ guint j = argc - 1;
+ gboolean toggle = FALSE;
+
+ while (j--)
+ {
+ if (!toggle)
+ image_name = *p++;
+ else
+ {
+ pixbuf = gdk_pixbuf_new_from_file (*p, &error);
+ if (!pixbuf)
+ {
+ fprintf (stderr, "failed to load \"%s\": %s\n",
+ *p,
+ error->message);
+ g_error_free (error);
+ return 1;
+ }
+ print_csource (stdout, pixbuf);
+ gdk_pixbuf_unref (pixbuf);
+ p++;
+ }
+ toggle = !toggle;
+ }
+ }
+
+ return 0;
+}
+
+static void
+parse_args (gint *argc_p,
+ gchar ***argv_p)
+{
+ guint argc = *argc_p;
+ gchar **argv = *argv_p;
+ guint i, e;
+
+ for (i = 1; i < argc; i++)
+ {
+ if (strcmp ("--macros", argv[i]) == 0)
+ {
+ gen_type = GDK_PIXDATA_DUMP_MACROS;
+ argv[i] = NULL;
+ }
+ else if (strcmp ("--struct", argv[i]) == 0)
+ {
+ gen_type = GDK_PIXDATA_DUMP_PIXDATA_STRUCT;
+ argv[i] = NULL;
+ }
+ else if (strcmp ("--stream", argv[i]) == 0)
+ {
+ gen_type = GDK_PIXDATA_DUMP_PIXDATA_STREAM;
+ argv[i] = NULL;
+ }
+ else if (strcmp ("--rle", argv[i]) == 0)
+ {
+ use_rle = TRUE;
+ argv[i] = NULL;
+ }
+ else if (strcmp ("--raw", argv[i]) == 0)
+ {
+ use_rle = FALSE;
+ argv[i] = NULL;
+ }
+ else if (strcmp ("--extern", argv[i]) == 0)
+ {
+ gen_ctype &= ~GDK_PIXDATA_DUMP_STATIC;
+ argv[i] = NULL;
+ }
+ else if (strcmp ("--static", argv[i]) == 0)
+ {
+ gen_ctype |= GDK_PIXDATA_DUMP_STATIC;
+ argv[i] = NULL;
+ }
+ else if (strcmp ("--decoder", argv[i]) == 0)
+ {
+ with_decoder = TRUE;
+ argv[i] = NULL;
+ }
+ else if ((strcmp ("--name", argv[i]) == 0) ||
+ (strncmp ("--name=", argv[i], 7) == 0))
+ {
+ gchar *equal = argv[i] + 6;
+
+ if (*equal == '=')
+ image_name = g_strdup (equal + 1);
+ else if (i + 1 < argc)
+ {
+ image_name = g_strdup (argv[i + 1]);
+ argv[i] = NULL;
+ i += 1;
+ }
+ argv[i] = NULL;
+ }
+ else if (strcmp ("--build-list", argv[i]) == 0)
+ {
+ build_list = TRUE;
+ argv[i] = NULL;
+ }
+ else if (strcmp ("-h", argv[i]) == 0 ||
+ strcmp ("--help", argv[i]) == 0)
+ {
+ print_blurb (stderr, TRUE);
+ argv[i] = NULL;
+ exit (0);
+ }
+ else if (strcmp ("-v", argv[i]) == 0 ||
+ strcmp ("--version", argv[i]) == 0)
+ {
+ print_blurb (stderr, FALSE);
+ argv[i] = NULL;
+ exit (0);
+ }
+ else if (strcmp (argv[i], "--g-fatal-warnings") == 0)
+ {
+ GLogLevelFlags fatal_mask;
+
+ fatal_mask = g_log_set_always_fatal (G_LOG_FATAL_MASK);
+ fatal_mask |= G_LOG_LEVEL_WARNING | G_LOG_LEVEL_CRITICAL;
+ g_log_set_always_fatal (fatal_mask);
+
+ argv[i] = NULL;
+ }
+ }
+
+ e = 0;
+ for (i = 1; i < argc; i++)
+ {
+ if (e)
+ {
+ if (argv[i])
+ {
+ argv[e++] = argv[i];
+ argv[i] = NULL;
+ }
+ }
+ else if (!argv[i])
+ e = i;
+ }
+ if (e)
+ *argc_p = e;
+}
+
+static void
+print_blurb (FILE *bout,
+ gboolean print_help)
+{
+ if (!print_help)
+ {
+ fprintf (bout, "%s version ", PRG_NAME);
+ fprintf (bout, "%u.%u.%u", GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION);
+ fprintf (bout, "\n");
+ fprintf (bout, "%s comes with ABSOLUTELY NO WARRANTY.\n", PRG_NAME);
+ fprintf (bout, "You may redistribute copies of %s under the terms of\n", PRG_NAME);
+ fprintf (bout, "the GNU Lesser General Public License which can be found in the\n");
+ fprintf (bout, "%s source package. Sources, examples and contact\n", PKG_NAME);
+ fprintf (bout, "information are available at %s\n", PKG_HTTP_HOME);
+ }
+ else
+ {
+ fprintf (bout, "Usage: %s [options] [image]\n", PRG_NAME);
+ fprintf (bout, " %s [options] --build-list [[name image]...]\n", PRG_NAME);
+ fprintf (bout, " --stream generate pixbuf data stream\n");
+ fprintf (bout, " --struct generate GdkPixdata structure\n");
+ fprintf (bout, " --macros generate image size/pixel macros\n");
+ fprintf (bout, " --rle use one byte run-length-encoding\n");
+ fprintf (bout, " --raw provide raw image data copy\n");
+ fprintf (bout, " --extern generate extern symbols\n");
+ fprintf (bout, " --static generate static symbols\n");
+ fprintf (bout, " --decoder provide rle decoder\n");
+ fprintf (bout, " --name=identifier C macro/variable name\n");
+ fprintf (bout, " --build-list parse (name, image) pairs\n");
+ fprintf (bout, " -h, --help show this help message\n");
+ fprintf (bout, " -v, --version print version informations\n");
+ fprintf (bout, " --g-fatal-warnings make warnings fatal (abort)\n");
+ }
+}
+
+#include "x"