changeset: 5431:6c3a695f54f5
user: Aidan Kehoe <kehoea(a)parhasard.net>
date: Mon Mar 14 21:04:45 2011 +0000
files: src/ChangeLog src/glyphs-eimage.c
description:
Update png_instantiate () to work with more recent versions of libpng.
2011-03-14 Aidan Kehoe <kehoea(a)parhasard.net>
* glyphs-eimage.c (png_instantiate):
Update the PNG handling code to work with versions of the library
where the png_info structure is no longer visible. Thank you for
the report, Robert Delius Royar.
diff -r 6f10ac29bf40 -r 6c3a695f54f5 src/ChangeLog
--- a/src/ChangeLog Sat Mar 12 13:11:31 2011 +0000
+++ b/src/ChangeLog Mon Mar 14 21:04:45 2011 +0000
@@ -1,3 +1,10 @@
+2011-03-14 Aidan Kehoe <kehoea(a)parhasard.net>
+
+ * glyphs-eimage.c (png_instantiate):
+ Update the PNG handling code to work with versions of the library
+ where the png_info structure is no longer visible. Thank you for
+ the report, Robert Delius Royar.
+
2011-03-12 Aidan Kehoe <kehoea(a)parhasard.net>
* event-stream.c (Fdispatch_event):
diff -r 6f10ac29bf40 -r 6c3a695f54f5 src/glyphs-eimage.c
--- a/src/glyphs-eimage.c Sat Mar 12 13:11:31 2011 +0000
+++ b/src/glyphs-eimage.c Mon Mar 14 21:04:45 2011 +0000
@@ -982,8 +982,8 @@
int y, padding;
Binbyte **row_pointers;
UINT_64_BIT pixels_sq;
- height = info_ptr->height;
- width = info_ptr->width;
+ height = png_get_image_height (png_ptr, info_ptr);
+ width = png_get_image_width (png_ptr, info_ptr);
pixels_sq = (UINT_64_BIT) width * (UINT_64_BIT) height;
if (pixels_sq > ((size_t) -1) / 3)
signal_image_error ("PNG image too large to instantiate", instantiator);
@@ -1044,30 +1044,37 @@
/* Now that we're using EImage, ask for 8bit RGB triples for any type
of image*/
- /* convert palette images to RGB */
- if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
- png_set_palette_to_rgb (png_ptr);
- /* convert grayscale images to RGB */
- else if (info_ptr->color_type == PNG_COLOR_TYPE_GRAY ||
- info_ptr->color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
- png_set_gray_to_rgb (png_ptr);
- /* pad images with depth < 8 bits */
- else if (info_ptr->bit_depth < 8)
+ switch (png_get_color_type (png_ptr, info_ptr))
{
- if (info_ptr->color_type == PNG_COLOR_TYPE_GRAY)
- png_set_expand (png_ptr);
- else
- png_set_packing (png_ptr);
+ case PNG_COLOR_TYPE_PALETTE:
+ /* convert palette images to RGB */
+ png_set_palette_to_rgb (png_ptr);
+ break;
+
+ case PNG_COLOR_TYPE_GRAY:
+ case PNG_COLOR_TYPE_GRAY_ALPHA:
+ /* convert grayscale images to RGB */
+ png_set_gray_to_rgb (png_ptr);
+ break;
+
+ default:
+ /* pad images with depth < 8 bits */
+ if (png_get_bit_depth (png_ptr, info_ptr) < 8)
+ {
+ png_set_packing (png_ptr);
+ }
+ break;
}
+
/* strip 16-bit depth files down to 8 bits */
- if (info_ptr->bit_depth == 16)
+ if (png_get_bit_depth (png_ptr, info_ptr) == 16)
png_set_strip_16 (png_ptr);
/* strip alpha channel
#### shouldn't we handle this?
first call png_read_update_info in case above transformations
have generated an alpha channel */
png_read_update_info(png_ptr, info_ptr);
- if (info_ptr->color_type & PNG_COLOR_MASK_ALPHA)
+ if (png_get_color_type (png_ptr, info_ptr) & PNG_COLOR_MASK_ALPHA)
png_set_strip_alpha (png_ptr);
png_read_image (png_ptr, row_pointers);
@@ -1077,23 +1084,25 @@
* into the glyph code, where you can get to it from lisp
* anyway. - WMP */
{
- int i;
+ int ii, num_text = 0;
+ png_textp text_ptr = NULL;
DECLARE_EISTRING (key);
DECLARE_EISTRING (text);
- for (i = 0 ; i < info_ptr->num_text ; i++)
- {
- /* How paranoid do I have to be about no trailing NULLs, and
- using (int)info_ptr->text[i].text_length, and strncpy and a temp
- string somewhere? */
- eireset(key);
- eireset(text);
- eicpy_ext(key, info_ptr->text[i].key, Qbinary);
- eicpy_ext(text, info_ptr->text[i].text, Qbinary);
+ if (png_get_text (png_ptr, info_ptr, &text_ptr, &num_text) > 0)
+ {
+ for (ii = 0 ; ii < num_text; ii++)
+ {
+ eireset (key);
+ eireset (text);
- warn_when_safe (Qpng, Qinfo, "%s - %s",
- eidata(key), eidata(text));
- }
+ eicpy_ext (key, text_ptr[ii].key, Qbinary);
+ eicpy_ext (text, text_ptr[ii].text, Qbinary);
+
+ warn_when_safe (Qpng, Qinfo, "%s - %s", eidata (key),
+ eidata (text));
+ }
+ }
}
xfree (row_pointers);
_______________________________________________
XEmacs-Patches mailing list
XEmacs-Patches(a)xemacs.org
http://lists.xemacs.org/mailman/listinfo/xemacs-patches