-From 5b7ac4f5eb2b80802cfbd975cd37abcd6895fd16 Mon Sep 17 00:00:00 2001
-From: Paul Flo Williams <paul@frixxon.co.uk>
-Date: Wed, 7 Dec 2011 09:36:51 +0000
-Subject: [PATCH] Support libpng 1.5 by only using accessor functions to png
- structures
-
----
- gutils/gimagewritepng.c | 100 +++++++++++++++++++++++-----------------------
- 1 files changed, 50 insertions(+), 50 deletions(-)
-
-diff --git a/gutils/gimagewritepng.c b/gutils/gimagewritepng.c
-index 43fa097..6ed4b04 100644
---- a/gutils/gimagewritepng.c
-+++ b/gutils/gimagewritepng.c
-@@ -236,6 +236,7 @@ return(false);
- }
- } else {
- if ( base->trans!=-1 ) {
-+ trans_color = galloc(sizeof(png_color16));
- trans_color->red = COLOR_RED(base->trans);
- trans_color->green = COLOR_GREEN(base->trans);
- trans_color->blue = COLOR_BLUE(base->trans);
-@@ -258,6 +259,7 @@ return(false);
- _png_write_end(png_ptr, info_ptr);
-
- if ( trans_alpha!=NULL ) gfree(trans_alpha);
-+ if ( trans_color!=NULL ) gfree(trans_color);
- if ( palette!=NULL ) gfree(palette);
- _png_destroy_write_struct(&png_ptr, &info_ptr);
- gfree(rows);
-@@ -296,7 +298,7 @@ static void user_error_fn(png_structp png_ptr, png_const_charp error_msg) {
- #if (PNG_LIBPNG_VER < 10500)
- longjmp(png_ptr->jmpbuf,1);
- #else
-- _png_longjmp (png_ptr, 1);
-+ png_longjmp (png_ptr, 1);
- #endif
- }
-
-@@ -310,6 +312,12 @@ int GImageWrite_Png(GImage *gi, FILE *fp, int progressive) {
- png_infop info_ptr;
- png_byte **rows;
- int i;
-+ int bit_depth;
-+ int color_type;
-+ int num_palette;
-+ png_bytep trans_alpha = NULL;
-+ png_color_16p trans_color = NULL;
-+ png_colorp palette = NULL;
-
- png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING,
- (void *)NULL, user_error_fn, user_warning_fn);
-@@ -336,65 +344,60 @@ return(false);
-
- png_init_io(png_ptr, fp);
-
-- info_ptr->width = base->width;
-- info_ptr->height = base->height;
-- info_ptr->bit_depth = 8;
-- info_ptr->valid = 0;
-- info_ptr->interlace_type = progressive;
-- if ( base->trans!=-1 ) {
-- info_ptr->num_trans = 1;
-- info_ptr->valid |= PNG_INFO_tRNS;
-+ bit_depth = 8;
-+ num_palette = base->clut==NULL?2:base->clut->clut_len;
-+ if ( base->image_type==it_index || base->image_type==it_bitmap ) {
-+ color_type = PNG_COLOR_TYPE_PALETTE;
-+ if ( num_palette<=2 )
-+ bit_depth=1;
-+ else if ( num_palette<=4 )
-+ bit_depth=2;
-+ else if ( num_palette<=16 )
-+ bit_depth=4;
-+ } else {
-+ color_type = PNG_COLOR_TYPE_RGB;
-+ if ( base->image_type == it_rgba )
-+ color_type = PNG_COLOR_TYPE_RGB_ALPHA;
- }
-+
-+ png_set_IHDR(png_ptr, info_ptr, base->width, base->height,
-+ bit_depth, color_type, progressive,
-+ PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);
- if ( base->image_type==it_index || base->image_type==it_bitmap ) {
-- info_ptr->color_type = PNG_COLOR_TYPE_PALETTE;
-- info_ptr->valid |= PNG_INFO_PLTE;
-- info_ptr->num_palette = base->clut==NULL?2:base->clut->clut_len;
-- info_ptr->palette = (png_color *) galloc(info_ptr->num_palette*sizeof(png_color));
-+ palette = (png_color *) galloc(num_palette*sizeof(png_color));
- if ( base->clut==NULL ) {
-- info_ptr->palette[0].red = info_ptr->palette[0].green = info_ptr->palette[0].blue = 0;
-- info_ptr->palette[1].red = info_ptr->palette[1].green = info_ptr->palette[1].blue = 0xff;
-+ palette[0].red = palette[0].green = palette[0].blue = 0;
-+ palette[1].red = palette[1].green = palette[1].blue = 0xff;
- } else {
-- for ( i=0; i<info_ptr->num_palette; ++i ) {
-+ for ( i=0; i<num_palette; ++i ) {
- long col = base->clut->clut[i];
-- info_ptr->palette[i].red = COLOR_RED(col);
-- info_ptr->palette[i].green = COLOR_GREEN(col);
-- info_ptr->palette[i].blue = COLOR_BLUE(col);
-+ palette[i].red = COLOR_RED(col);
-+ palette[i].green = COLOR_GREEN(col);
-+ palette[i].blue = COLOR_BLUE(col);
- }
- }
-- if ( info_ptr->num_palette<=2 )
-- info_ptr->bit_depth=1;
-- else if ( info_ptr->num_palette<=4 )
-- info_ptr->bit_depth=2;
-- else if ( info_ptr->num_palette<=16 )
-- info_ptr->bit_depth=4;
-- if ( info_ptr->num_palette<=16 )
-+ png_set_PLTE(png_ptr, info_ptr, palette, num_palette);
-+ if ( num_palette<=16 )
- png_set_packing(png_ptr);
-+
- if ( base->trans!=-1 ) {
--#if ( PNG_LIBPNG_VER_MAJOR > 1 || PNG_LIBPNG_VER_MINOR > 2 )
-- info_ptr->trans_alpha = galloc(1);
-- info_ptr->trans_alpha[0] = base->trans;
--#else
-- info_ptr->trans = galloc(1);
-- info_ptr->trans[0] = base->trans;
--#endif
-+ trans_alpha = galloc(1);
-+ trans_alpha[0] = base->trans;
- }
- } else {
-- info_ptr->color_type = PNG_COLOR_TYPE_RGB;
- if ( base->trans!=-1 ) {
--#if ( PNG_LIBPNG_VER_MAJOR > 1 || PNG_LIBPNG_VER_MINOR > 2 )
-- info_ptr->trans_color.red = COLOR_RED(base->trans);
-- info_ptr->trans_color.green = COLOR_GREEN(base->trans);
-- info_ptr->trans_color.blue = COLOR_BLUE(base->trans);
--#else
-- info_ptr->trans_values.red = COLOR_RED(base->trans);
-- info_ptr->trans_values.green = COLOR_GREEN(base->trans);
-- info_ptr->trans_values.blue = COLOR_BLUE(base->trans);
--#endif
-+ trans_color = galloc(sizeof(png_color_16));
-+ trans_color->red = COLOR_RED(base->trans);
-+ trans_color->green = COLOR_GREEN(base->trans);
-+ trans_color->blue = COLOR_BLUE(base->trans);
- }
- }
-+ if ( base->trans!=-1 ) {
-+ png_set_tRNS(png_ptr, info_ptr, trans_alpha, 1, trans_color);
-+ }
- png_write_info(png_ptr, info_ptr);
-
-- if (info_ptr->color_type == PNG_COLOR_TYPE_RGB)
-+ if (color_type == PNG_COLOR_TYPE_RGB)
- png_set_filler(png_ptr, '\0', PNG_FILLER_BEFORE);
-
- rows = galloc(base->height*sizeof(png_byte *));
-@@ -405,12 +408,9 @@ return(false);
-
- png_write_end(png_ptr, info_ptr);
-
--#if ( PNG_LIBPNG_VER_MAJOR > 1 || PNG_LIBPNG_VER_MINOR > 2 )
-- if ( info_ptr->trans_alpha!=NULL ) gfree(info_ptr->trans_alpha);
--#else
-- if ( info_ptr->trans!=NULL ) gfree(info_ptr->trans);
--#endif
-- if ( info_ptr->palette!=NULL ) gfree(info_ptr->palette);
-+ if ( trans_alpha!=NULL ) gfree(trans_alpha);
-+ if ( trans_color!=NULL ) gfree(trans_color);
-+ if ( palette!=NULL ) gfree(palette);
- png_destroy_write_struct(&png_ptr, &info_ptr);
- gfree(rows);
- return( 1 );
---
-1.7.7.3
-
---- fontforge-20110222/configure.in~ 2012-02-11 18:18:03.000000000 +0100
-+++ fontforge-20110222/configure.in 2012-02-11 18:25:25.604323722 +0100
-@@ -721,6 +721,9 @@
- if test "$ac_cv_lib_png14_png_create_read_struct" = "yes"; then
- STATIC_LIBS="$STATIC_LIBS -lpng14 -lz"
- fi
-+ if test "$ac_cv_lib_png15_png_create_read_struct" = "yes"; then
-+ STATIC_LIBS="$STATIC_LIBS -lpng15 -lz"
-+ fi
- if test "$ac_cv_lib_tiff_TIFFOpen" = "yes"; then
- STATIC_LIBS="$STATIC_LIBS -ltiff"
- fi