the Fink project is an effort to port
popular Unix programs to Mac OS X
Package: synfig
Version: 0.63.04
Revision: 2
Source: mirror:sourceforge:synfig/synfig-%v.tar.gz
Source-MD5: baa0df3a51d101600771e0d45fcc7d22
PatchFile: %n.patch
PatchFile-MD5: faa6b4914166043a779c47efa87ca3e4
Maintainer: Hisashi T Fujinaka
Depends: <<
%N-shlibs (=%v-%r),
glib2-shlibs (>=2.22.0-1),
glibmm2.4-shlibs (>=2.22.0-1),
libgettext8-shlibs,
libsigc++2-shlibs (>=2.2.4.2-2),
libxml++2-shlibs (>=2.26.1-2),
libxml2-shlibs (>=2.6.32-1)
<<
BuildDepends: <<
autoconf2.6,
automake1.11,
fink (>= 0.24.12),
etl (>= 0.04.14-2),
fontconfig2-dev (>= 2.8.0-4),
freetype219 (>= 2.3.12-1),
glib2-dev (>=2.22.0-1),
glibmm2.4-dev (>=2.22.0-1),
graphicsmagick-dev,
libgettext8-dev,
libiconv-dev (>=1.12-3),
libjpeg8,
libmng2,
libpng15,
libsigc++2 (>=2.2.4.2-2),
libtool2,
libxml++2 (>=2.26.1-2),
libxml2 (>=2.6.32-1),
openexr-dev,
pkgconfig (>= 0.23-2)
<<
# GCC: 4.0
Description: Vector-based 2D animation renderer
Homepage: http://synfig.org/
License: GPL
PatchScript: <<
%{default_script}
perl -pi -e 's/-lMagick/-lGraphicsMagick/' configure
perl -ni -e 'print unless /mod_libavcodec/' src/modules/synfig_modules.cfg.in
#
# # These two fix for the split of libMagick in recent releases - AdamW
sed -i -e 's.Magick,OptimizeImageTransparency.MagickCore,OptimizeImageTransparency.g' configure
# sed -i -e 's,MagickLib::,MagickCore::,g' src/modules/mod_magickpp/trgt_magickpp.cpp
#
# perl -pi -e 's,(-lMagick\+\+),\1 -L/usr/X11R6/lib,' configure
#
# # configure checks for Magick++ but uses it to decide to use
# # symbols in MagickCore directly as well
perl -pi -e 's/-lMagick\+\+/-lGraphicsMagick++ -lGraphicsMagick/' configure.ac
#
# # directly uses libxml, not just c++ wrappers
perl -pi -e 's/(libxml\+\+-2.6)/\1 libxml2/g' configure
<<
SetCPPFLAGS: -I%p/include/GraphicsMagick -I%p/lib/fontconfig2/include -I%p/include/libxml2
SetLDFLAGS: -L%p/lib/fontconfig2/lib -lxml2
ConfigureParams: --without-libavcodec PKG_CONFIG_PATH="%p/lib/fontconfig2/lib/pkgconfig:$PKG_CONFIG_PATH"
CompileScript: <<
#!/bin/sh -ev
libtoolize --ltdl --copy -f
autoreconf -if
./configure %c
make # -j1
<<
InstallScript: <<
# find %d -name "*.la" -exec perl -pi.bak -e 's| .*root-%f.* | |g' {} \;
make install prefix=%i
mkdir -p %i/share/doc/%n/examples/walk
install -p -m644 examples/*.sifz %i/share/doc/%n/examples
install -p -m644 examples/walk/*.lst %i/share/doc/%n/examples/walk
install -p -m644 examples/walk/*.jpg %i/share/doc/%n/examples/walk
install -p -m644 examples/walk/*.sifz %i/share/doc/%n/examples/walk
<<
SplitOff: <<
Package: %N-shlibs
Depends: <<
fontconfig2-shlibs (>= 2.8.0-4),
freetype219-shlibs (>= 2.3.12-1),
glib2-shlibs (>= 2.22.0-1),
glibmm2.4-shlibs (>= 2.22.0-1),
graphicsmagick,
graphicsmagick-shlibs,
libgettext8-shlibs,
libjpeg8-shlibs,
libmng2-shlibs,
libpng15-shlibs,
libsigc++2-shlibs (>=2.2.3-1),
libxml++2-shlibs (>= 2.26.1-2),
libxml2-shlibs (>= 2.6.32-1)
<<
Files: lib/libsynfig.0.dylib lib/synfig
# move share/locale from %N? (rename with libmajorversion?)
DocFiles: AUTHORS COPYING INSTALL NEWS README
Shlibs: %p/lib/libsynfig.0.dylib 1.0.0 %n (>= 0.63.00-1)
<<
SplitOff2: <<
Package: %N-dev
Depends: %N-shlibs (= %v-%r)
Replaces: %N (<< 0.62.02-1), %N-shlibs (<< 0.62.00-1)
Files: <<
bin/synfig-config
include
lib
<<
DocFiles: AUTHORS COPYING INSTALL NEWS README
BuildDependsOnly: true
<<
DocFiles: AUTHORS COPYING INSTALL NEWS README
DescDetail: <<
synfig is a vector based 2D animation renderer. It is designed to be capable of
producing feature-film quality animation.
This package contains the command-line renderer, the GUI animation editor is in
synfigstudio.
<<
DescPackaging: <<
Disable libavcodec because it's a newer version in fink
incompatible with synfig. See:
http://synfig.org/forums/viewtopic.php?f=13&t=5
Older libavcoded has no .pc so synfig doesn't even find it.
Remove libavcodec from config file (list of active mods)
because it won't exist (silences runtime warnings). Why isn't
this list auto-generated during pkg build process?
Doesn't use Magick's native flag detector:
Need to pass -I globally so that configure finds it.
Main lib is now MagickCore not Magick.
Links magick libs and also uses magick's "convert" program.
Major shuffling of package layout for pangocairo and shlibs
policy as of 0.61.08-1001, and then again as of 0.61.09-3
<<
diff -Naur synfig-0.63.03.orig/src/modules/mod_magickpp/trgt_magickpp.cpp synfig-0.63.03/src/modules/mod_magickpp/trgt_magickpp.cpp
--- synfig-0.63.03.orig/src/modules/mod_magickpp/trgt_magickpp.cpp 2011-12-13 23:07:26.000000000 -0800
+++ synfig-0.63.03/src/modules/mod_magickpp/trgt_magickpp.cpp 2011-12-13 23:07:56.000000000 -0800
@@ -66,7 +66,7 @@
try
{
- current = CloneImage(iter->image(), 0, 0, Magick::MagickTrue, &exceptionInfo);
+ current = CloneImage(iter->image(), 0, 0, MagickTrue, &exceptionInfo);
if (!first) first = current;
@@ -101,7 +101,7 @@
image.fileName(filename);
try
{
- SetImageInfo(image.imageInfo(),Magick::MagickTrue,&exceptionInfo);
+ SetImageInfo(image.imageInfo(),MagickTrue,&exceptionInfo);
can_adjoin = image.adjoin();
}
catch(Magick::Warning warning) {
diff -Naur synfig-0.63.03.orig/src/modules/mod_png/mptr_png.cpp.orig synfig-0.63.03/src/modules/mod_png/mptr_png.cpp.orig
--- synfig-0.63.03.orig/src/modules/mod_png/mptr_png.cpp.orig 1969-12-31 16:00:00.000000000 -0800
+++ synfig-0.63.03/src/modules/mod_png/mptr_png.cpp.orig 2011-12-05 09:36:08.000000000 -0800
@@ -0,0 +1,440 @@
+/* === S Y N F I G ========================================================= */
+/*! \file mptr_png.cpp
+** \brief ppm Target Module
+**
+** $Id$
+**
+** \legal
+** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
+** Copyright (c) 2007 Chris Moore
+**
+** This package is free software; you can redistribute it and/or
+** modify it under the terms of the GNU General Public License as
+** published by the Free Software Foundation; either version 2 of
+** the License, or (at your option) any later version.
+**
+** This package 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
+** General Public License for more details.
+** \endlegal
+**
+** === N O T E S ===========================================================
+**
+** ========================================================================= */
+
+/*!
+** \todo Support 16 bit PNG files
+** \todo Support GAMMA correction
+** \todo Fix memory leaks
+*/
+
+/* === H E A D E R S ======================================================= */
+
+#ifdef USING_PCH
+# include "pch.h"
+#else
+#ifdef HAVE_CONFIG_H
+# include
+#endif
+
+#include "mptr_png.h"
+#include
+#include
+#include
+
+
+#include
+#include
+#include
+#endif
+
+/* === M A C R O S ========================================================= */
+
+using namespace synfig;
+using namespace std;
+using namespace etl;
+
+#define PNG_CHECK_BYTES 8
+
+/* === G L O B A L S ======================================================= */
+
+SYNFIG_IMPORTER_INIT(png_mptr);
+SYNFIG_IMPORTER_SET_NAME(png_mptr,"png");
+SYNFIG_IMPORTER_SET_EXT(png_mptr,"png");
+SYNFIG_IMPORTER_SET_VERSION(png_mptr,"0.1");
+SYNFIG_IMPORTER_SET_CVS_ID(png_mptr,"$Id$");
+
+/* === M E T H O D S ======================================================= */
+
+void
+png_mptr::png_out_error(png_struct */*png_data*/,const char *msg)
+{
+ //png_mptr *me=(png_mptr*)png_data->error_ptr;
+ synfig::error(strprintf("png_mptr: error: %s",msg));
+ //me->ready=false;
+}
+
+void
+png_mptr::png_out_warning(png_struct */*png_data*/,const char *msg)
+{
+ //png_mptr *me=(png_mptr*)png_data->error_ptr;
+ synfig::warning(strprintf("png_mptr: warning: %s",msg));
+ //me->ready=false;
+}
+
+int
+png_mptr::read_chunk_callback(png_struct */*png_data*/, png_unknown_chunkp /*chunk*/)
+{
+ /* The unknown chunk structure contains your
+ chunk data: */
+ //png_byte name[5];
+ //png_byte *data;
+ //png_size_t size;
+ /* Note that libpng has already taken care of
+ the CRC handling */
+
+ /* put your code here. Return one of the
+ following: */
+
+ //return (-n); /* chunk had an error */
+ return (0); /* did not recognize */
+ //return (n); /* success */
+}
+
+png_mptr::png_mptr(const char *file_name)
+{
+ filename=file_name;
+
+ /* Open the file pointer */
+ FILE *file = fopen(file_name, "rb");
+ if (!file)
+ {
+ //! \todo THROW SOMETHING
+ throw strprintf("Unable to physically open %s",file_name);
+ return;
+ }
+
+
+ /* Make sure we are dealing with a PNG format file */
+ png_byte header[PNG_CHECK_BYTES];
+ fread(header, 1, PNG_CHECK_BYTES, file);
+ bool is_png = !png_sig_cmp(header, 0, PNG_CHECK_BYTES);
+ if (!is_png)
+ {
+ //! \todo THROW SOMETHING
+ throw strprintf("This (\"%s\") doesn't appear to be a PNG file",file_name);
+ return;
+ }
+
+
+ png_structp png_ptr = png_create_read_struct
+ (PNG_LIBPNG_VER_STRING, (png_voidp)this,
+ &png_mptr::png_out_error, &png_mptr::png_out_warning);
+ if (!png_ptr)
+ {
+ //! \todo THROW SOMETHING
+ throw String("error on importer construction, *WRITEME*3");
+ return;
+ }
+
+ png_infop info_ptr = png_create_info_struct(png_ptr);
+ if (!info_ptr)
+ {
+ png_destroy_read_struct(&png_ptr,
+ (png_infopp)NULL, (png_infopp)NULL);
+ //! \todo THROW SOMETHING
+ throw String("error on importer construction, *WRITEME*4");
+ return;
+ }
+
+ png_infop end_info = png_create_info_struct(png_ptr);
+ if (!end_info)
+ {
+ png_destroy_read_struct(&png_ptr, &info_ptr,
+ (png_infopp)NULL);
+ //! \todo THROW SOMETHING
+ throw String("error on importer construction, *WRITEME*4");
+ return;
+ }
+
+
+
+ png_init_io(png_ptr, file);
+ png_set_sig_bytes(png_ptr,PNG_CHECK_BYTES);
+
+ png_read_info(png_ptr, info_ptr);
+
+ int bit_depth,color_type,interlace_type, compression_type,filter_method;
+ png_uint_32 width,height;
+
+ png_get_IHDR(png_ptr, info_ptr, &width, &height,
+ &bit_depth, &color_type, &interlace_type,
+ &compression_type, &filter_method);
+
+ if (bit_depth == 16)
+ png_set_strip_16(png_ptr);
+
+ if (bit_depth < 8)
+ png_set_packing(png_ptr);
+
+ double fgamma;
+ if (png_get_gAMA(png_ptr, info_ptr, &fgamma))
+ {
+ synfig::info("PNG: Image gamma is %f",fgamma);
+ png_set_gamma(png_ptr, gamma().get_gamma(), fgamma);
+ }
+
+
+ /*
+ if (setjmp(png_jmpbuf(png_ptr)))
+ {
+ synfig::error("Unable to setup longjump");
+ png_destroy_read_struct(&png_ptr, &info_ptr, &end_info);
+ fclose(file);
+ //! \todo THROW SOMETHING
+ throw String("error on importer construction, *WRITEME*5");
+ return;
+ }
+ */
+
+ png_set_read_user_chunk_fn(png_ptr, this, &png_mptr::read_chunk_callback);
+
+ // man libpng tells me:
+ // You must use png_transforms and not call any
+ // png_set_transform() functions when you use png_read_png().
+ // but we used png_set_gamma(), which may be why we were seeing a crash at the end
+ // png_read_png(png_ptr, info_ptr, PNG_TRANSFORM_PACKING|PNG_TRANSFORM_STRIP_16, NULL);
+
+ png_read_update_info(png_ptr, info_ptr);
+ png_uint_32 rowbytes = png_get_rowbytes(png_ptr, info_ptr);
+
+ // allocate buffer to read image data into
+ png_bytep *row_pointers=new png_bytep[height];
+ png_byte *data = new png_byte[rowbytes*height];
+ for (png_uint_32 i = 0; i < height; i++)
+ row_pointers[i] = &(data[rowbytes*i]);
+
+ png_read_image(png_ptr, row_pointers);
+
+ png_uint_32 x, y;
+ surface_buffer.set_wh(width,height);
+
+ switch(color_type)
+ {
+ case PNG_COLOR_TYPE_RGB:
+ for(y=0;y
+ float r=gamma().r_U8_to_F32((unsigned char)row_pointers[y][x*3+0]);
+ float g=gamma().g_U8_to_F32((unsigned char)row_pointers[y][x*3+1]);
+ float b=gamma().b_U8_to_F32((unsigned char)row_pointers[y][x*3+2]);
+ surface_buffer[y][x]=Color(
+ r,
+ g,
+ b,
+ 1.0
+ );
+/*
+ surface_buffer[y][x]=Color(
+ (float)(unsigned char)row_pointers[y][x*3+0]*(1.0/255.0),
+ (float)(unsigned char)row_pointers[y][x*3+1]*(1.0/255.0),
+ (float)(unsigned char)row_pointers[y][x*3+2]*(1.0/255.0),
+ 1.0
+ );
+*/
+ }
+ break;
+
+ case PNG_COLOR_TYPE_RGB_ALPHA:
+ for(y=0;y
+ float r=gamma().r_U8_to_F32((unsigned char)row_pointers[y][x*4+0]);
+ float g=gamma().g_U8_to_F32((unsigned char)row_pointers[y][x*4+1]);
+ float b=gamma().b_U8_to_F32((unsigned char)row_pointers[y][x*4+2]);
+ surface_buffer[y][x]=Color(
+ r,
+ g,
+ b,
+ (float)(unsigned char)row_pointers[y][x*4+3]*(1.0/255.0)
+ );
+ /*
+ surface_buffer[y][x]=Color(
+ (float)(unsigned char)row_pointers[y][x*4+0]*(1.0/255.0),
+ (float)(unsigned char)row_pointers[y][x*4+1]*(1.0/255.0),
+ (float)(unsigned char)row_pointers[y][x*4+2]*(1.0/255.0),
+ (float)(unsigned char)row_pointers[y][x*4+3]*(1.0/255.0)
+ );
+ */
+ }
+ break;
+
+ case PNG_COLOR_TYPE_GRAY:
+ for(y=0;y
+ float gray=gamma().g_U8_to_F32((unsigned char)row_pointers[y][x]);
+ //float gray=(float)(unsigned char)row_pointers[y][x]*(1.0/255.0);
+ surface_buffer[y][x]=Color(
+ gray,
+ gray,
+ gray,
+ 1.0
+ );
+ }
+ break;
+
+ case PNG_COLOR_TYPE_GRAY_ALPHA:
+ for(y=0;y
+ float gray=gamma().g_U8_to_F32((unsigned char)row_pointers[y][x*2]);
+// float gray=(float)(unsigned char)row_pointers[y][x*2]*(1.0/255.0);
+ surface_buffer[y][x]=Color(
+ gray,
+ gray,
+ gray,
+ (float)(unsigned char)row_pointers[y][x*2+1]*(1.0/255.0)
+ );
+ }
+ break;
+
+ case PNG_COLOR_TYPE_PALETTE:
+ for(y=0;y
+ png_colorp palette;
+ int num_palette;
+ png_get_PLTE(png_ptr, info_ptr, &palette, &num_palette);
+ float r=gamma().r_U8_to_F32((unsigned char)palette[row_pointers[y][x]].red);
+ float g=gamma().g_U8_to_F32((unsigned char)palette[row_pointers[y][x]].green);
+ float b=gamma().b_U8_to_F32((unsigned char)palette[row_pointers[y][x]].blue);
+ float a=1.0;
+ if(png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS))
+ {
+ png_bytep trans_alpha;
+ int num_trans;
+ png_color_16p trans_color;
+ png_get_tRNS(png_ptr, info_ptr, &trans_alpha, &num_trans, &trans_color);
+ a = (float)(unsigned char)trans_alpha[row_pointers[y][x]]*(1.0/255.0);
+ }
+ surface_buffer[y][x]=Color(
+ r,
+ g,
+ b,
+ a
+ );
+ }
+ break;
+ default:
+ synfig::error("png_mptr: error: Unsupported color type");
+ //! \todo THROW SOMETHING
+ throw String("error on importer construction, *WRITEME*6");
+ return;
+ }
+
+ png_read_end(png_ptr, end_info);
+ png_destroy_read_struct(&png_ptr, &info_ptr, &end_info);
+ fclose(file);
+
+ delete [] row_pointers;
+ delete [] data;
+
+ trim = false;
+
+ //if (getenv("SYNFIG_DISABLE_CROP_IMPORTED_IMAGES"))
+ return;
+
+ switch(color_type)
+ {
+ case PNG_COLOR_TYPE_RGB_ALPHA:
+ case PNG_COLOR_TYPE_GRAY_ALPHA:
+ case PNG_COLOR_TYPE_PALETTE:
+ for(y=0;y
+ for(x=0;x
+ if (x != width) break;
+ }
+
+ if (y != height)
+ {
+#define BORDER 1 // don't chop off all the transparent space - leave a border this many pixels wide for the interpolation
+
+ png_uint_32 min_x, min_y, max_x, max_y;
+ if (y>BORDER) min_y = y-BORDER; else min_y = 0;
+
+ for(y=height-1;y>0;y--)
+ {
+ for(x=0;x
+ if (x != width) break;
+ }
+ max_y = std::min(y+BORDER,height-1);
+
+ for(x=0;x
+ for(y=0;y
+ if (y != height) break;
+ }
+ if (x>BORDER) min_x = x-BORDER; else min_x = 0;
+
+ for(x=width-1;x>0;x--)
+ {
+ for(y=0;y
+ if (y != height) break;
+ }
+ max_x = std::min(x+BORDER,width-1);
+
+ if (min_x != 0 || max_x != width-1 ||
+ min_y != 0 || max_y != height-1)
+ {
+ trim = true;
+ orig_width = width;
+ orig_height = height;
+ trimmed_x = min_x;
+ trimmed_y = min_y;
+
+ width=max_x-min_x+1;
+ height=max_y-min_y+1;
+ synfig::Surface tmp_buffer;
+ tmp_buffer.set_wh(width,height);
+ for(y=0;y
+ surface_buffer = tmp_buffer;
+ }
+ }
+ }
+}
+
+png_mptr::~png_mptr()
+{
+}
+
+bool
+png_mptr::get_frame(synfig::Surface &surface, const synfig::RendDesc &/*renddesc*/, Time, synfig::ProgressCallback */*cb*/)
+{
+ //assert(0); // shouldn't be called?
+ surface=surface_buffer;
+ return true;
+}
+
+bool
+png_mptr::get_frame(synfig::Surface &surface, const synfig::RendDesc &renddesc, Time,
+ bool &trimmed, unsigned int &width, unsigned int &height, unsigned int &top, unsigned int &left,
+ synfig::ProgressCallback */*cb*/)
+{
+ surface=surface_buffer;
+ if ((trimmed = trim))
+ {
+ width = orig_width;
+ height = orig_height;
+ top = trimmed_y;
+ left = trimmed_x;
+ }
+ return true;
+}
diff -Naur synfig-0.63.03.orig/src/synfig/canvas.h synfig-0.63.03/src/synfig/canvas.h
--- synfig-0.63.03.orig/src/synfig/canvas.h 2011-12-13 23:07:26.000000000 -0800
+++ synfig-0.63.03/src/synfig/canvas.h 2011-12-13 23:08:00.000000000 -0800
@@ -119,6 +119,13 @@
class Context;
class GUID;
+class Canvas;
+
+typedef etl::handle