summaryrefslogtreecommitdiff
path: root/gdk-pixbuf
diff options
context:
space:
mode:
authorTim Janik <timj@gtk.org>2001-06-26 08:34:26 +0000
committerTim Janik <timj@src.gnome.org>2001-06-26 08:34:26 +0000
commit0b7418572ee7a8d900a315e67fcb12a56e21459b (patch)
tree0bdc0446657458a9df2a26a12f1a037a0396a476 /gdk-pixbuf
parentbf0d61a59b9e1b889ba98b36b05a90e76f64eced (diff)
downloadgtk+-0b7418572ee7a8d900a315e67fcb12a56e21459b.tar.gz
hm, second attempt. it's fight CVS time again.
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. 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.
Diffstat (limited to 'gdk-pixbuf')
-rw-r--r--gdk-pixbuf/ChangeLog16
-rw-r--r--gdk-pixbuf/Makefile.am36
-rw-r--r--gdk-pixbuf/gdk-pixbuf-data.c251
-rw-r--r--gdk-pixbuf/gdk-pixbuf-private.h10
-rw-r--r--gdk-pixbuf/gdk-pixbuf.h18
5 files changed, 50 insertions, 281 deletions
diff --git a/gdk-pixbuf/ChangeLog b/gdk-pixbuf/ChangeLog
index a024030d23..992773220d 100644
--- a/gdk-pixbuf/ChangeLog
+++ b/gdk-pixbuf/ChangeLog
@@ -1,3 +1,19 @@
+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.
+
Mon Jun 25 00:28:11 2001 Owen Taylor <otaylor@redhat.com>
* Makefile.am: Actually update timestamps, so rules don't
diff --git a/gdk-pixbuf/Makefile.am b/gdk-pixbuf/Makefile.am
index cfe6316664..374ea905a3 100644
--- a/gdk-pixbuf/Makefile.am
+++ b/gdk-pixbuf/Makefile.am
@@ -164,12 +164,15 @@ TESTS = test-gdk-pixbuf test-loaders
noinst_PROGRAMS = $(TESTS)
DEPS = libgdk_pixbuf-1.3.la
-INCLUDES = -I$(top_srcdir) -I$(top_builddir) \
+INCLUDES = @STRIP_BEGIN@ \
+ -I$(top_srcdir) -I$(top_builddir) \
-I$(top_srcdir)/gdk-pixbuf \
-I$(top_builddir)/gdk-pixbuf \
@INCLUDED_LOADER_DEFINE@ \
@GTK_DEBUG_FLAGS@ \
- @GDK_PIXBUF_DEP_CFLAGS@
+ @GDK_PIXBUF_DEP_CFLAGS@ \
+@STRIP_END@
+
AM_CPPFLAGS = "-DPIXBUF_LIBDIR=\"$(loaderdir)\"" "-DBUILT_MODULES_DIR=\"$(srcdir)/.libs\""
LDADDS = libgdk_pixbuf-1.3.la
@@ -179,12 +182,13 @@ test_loaders_LDADD = $(LDADDS)
test_loaders_SOURCES = test-loaders.c test-images.h
-bin_PROGRAMS=make-inline-pixbuf
-
-make_inline_pixbuf_SOURCES=make-inline-pixbuf.c
-
-make_inline_pixbuf_LDADD = $(LDADDS)
+#noinst_PROGRAMS=make-inline-pixbuf
+#make_inline_pixbuf_SOURCES=make-inline-pixbuf.c
+#make_inline_pixbuf_LDADD = $(LDADDS)
+bin_PROGRAMS = gdk-pixbuf-csource
+gdk_pixbuf_csource_SOURCES = gdk-pixbuf-csource.c
+gdk_pixbuf_csource_LDADD = $(LDADDS)
#
@@ -195,7 +199,7 @@ BUILT_SOURCES=gdk-pixbuf-marshal.h gdk-pixbuf-marshal.c
libgdk_pixbufincludedir = $(includedir)/gtk-2.0/gdk-pixbuf
-libgdk_pixbuf_1_3_la_SOURCES = \
+libgdk_pixbuf_1_3_la_SOURCES = @STRIP_BEGIN@ \
gdk-pixbuf-i18n.h \
gdk-pixbuf.c \
gdk-pixbuf-animation.c \
@@ -203,20 +207,26 @@ libgdk_pixbuf_1_3_la_SOURCES = \
gdk-pixbuf-io.c \
gdk-pixbuf-loader.c \
gdk-pixbuf-scale.c \
- gdk-pixbuf-util.c
+ gdk-pixbuf-util.c \
+ gdk-pixdata.c \
+@STRIP_END@
+
$(libgdk_pixbuf_1_3_la_OBJECTS): gdk-pixbuf-marshal.h gdk-pixbuf-marshal.c
-libgdk_pixbuf_1_3_la_LDFLAGS = \
+libgdk_pixbuf_1_3_la_LDFLAGS = @STRIP_BEGIN@ \
-version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) \
- @LIBTOOL_EXPORT_OPTIONS@
+ @LIBTOOL_EXPORT_OPTIONS@ \
+@STRIP_END@
+
libgdk_pixbuf_1_3_la_LIBADD = pixops/libpixops.la $(builtin_objs) $(GDK_PIXBUF_DEP_LIBS)
libgdk_pixbuf_1_3_la_DEPENDENCIES = $(builtin_objs)
-libgdk_pixbufinclude_HEADERS = \
+libgdk_pixbufinclude_HEADERS = \
gdk-pixbuf.h \
gdk-pixbuf-loader.h \
- gdk-pixbuf-features.h
+ gdk-pixbuf-features.h \
+ gdk-pixdata.h
noinst_HEADERS = \
gdk-pixbuf-io.h \
diff --git a/gdk-pixbuf/gdk-pixbuf-data.c b/gdk-pixbuf/gdk-pixbuf-data.c
index 95903b527f..15f5aa8b82 100644
--- a/gdk-pixbuf/gdk-pixbuf-data.c
+++ b/gdk-pixbuf/gdk-pixbuf-data.c
@@ -78,254 +78,3 @@ gdk_pixbuf_new_from_data (const guchar *data, GdkColorspace colorspace, gboolean
return pixbuf;
}
-
-static guint32
-read_int (const guchar **p)
-{
- guint32 num;
-
- /* Note most significant bytes are first in the byte stream */
- num =
- (*p)[3] |
- ((*p)[2] << 8) |
- ((*p)[1] << 16) |
- ((*p)[0] << 24);
-
- *p += 4;
-
- return num;
-}
-
-static gboolean
-read_bool (const guchar **p)
-{
- gboolean val = **p != 0;
-
- ++(*p);
-
- return val;
-}
-
-static GdkPixbuf*
-read_raw_inline (const guchar *data,
- gboolean copy_pixels,
- int length,
- GError **error)
-{
- GdkPixbuf *pixbuf;
- const guchar *p = data;
- guint32 rowstride, width, height, colorspace,
- n_channels, bits_per_sample;
- gboolean has_alpha;
-
- if (length >= 0 && length < 12) {
- /* Not enough buffer to hold the width/height/rowstride */
- g_set_error (error,
- GDK_PIXBUF_ERROR,
- GDK_PIXBUF_ERROR_CORRUPT_IMAGE,
- _("Image data is partially missing"));
-
- return NULL;
- }
-
- rowstride = read_int (&p);
- width = read_int (&p);
- height = read_int (&p);
-
- if (rowstride < width) {
- g_set_error (error,
- GDK_PIXBUF_ERROR,
- GDK_PIXBUF_ERROR_CORRUPT_IMAGE,
- _("Image has an incorrect pixel rowstride, perhaps the data was corrupted somehow."));
- return NULL; /* bad data from untrusted source. */
- }
-
- /* rowstride >= width, so we can trust width */
-
- length -= 12;
-
- /* There's some better way like G_MAXINT/height > rowstride
- * but I'm not sure it works, so stick to this for now.
- */
- if (((double)height) * ((double)rowstride) > (double)G_MAXINT) {
- g_set_error (error,
- GDK_PIXBUF_ERROR,
- GDK_PIXBUF_ERROR_CORRUPT_IMAGE,
- _("Image size is impossibly large, perhaps the data was corrupted somehow"));
-
- return NULL; /* overflow */
- }
-
- if (length >= 0 &&
- length < (height * rowstride + 13)) {
- /* Not enough buffer to hold the remaining header
- * information plus the data.
- */
- g_set_error (error,
- GDK_PIXBUF_ERROR,
- GDK_PIXBUF_ERROR_CORRUPT_IMAGE,
- _("Image data is partially missing, probably it was corrupted somehow."));
-
- return NULL;
- }
-
- /* Read the remaining 13 bytes of header information */
-
- has_alpha = read_bool (&p) != FALSE;
- colorspace = read_int (&p);
- n_channels = read_int (&p);
- bits_per_sample = read_int (&p);
-
- if (colorspace != GDK_COLORSPACE_RGB) {
- g_set_error (error,
- GDK_PIXBUF_ERROR,
- GDK_PIXBUF_ERROR_CORRUPT_IMAGE,
- _("Image has an unknown colorspace code (%d), perhaps the image data was corrupted"),
- colorspace);
- return NULL;
- }
-
- if (bits_per_sample != 8) {
- g_set_error (error,
- GDK_PIXBUF_ERROR,
- GDK_PIXBUF_ERROR_CORRUPT_IMAGE,
- _("Image has an improper number of bits per sample (%d), perhaps the image data was corrupted"),
- bits_per_sample);
- return NULL;
- }
-
- if (has_alpha && n_channels != 4) {
- g_set_error (error,
- GDK_PIXBUF_ERROR,
- GDK_PIXBUF_ERROR_CORRUPT_IMAGE,
- _("Image has an improper number of channels (%d), perhaps the image data was corrupted"),
- n_channels);
- return NULL;
- }
-
- if (!has_alpha && n_channels != 3) {
- g_set_error (error,
- GDK_PIXBUF_ERROR,
- GDK_PIXBUF_ERROR_CORRUPT_IMAGE,
- _("Image has an improper number of channels (%d), perhaps the image data was corrupted"),
- n_channels);
- return NULL;
- }
-
- if (copy_pixels) {
- guchar *pixels;
- gint dest_rowstride;
- gint row;
-
- pixbuf = gdk_pixbuf_new (colorspace,
- has_alpha, bits_per_sample,
- width, height);
-
- if (pixbuf == NULL) {
- g_set_error (error,
- GDK_PIXBUF_ERROR,
- GDK_PIXBUF_ERROR_INSUFFICIENT_MEMORY,
- _("Not enough memory to store a %d by %d image; try exiting some applications to free memory."),
- width, height);
- return NULL;
- }
-
- pixels = gdk_pixbuf_get_pixels (pixbuf);
- dest_rowstride = gdk_pixbuf_get_rowstride (pixbuf);
-
- for (row = 0; row < height; row++) {
- memcpy (pixels, p, rowstride);
- pixels += dest_rowstride;
- p += rowstride;
- }
- } else {
- pixbuf = gdk_pixbuf_new_from_data (p,
- colorspace,
- has_alpha,
- bits_per_sample,
- width, height,
- rowstride,
- NULL, NULL);
- }
-
- return pixbuf;
-}
-
-/**
- * gdk_pixbuf_new_from_inline:
- * @inline_pixbuf: An inlined GdkPixbuf
- * @copy_pixels: whether to copy the pixels out of the inline data, or to use them in-place
- * @length: length of the inline data
- * @error: return location for error
- *
- * Create a #GdkPixbuf from a custom format invented to store pixbuf
- * data in C program code. This library comes with a program called
- * "make-inline-pixbuf" that can write out a variable definition
- * containing an inlined pixbuf. This is useful if you want to ship a
- * program with images, but don't want to depend on any external
- * files.
- *
- * The inline data format contains the pixels in #GdkPixbuf's native
- * format. Since the inline pixbuf is read-only static data, you
- * don't need to copy it unless you intend to write to it.
- *
- * If you create a pixbuf from const inline data compiled into your
- * program, it's probably safe to ignore errors, since things will
- * always succeed. For non-const inline data, you could get out of
- * memory. For untrusted inline data located at runtime, you could
- * have corrupt inline data in addition.
- *
- * Return value: A newly-created #GdkPixbuf structure with a reference count of
- * 1, or NULL If error is set.
- **/
-GdkPixbuf*
-gdk_pixbuf_new_from_inline (const guchar *inline_pixbuf,
- gboolean copy_pixels,
- int length,
- GError **error)
-{
- const guchar *p;
- GdkPixbuf *pixbuf;
- GdkPixbufInlineFormat format;
-
- if (length >= 0 && length < 8) {
- /* not enough bytes to contain even the magic number
- * and format code.
- */
- g_set_error (error,
- GDK_PIXBUF_ERROR,
- GDK_PIXBUF_ERROR_CORRUPT_IMAGE,
- _("Image contained no data."));
- return NULL;
- }
-
- p = inline_pixbuf;
-
- if (read_int (&p) != GDK_PIXBUF_INLINE_MAGIC_NUMBER) {
- g_set_error (error,
- GDK_PIXBUF_ERROR,
- GDK_PIXBUF_ERROR_CORRUPT_IMAGE,
- _("Image isn't in the correct format (inline GdkPixbuf format)"));
- return NULL;
- }
-
- format = read_int (&p);
-
- switch (format)
- {
- case GDK_PIXBUF_INLINE_RAW:
- pixbuf = read_raw_inline (p, copy_pixels, length - 8, error);
- break;
-
- default:
- g_set_error (error,
- GDK_PIXBUF_ERROR,
- GDK_PIXBUF_ERROR_UNKNOWN_TYPE,
- _("This version of the software is unable to read images with type code %d"),
- format);
- return NULL;
- }
-
- return pixbuf;
-}
-
diff --git a/gdk-pixbuf/gdk-pixbuf-private.h b/gdk-pixbuf/gdk-pixbuf-private.h
index 0bdae8715d..4393cbe336 100644
--- a/gdk-pixbuf/gdk-pixbuf-private.h
+++ b/gdk-pixbuf/gdk-pixbuf-private.h
@@ -130,16 +130,6 @@ struct _GdkPixbufAnimationIterClass {
-#define GDK_PIXBUF_INLINE_MAGIC_NUMBER 0x47646B50 /* 'GdkP' */
-
-typedef enum
-{
- GDK_PIXBUF_INLINE_RAW = 0,
- GDK_PIXBUF_INLINE_RLE = 1
-} GdkPixbufInlineFormat;
-
-
-
GdkPixbufAnimation* gdk_pixbuf_non_anim_new (GdkPixbuf *pixbuf);
#endif
diff --git a/gdk-pixbuf/gdk-pixbuf.h b/gdk-pixbuf/gdk-pixbuf.h
index 32ab3a8f46..2a32c2fa2b 100644
--- a/gdk-pixbuf/gdk-pixbuf.h
+++ b/gdk-pixbuf/gdk-pixbuf.h
@@ -75,6 +75,12 @@ typedef void (* GdkPixbufDestroyNotify) (guchar *pixels, gpointer data);
#define GDK_PIXBUF_ERROR gdk_pixbuf_error_quark ()
typedef enum {
+ /* stream header corrupt */
+ GDK_PIXBUF_ERROR_HEADER_CORRUPT,
+ /* stream pixel data corrupt */
+ GDK_PIXBUF_ERROR_PIXEL_CORRUPT,
+ /* stream header corrupt */
+ GDK_PIXBUF_ERROR_UNKNOWN_FORMAT,
/* image data hosed */
GDK_PIXBUF_ERROR_CORRUPT_IMAGE,
/* no mem to load image */
@@ -142,13 +148,11 @@ GdkPixbuf *gdk_pixbuf_new_from_data (const guchar *data,
gpointer destroy_fn_data);
GdkPixbuf *gdk_pixbuf_new_from_xpm_data (const char **data);
-
-/* Read an inline pixbuf */
-GdkPixbuf *gdk_pixbuf_new_from_inline (const guchar *inline_pixbuf,
- gboolean copy_pixels,
- int length,
- GError **error);
-
+GdkPixbuf* gdk_pixbuf_new_from_stream (gint stream_length,
+ const guint8 *stream,
+ gboolean copy_pixels,
+ GError **error);
+
/* Mutations */
void gdk_pixbuf_fill (GdkPixbuf *pixbuf,
guint32 pixel);