Merge branch 'master' into nikitakit_master
authorNikita Kitaev <nikitakit@gmail.com>
Thu, 15 Apr 2010 23:23:23 +0000 (16:23 -0700)
committerNikita Kitaev <nikitakit@gmail.com>
Thu, 15 Apr 2010 23:23:23 +0000 (16:23 -0700)
autobuild/synfigstudio-linux-build.sh [new file with mode: 0644]
synfig-core/src/modules/mod_svg/svg_parser.cpp
synfig-core/src/modules/mod_svg/svg_parser.h
synfig-core/src/synfig/layer_motionblur.cpp
synfig-core/src/synfig/layer_motionblur.h
synfig-studio/src/gtkmm/mod_palette/dock_paledit.cpp
synfig-studio/src/gtkmm/mod_palette/dock_paledit.h
synfig-studio/src/gtkmm/widget_color.cpp
synfig-studio/src/gtkmm/widget_color.h
synfig-studio/synfigstudio-cph-monitor

diff --git a/autobuild/synfigstudio-linux-build.sh b/autobuild/synfigstudio-linux-build.sh
new file mode 100644 (file)
index 0000000..4eb951f
--- /dev/null
@@ -0,0 +1,865 @@
+#!/bin/bash
+#
+# SynfigStudio build script
+# Copyright (c) 2008-2010 Konstantin Dmitriev
+#
+# 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.
+
+# = Usage: =
+#    ./synfigstudio-linux-build.sh [mode] [revision]
+#
+# where:
+#   - [mode] is full|quick|package
+#   - [revision] - commit id, branch or tag (package mode only)
+#
+# To build packages it's required to run this script as root.
+#
+# = Examples: =
+#
+# == Standart mode ==
+# Configure and (re)build synfigstudio into your homedir:
+#    ./synfigstudio-linux-build.sh
+# Configure and make clean build synfigstudio into your homedir:
+#    ./synfigstudio-linux-build.sh full
+# Quick rebuild of synfig (without configure) into your homedir:
+#    ./synfigstudio-linux-build.sh quick
+#
+# == Package mode ==
+# Build package from "master" branch:
+#    ./synfigstudio-linux-build.sh package
+# Build package from "genete_setup_dialog" branch
+#    ./synfigstudio-linux-build.sh package origin/genete_setup_dialog
+# Build package from commit with "synfigstudio-0.62.00" tag
+#    ./synfigstudio-linux-build.sh package synfigstudio-0.62.00
+#
+# = TODO =
+# - debuginfo packages
+
+RELEASE=1
+PREFIX=$HOME/synfig/
+
+PACKAGES_PATH=$HOME/synfig-packages            # path where to write packages files
+PACKAGES_BUILDROOT=/tmp/synfig-buildroot       # path of for build infrastructure
+
+# full = clean, configure, make
+# standart = configure, make
+# quick = make
+# package = chroot, clean, configure, make
+MODE='standart'
+OPENGL=0
+DEBUG=0
+BREED=
+
+LIBSIGCPP=2.0.17
+GLEW=1.5.1
+CAIROMM=1.2.4
+IMAGEMAGICK=6.4.0
+#GTKMM=2.10.9
+GTKMM=2.8.12
+FTGL=2.1.2
+FREEGLUT=2.4.0
+GTKGLEXT=1.2.0
+GTKGLEXTMM=1.2.0
+#LIBXMLPP=2.14.0
+LIBXMLPP=2.20.0
+#LIBXMLPP=2.23.2
+GLIBMM=2.12.8
+#GLIBMM=2.18.1
+GITVERSION=1.7.0   # git version for chroot environment
+
+SYNFIG_REPO_DIR=''
+WORKDIR_IS_REPO=0
+
+# Allow overriding PREFIX and/or BREED
+if [ -f "./synfigstudio-build.conf" ] ; then
+       . "./synfigstudio-build.conf"
+fi
+
+set -e
+
+if (test "$2"); then
+       SELECTEDREVISION=$2
+else
+       SELECTEDREVISION=origin/master
+fi
+
+mklibsigcpp()
+{
+if [ ! -d ${PREFIX}/include/sigc++-2.0 ]; then
+       pushd /source
+       [ ! -d libsigc++-${LIBSIGCPP} ] && tar -xjf libsigc++-${LIBSIGCPP}.tar.bz2
+       cd libsigc++-${LIBSIGCPP}
+       #make clean || true
+       ./configure --prefix=${PREFIX}/ --includedir=${PREFIX}/include --disable-static --enable-shared 
+       make -j2 
+       make install
+       cd ..
+       popd
+fi
+}
+
+mkglibmm()
+{
+if [ ! -d ${PREFIX}/include/glibmm-2.4 ]; then
+       pushd /source
+       [ ! -d glibmm-${GLIBMM} ] && tar -xjf glibmm-${GLIBMM}.tar.bz2
+       cd glibmm-${GLIBMM}
+       #[[ $DOCLEAN == 1 ]] && make clean || true
+       ./configure --prefix=${PREFIX} --includedir=${PREFIX}/include --disable-static --enable-shared --disable-fulldocs 
+       make -j2 
+       make install
+       cd ..
+       popd
+fi
+}
+
+mklibxmlpp()
+{
+if [ ! -d ${PREFIX}/include/libxml++-2.6 ]; then
+       pushd /source
+       [ ! -d libxml++-${LIBXMLPP} ] && tar -xjf libxml++-${LIBXMLPP}.tar.bz2
+       cd libxml++-${LIBXMLPP}
+       #[[ $DOCLEAN == 1 ]] && make clean || true
+       ./configure --prefix=${PREFIX} --includedir=${PREFIX}/include --disable-static --enable-shared 
+       make -j2 
+       make install
+       cd ..
+       popd
+fi
+}
+
+mkimagemagick()
+{
+if [ ! -d ${PREFIX}/include/ImageMagick ]; then
+       pushd /source
+       [ ! -d ImageMagick-${IMAGEMAGICK} ] && tar -xjf ImageMagick-${IMAGEMAGICK}-10.tar.bz2 && cd ImageMagick-${IMAGEMAGICK} && patch -p1 < ../ImageMagick-6.4.0-multilib.patch && cd ..
+       cd ImageMagick-${IMAGEMAGICK}
+       #[[ $DOCLEAN == 1 ]] && make clean || true
+       ./configure --prefix=${PREFIX} --includedir=${PREFIX}/include --disable-static --enable-shared \
+               --with-modules \
+               --without-perl \
+               --without-x \
+               --with-threads \
+               --with-magick_plus_plus \
+               --without-gslib \
+               --without-wmf \
+               --without-lcms \
+               --without-rsvg \
+               --without-xml \
+               --without-windows-font-dir \
+               --without-dps \
+               --without-djvu \
+               --without-fpx \
+               --without-jbig \
+               --without-jp2 \
+               --without-tiff \
+               --without-fontconfig \
+               --without-freetype \
+               --without-png \
+               --without-gvc \
+               --without-openexr
+       sed -i 's|^hardcode_libdir_flag_spec=.*|hardcode_libdir_flag_spec=""|g' libtool
+       sed -i 's|^runpath_var=LD_RUN_PATH|runpath_var=DIE_RPATH_DIE|g' libtool
+       make -j2 
+       make install
+       cd ..
+       popd
+fi
+}
+
+mkglew()
+{
+[ ! -d glew-${GLEW} ] && tar -xzf glew-${GLEW}.tar.gz && cd glew && patch -p1 < glew-${GLEW}-makefile.patch && cd ..
+       pushd /source
+       cd glew
+       #[[ $DOCLEAN == 1 ]] && make clean || true
+       sed -i -e 's/\r//g' config/config.guess
+       make -j2
+       make install GLEW_DEST=${PREFIX} libdir=/lib bindir=/bin  includedir=/include
+       cd ..
+       popd
+}
+
+mkcairomm()
+{
+if [ ! -d ${PREFIX}/include/cairomm-1.0 ]; then
+       pushd /source
+       [ ! -d cairomm-${CAIROMM} ] && tar -xzf cairomm-${CAIROMM}.tar.gz
+       cd cairomm-${CAIROMM}
+       #[[ $DOCLEAN == 1 ]] && make clean || true
+       ./configure --prefix=${PREFIX} --includedir=${PREFIX}/include --disable-static --enable-shared --enable-docs=no
+       make -j2 
+       make install
+       cd ..
+fi
+}
+
+mkgtkmm()
+{
+if [ ! -d ${PREFIX}/include/gtkmm-2.4 ]; then
+       pushd /source
+       [ ! -d gtkmm-${GTKMM} ] && tar -xjf gtkmm-${GTKMM}.tar.bz2
+       cd gtkmm-${GTKMM}
+       #[[ $DOCLEAN == 1 ]] && make clean || true
+       ./configure --prefix=${PREFIX} --includedir=${PREFIX}/include --disable-static --enable-shared --disable-examples --disable-demos --disable-docs
+       make -j2
+       make install
+       cd ..
+       popd
+fi
+}
+
+mkfreeglut()
+{
+       pushd /source
+       [ ! -d freeglut-${FREEGLUT} ] && tar -xzf freeglut-${FREEGLUT}.tar.gz
+       cd freeglut-${FREEGLUT}
+       #[[ $DOCLEAN == 1 ]] && make clean || true
+       ./configure --prefix=${PREFIX} --includedir=${PREFIX}/include --disable-static  --disable-warnings --enable-shared 
+       make -j2
+       make install
+       cd ..
+       popd
+}
+
+mkftgl()
+{
+       pushd /source
+       if [ ! -d ftgl-${FTGL} ]; then
+               tar -xjf ftgl-${FTGL}.tar.bz2
+               cd FTGL
+               patch -p1 -b < ftgl-2.1.2-destdir.patch
+               patch -p1 -b < ftgl-2.1.2-Glyph-g++_41.patch
+               patch -p1 -b < ftgl-2.1.2-pc_req.patch
+               patch -p1 -b < ftgl-2.1.2-rpath_FTGLDemo.patch
+               patch -p1 -b < ftgl-2.1.2-ttf_font.patch
+               sed -i.fixed_version -e 's|2.0.5|%{version}|g' unix/configure.ac unix/configure
+               cd ..
+       fi
+       cd FTGL
+       cd unix
+       #[[ $DOCLEAN == 1 ]] && make clean || true
+       ./configure --prefix=${PREFIX} --includedir=${PREFIX}/include --disable-static --enable-shared --with-gl-inc=${PREFIX}/include  --with-gl-lib=${PREFIX}/lib  --with-glut-inc=${PREFIX}/include  --with-glut-lib=${PREFIX}/lib  --with-x 
+       make all -j2
+       make install
+       cd ..
+       popd
+}
+
+mkgtkglext()
+{
+       pushd /source
+       [ ! -d gtkglext-${GTKGLEXT} ] && tar -xjf gtkglext-${GTKGLEXT}.tar.bz2
+       cd gtkglext-${GTKGLEXT}
+       #[[ $DOCLEAN == 1 ]] && make clean || true
+       ./configure --prefix=${PREFIX} --includedir=${PREFIX}/include  --disable-gtk-doc --disable-static  --enable-shared 
+       make -j2 
+       make install
+       cd ..
+       popd
+}
+
+mkgtkglextmm()
+{
+       pushd /source
+       [ ! -d gtkglextmm-${GTKGLEXTMM} ] && tar -xjf gtkglextmm-${GTKGLEXTMM}.tar.bz2 && cd gtkglextmm-${GTKGLEXTMM} && patch -p1 < gtkglextmm-1.2.0-aclocal.diff && cd ..
+       cd gtkglextmm-${GTKGLEXTMM}
+       #[[ $DOCLEAN == 1 ]] && make clean || true
+       ./configure --prefix=${PREFIX} --includedir=${PREFIX}/include  --disable-dependency-tracking --disable-static  --enable-shared 
+       make -j2 
+       make install
+       popd
+cd ..
+}
+
+mkgit()
+{
+       pushd /source
+       [ ! -d git-${GITVERSION} ] && tar -xjf git-${GITVERSION}.tar.bz2
+       cd git-${GITVERSION}
+       ./configure
+       make -j2
+       make install
+       cd ..
+       popd
+}
+
+mkETL()
+{
+if [ -d ${SYNFIG_REPO_DIR}/ETL/trunk ]; then
+       pushd ${SYNFIG_REPO_DIR}/ETL/trunk
+else
+       pushd ${SYNFIG_REPO_DIR}/ETL
+fi
+
+
+if ( [[ $MODE == 'package' ]] || [[ $MODE == 'full' ]] ); then
+       echo "Cleaning source tree..."
+       make clean || true
+fi
+
+
+if [[ $MODE != 'quick' ]]; then
+       echo "Going to configure..."
+       rm -f aclocal.m4
+       autoreconf --install --force
+       bash ./configure --prefix=${PREFIX} --includedir=${PREFIX}/include $DEBUG 
+fi
+
+make -j2
+make install
+
+popd
+}
+
+mksynfig()
+{
+if [ -d ${SYNFIG_REPO_DIR}/synfig-core/trunk ]; then
+       pushd ${SYNFIG_REPO_DIR}/synfig-core/trunk
+else
+       pushd ${SYNFIG_REPO_DIR}/synfig-core
+fi
+
+export CXXFLAGS=-I${PREFIX}/include/ImageMagick
+
+( [[ $MODE == 'package' ]] || [[ $MODE == 'full' ]] ) && make clean || true
+
+if [[ $MODE != 'quick' ]]; then
+       libtoolize --ltdl --copy --force
+       sed -i 's/^AC_CONFIG_SUBDIRS(libltdl)$/m4_ifdef([_AC_SEEN_TAG(libltdl)], [], [AC_CONFIG_SUBDIRS(libltdl)])/' configure.ac || true
+       sed -i 's/^# AC_CONFIG_SUBDIRS(libltdl)$/m4_ifdef([_AC_SEEN_TAG(libltdl)], [], [AC_CONFIG_SUBDIRS(libltdl)])/' configure.ac || true
+       autoreconf --install --force
+       bash ./configure --prefix=${PREFIX} --includedir=${PREFIX}/include --disable-static --enable-shared --with-magickpp --without-libavcodec $DEBUG  
+fi
+
+#It looks like mod_libavcodec causes segfault on synfig-core when rendering to png.
+#Tested on: ffmpeg-0.4.9-0.52.20080908.fc10.x86_64.
+
+#if [[ $GIT == 1 ]]; then
+#      export CFLAGS=-I/opt/synfig/include/GL/
+#      export LDFLAGS=-L/opt/synfig/lib/
+#else
+#      export CFLAGS=''
+#      export LDFLAGS=''
+#fi
+
+make -j2
+make install
+
+popd
+}
+
+mksynfigstudio()
+{
+if [ -d ${SYNFIG_REPO_DIR}/synfig-studio/trunk ]; then
+       pushd ${SYNFIG_REPO_DIR}/synfig-studio/trunk
+else
+       pushd ${SYNFIG_REPO_DIR}/synfig-studio
+fi
+
+( [[ $MODE == 'package' ]] || [[ $MODE == 'full' ]] ) && make clean || true
+
+if [[ $MODE != 'quick' ]]; then
+       autoreconf --install --force
+       bash ./configure --prefix=${PREFIX} --includedir=${PREFIX}/include --disable-static --enable-shared $DEBUG
+fi
+
+make -j2
+make install
+
+for n in AUTHORS COPYING NEWS README
+do
+       cp -f $n ${PREFIX}
+done
+
+if [ -e synfigstudio-cph-monitor ]; then
+       cp -f synfigstudio-cph-monitor ${PREFIX}/bin/
+       chmod a+x ${PREFIX}/bin/synfigstudio-cph-monitor
+fi
+
+popd
+}
+
+mkpack()
+{
+       [ -d /packages ] || mkdir /packages
+       
+       #== tar.bz2 ==
+       TBZPREFIX=/tmp/synfigstudio-${VERSION}-${REVISION}.$BREED.$RELEASE.${ARCH}
+       rm -rf $TBZPREFIX
+       mkdir -p $TBZPREFIX
+       cp -r  ${PREFIX}/* $TBZPREFIX
+       
+       if [[ $DEBUG == '--enable-debug' ]]; then
+               GDB="which gdb && xterm -e  gdb -ex run -ex quit \$PREFIX/bin/synfig \$@ || "
+       else
+               GDB=''
+       fi
+       
+       #binaries
+       cat > $TBZPREFIX/synfig <<EOF
+#!/bin/sh
+
+PREFIX=\`dirname \$0\`
+PREFIX=\`cd \$PREFIX; pwd\`
+export LD_LIBRARY_PATH=\${PREFIX}/lib:\$LD_LIBRARY_PATH
+export SYNFIG_ROOT=\${PREFIX}/
+export SYNFIG_MODULE_LIST=\${PREFIX}/etc/synfig_modules.cfg
+
+$GDB\$PREFIX/bin/synfig \$@
+EOF
+       if [[ $DEBUG == '--enable-debug' ]]; then
+               GDB="which gdb && xterm -e  gdb -ex run -ex quit \$PREFIX/bin/synfigstudio \$@ || "
+       else
+               GDB=''
+       fi
+       cat > $TBZPREFIX/synfigstudio <<EOF
+#!/bin/sh
+
+PREFIX=\`dirname \$0\`
+PREFIX=\`cd \$PREFIX; pwd\`
+export LD_LIBRARY_PATH=\${PREFIX}/lib:\$LD_LIBRARY_PATH
+export SYNFIG_ROOT=\${PREFIX}/
+export SYNFIG_MODULE_LIST=\${PREFIX}/etc/synfig_modules.cfg
+
+$GDB\$PREFIX/bin/synfigstudio \$@
+EOF
+       chmod a+x $TBZPREFIX/synfig
+       chmod a+x $TBZPREFIX/synfigstudio
+       
+       #cleaning devel stuff
+       mkdir $TBZPREFIX/bin.tmp
+       mv $TBZPREFIX/bin/synfig $TBZPREFIX/bin.tmp/synfig
+       mv $TBZPREFIX/bin/synfigstudio $TBZPREFIX/bin.tmp/synfigstudio
+       rm -rf $TBZPREFIX/bin
+       mv $TBZPREFIX/bin.tmp $TBZPREFIX/bin
+       
+       rm -f $TBZPREFIX/lib/*.la
+       rm -f $TBZPREFIX/lib/*.a
+       rm -rf $TBZPREFIX/include
+       rm -rf $TBZPREFIX/lib/gdkmm-2.4
+       rm -rf $TBZPREFIX/lib/libxml++-2.6
+       rm -rf $TBZPREFIX/lib/glibmm-2.4
+       rm -rf $TBZPREFIX/lib/gtkmm-2.4
+       rm -rf $TBZPREFIX/lib/pkgconfig
+       rm -rf $TBZPREFIX/lib/sigc++-2.0
+       rm -rf $TBZPREFIX/share/doc
+       rm -rf $TBZPREFIX/share/aclocal
+       rm -rf $TBZPREFIX/share/ImageMagick-6.4.0
+       rm -rf $TBZPREFIX/share/man
+       
+       rm -f /packages/synfigstudio-${VERSION}-${REVISION}.$BREED.$RELEASE.${ARCH}.tar.bz2
+       pushd $TBZPREFIX/../
+       tar cjf /packages/synfigstudio-${VERSION}-${REVISION}.$BREED.$RELEASE.${ARCH}.tar.bz2 synfigstudio-${VERSION}-${REVISION}.$BREED.$RELEASE.${ARCH}
+       popd
+       rm -rf $TBZPREFIX
+       
+       #== rpm ==
+       RPMREVISION=`echo $REVISION.$BREED | sed s/-/_/`
+    cat > synfigstudio.spec << EOF
+%define __spec_install_post /bin/true
+
+Name:           synfigstudio
+Version:        ${VERSION}
+Release:        ${RPMREVISION}.${RELEASE}
+Summary:        Film-Quality 2D Vector Animation package
+Group:          Applications/Graphics
+License:        GPL
+URL:            http://www.synfig.org/
+BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
+Obsoletes:       synfig ETL
+AutoReqProv: no
+
+
+%description
+Synfig Animation Studio is a powerful, industrial-strength vector-based
+2D animation software, designed from the ground-up for producing
+feature-film quality animation with fewer people and resources.
+It is designed to be capable of producing feature-film quality
+animation. It eliminates the need for tweening, preventing the
+need to hand-draw each frame. Synfig features spatial and temporal
+resolution independence (sharp and smoothat any resolution or framerate),
+high dynamic range images, and a flexible plugin system.
+
+
+%prep
+
+
+%build
+
+%install
+rm -rf \$RPM_BUILD_ROOT
+mkdir -p \$RPM_BUILD_ROOT/${PREFIX}
+cp -r  ${PREFIX}/* \$RPM_BUILD_ROOT/${PREFIX}
+mkdir -p \$RPM_BUILD_ROOT/usr/share
+mv \$RPM_BUILD_ROOT/${PREFIX}/share/applications \$RPM_BUILD_ROOT/usr/share
+mv \$RPM_BUILD_ROOT/${PREFIX}/share/icons \$RPM_BUILD_ROOT/usr/share
+mkdir -p \$RPM_BUILD_ROOT/usr/share/mime-info
+ln -sf ${PREFIX}/share/mime-info/synfigstudio.keys \$RPM_BUILD_ROOT/usr/share/mime-info/synfigstudio.keys
+ln -sf ${PREFIX}/share/mime-info/synfigstudio.mime \$RPM_BUILD_ROOT/usr/share/mime-info/synfigstudio.mime
+mkdir -p \$RPM_BUILD_ROOT/usr/share/pixmaps
+ln -sf ${PREFIX}/share/pixmaps/sif_icon.png \$RPM_BUILD_ROOT/usr/share/pixmaps/sif_icon.png
+ln -sf ${PREFIX}/share/pixmaps/synfig_icon.png \$RPM_BUILD_ROOT/usr/share/pixmaps/synfig_icon.png
+mkdir -p \$RPM_BUILD_ROOT/usr/bin
+mv \$RPM_BUILD_ROOT/${PREFIX}/bin/synfig \$RPM_BUILD_ROOT/usr/bin/
+mv \$RPM_BUILD_ROOT/${PREFIX}/bin/synfigstudio \$RPM_BUILD_ROOT/usr/bin/
+
+if [ -e \$RPM_BUILD_ROOT/${PREFIX}/bin/synfigstudio-cph-monitor ]; then
+mv \$RPM_BUILD_ROOT/${PREFIX}/bin/synfigstudio-cph-monitor \$RPM_BUILD_ROOT/usr/bin/
+cat > \$RPM_BUILD_ROOT/usr/share/applications/synfigstudio-cph-monitor.desktop << EOD
+[Desktop Entry]
+Encoding=UTF-8
+Name=Synfig Studio CPH monitor
+Comment=This application collecting statistics about synfig crashes
+Exec=synfigstudio-cph-monitor
+Icon=terminal.png
+Terminal=true
+Type=Application
+Categories=Graphics;Application;
+X-Desktop-File-Install-Version=0.15
+EOD
+fi
+
+#cleaning devel stuff
+rm -f \$RPM_BUILD_ROOT/${PREFIX}/lib/*.la
+rm -f \$RPM_BUILD_ROOT/${PREFIX}/lib/*.a
+rm -rf \$RPM_BUILD_ROOT/${PREFIX}/bin
+rm -rf \$RPM_BUILD_ROOT/${PREFIX}/include
+rm -rf \$RPM_BUILD_ROOT/${PREFIX}/lib/gdkmm-2.4
+rm -rf \$RPM_BUILD_ROOT/${PREFIX}/lib/libxml++-2.6
+rm -rf \$RPM_BUILD_ROOT/${PREFIX}/lib/glibmm-2.4
+rm -rf \$RPM_BUILD_ROOT/${PREFIX}/lib/gtkmm-2.4
+rm -rf \$RPM_BUILD_ROOT/${PREFIX}/lib/pkgconfig
+rm -rf \$RPM_BUILD_ROOT/${PREFIX}/lib/sigc++-2.0
+rm -rf \$RPM_BUILD_ROOT/${PREFIX}/share/doc
+rm -rf \$RPM_BUILD_ROOT/${PREFIX}/share/aclocal
+rm -rf \$RPM_BUILD_ROOT/${PREFIX}/share/ImageMagick-6.4.0
+rm -rf \$RPM_BUILD_ROOT/${PREFIX}/share/man
+
+
+%clean
+rm -rf \$RPM_BUILD_ROOT
+
+%post
+
+%postun
+
+%files
+%defattr(-,root,root,-)
+$PREFIX
+/usr/share/*
+/usr/bin/*
+
+%changelog
+* Sat Mar 21 2009 Konstantin Dmitriev <ksee.zelgadis@gmail.com> - 0.61.09-2354.morevnapackage.1
+- Update to SVN2354
+- Include ImageMagick-c++
+
+* Wed Jan 14 2009 Konstantin Dmitriev <ksee.zelgadis@gmail.com> - 0.61.09-2316.morevnapackage.1
+- First release
+
+EOF
+    rpmbuild -bb synfigstudio.spec
+    
+    #cp /usr/src/redhat/RPMS/$ARCH/synfigstudio-${VERSION}-${RPMREVISION}.$RELEASE.${ARCH}.rpm ../
+    cp /usr/src/rpm/RPMS/$ARCH/synfigstudio-${VERSION}-${RPMREVISION}.$RELEASE.${ARCH}.rpm /packages/
+    pushd /packages/
+    alien -k synfigstudio-${VERSION}-${RPMREVISION}.$RELEASE.${ARCH}.rpm
+    rm -rf synfigstudio-${VERSION}
+    popd
+}
+
+initialize()
+{
+       # Make sure we have all dependencies installed
+       echo "Checking dependencies..."
+       DEB_LIST_MINIMAL="build-essential autoconf automake libltdl3-dev libtool gettext cvs libpng12-dev libjpeg62-dev libfreetype6-dev libfontconfig1-dev libgtk2.0-dev libxml2-dev bzip2"
+       if which yum >/dev/null; then
+               PKG_LIST="git"
+               if [[ $MODE == 'package' ]]; then
+                       PKG_LIST="${PKG_LIST} debootstrap rsync"
+               else
+                       PKG_LIST="${PKG_LIST} libpng-devel libjpeg-devel freetype-devel fontconfig-devel atk-devel pango-devel cairo-devel gtk2-devel gettext-devel libxml2-devel libxml++-devel gcc-c++ autoconf automake libtool libtool-ltdl-devel cvs"
+                       PKG_LIST="${PKG_LIST} OpenEXR-devel libmng-devel ImageMagick-c++-devel gtkmm24-devel glibmm24-devel"
+               fi
+               if ! ( rpm -qv $PKG_LIST ); then
+                       echo "Running yum (you need root privelegies to do that)..."
+                       su -c "yum install $PKG_LIST"
+               fi
+       elif which apt-get >/dev/null; then
+               PKG_LIST="git-core"
+               if [[ $MODE == 'package' ]]; then
+                       if [[ `cat /etc/chroot.id` == "Synfig Packages Buildroot" ]]; then
+                               #we are inside of chroot
+                               PKG_LIST="$DEB_LIST_MINIMAL rpm alien xsltproc wget python"
+                       else
+                               #we have to prepare chroot
+                               PKG_LIST="${PKG_LIST} debootstrap rsync"
+                       fi
+               else
+                       PKG_LIST="${PKG_LIST} ${DEB_LIST_MINIMAL} libmng-dev libgtkmm-2.4-dev libglibmm-2.4-dev libsigc++-2.0-dev"
+               fi
+               if ! ( dpkg -s $PKG_LIST >/dev/null ); then
+                       echo "Running apt-get (you need root privelegies to do that)..."
+                       echo 
+                       #echo "http_proxy =====" $http_proxy
+                       #env
+                       sudo apt-get update
+                       sudo apt-get install -y $PKG_LIST
+               fi
+       else
+               if [[ $MODE == 'package' ]]; then
+                       if ! ( which git && which debootstrap ) ; then
+                               echo "ERROR: Please install 'git' and 'debootstrap'."
+                               exit;
+                       fi
+               else
+                       echo "WARNING: This build script does not works with package mangement systems other than rpm/yum or apt/dpkg! You should install dependent packages manually."
+                       read
+               fi
+       fi
+       echo "Done."
+       
+       if [[ $DEBUG == 1 ]]; then
+               DEBUG='--enable-debug'
+       else
+               DEBUG=''
+       fi
+       
+       
+       
+       if [[ $MODE == 'package' ]] && [[ `cat /etc/chroot.id` == "Synfig Packages Buildroot" ]]; then
+               SYNFIG_REPO_DIR="/source/synfig.git"
+               PREFIX="/opt/synfig"
+               
+               which git || mkgit
+               
+               pushd $SYNFIG_REPO_DIR
+               git fetch
+               git reset --hard HEAD
+               #we can't switch directly to specified commit wit old git, so let's create temporary branch:
+               #git checkout master || ( git branch -f master && git checkout master )
+               #git branch -f __build $SELECTEDREVISION
+               #git checkout __build
+               git checkout $SELECTEDREVISION
+               VERSION=`cat synfig-core/configure.ac |egrep "AC_INIT\(\[Synfig Core\],"| sed "s|.*Core\],\[||" | sed "s|\],\[.*||"`
+               if [ -z $BREED ]; then
+                       BREED="`git branch -a --no-color --contains HEAD | sed -e s/\*\ // | sed -e s/\(no\ branch\)// | tr '\n' ' ' | tr -s ' ' | sed s/^' '//`"
+                       if ( echo $BREED | egrep origin/master > /dev/null ); then
+                               #give a priority to master branch
+                               BREED='master'
+                       else
+                               BREED=`echo $BREED | cut -d ' ' -f 1`
+                               BREED=${BREED##*/}
+                       fi
+                       BREED=${BREED%_master}
+               fi
+               [[ $DEBUG == 1 ]] && BREED=${BREED}_debug
+               REVISION=`git show --pretty=medium $SELECTEDREVISION | head -n 3 |tail -n 1 | sed 's/Date: *//' | sed 's/ +.*//'`
+               REVISION=`date --date="${REVISION}" +%Y%m%d`
+               echo
+               echo
+               echo "BUILDING synfigstudio-$VERSION-$REVISION.$BREED.$RELEASE"
+               echo
+               echo
+               sleep 5
+               popd
+               
+               #Trick to detect arch under chroot
+               #ARCH=`rpm -q --queryformat='%{arch}\n' e2fsprogs`
+               MACHINE_TYPE=`uname -m`
+               case ${MACHINE_TYPE} in
+                       i586)
+                       ARCH=i386;;
+                       i686)
+                       ARCH=i386;;
+                       *)
+                       ARCH=${MACHINE_TYPE};;
+               esac
+       else
+               #detecting repo
+               if git rev-parse --git-dir >/dev/null; then
+                       SYNFIG_REPO_DIR=$(dirname `git rev-parse --git-dir`)
+                       WORKDIR_IS_REPO=1
+               fi
+       fi
+       
+       export PKG_CONFIG_PATH=${PREFIX}/lib/pkgconfig
+       export PATH=${PREFIX}/bin:$PATH
+       export LD_LIBRARY_PATH=${PREFIX}/lib:$LD_LIBRARY_PATH
+       export LDFLAGS="-Wl,-rpath -Wl,\\\$\$ORIGIN/lib"
+}
+
+mk()
+{
+       if [[ WORKDIR_IS_REPO == 0 ]]; then
+               SYNFIG_REPO_DIR=`pwd`/synfig.git/
+               git clone git://synfig.git.sourceforge.net/gitroot/synfig/synfig ${SYNFIG_REPO_DIR}
+       fi
+       
+       mkETL
+       mksynfig
+       mksynfigstudio
+}
+
+mkpackage()
+{
+       #check if we already in chroot
+       if [[ `cat /etc/chroot.id` == "Synfig Packages Buildroot" ]]; then
+               echo "We are in chroot now."
+               
+               echo "[user]"  > $HOME/.gitconfig
+               echo "email = packages@synfig.org"  >> $HOME/.gitconfig
+               echo "name = Synfig Packager" >> $HOME/.gitconfig
+               
+               
+               
+               #synfig-core deps
+               mklibsigcpp
+               mkglibmm
+               mklibxmlpp
+               if [[ $OPENGL == 1 ]]; then
+                       mkglew
+               fi
+               mkimagemagick
+               #synfig-studio deps
+               mkcairomm
+               mkgtkmm
+               if [[ $OPENGL == 1 ]]; then
+                       mkfreeglut
+                       mkftgl
+                       mkgtkglext
+                       mkgtkglextmm
+               fi
+               
+               mkETL
+               mksynfig
+               mksynfigstudio
+               
+               mkpack
+       else
+               [ -d $HOME/synfig-packages ] || mkdir -p $HOME/synfig-packages
+               #DEB_LIST="build-essential,autoconf,automake,libltdl3-dev,libtool,gettext,cvs,libpng12-dev,libjpeg62-dev,libfreetype6-dev,libfontconfig1-dev,libgtk2.0-dev,libxml2-dev,bzip2,rpm,alien,xsltproc"
+               for ARCH in i386 amd64; do
+               if [[ $ARCH == 'i386' ]];then
+                       SETARCH='linux32'
+               else
+                       SETARCH='linux64'
+               fi
+               if ! [ -e $PACKAGES_BUILDROOT.$ARCH/etc/chroot.id ]; then
+                       debootstrap --arch=$ARCH --variant=buildd  --include=sudo etch $PACKAGES_BUILDROOT.$ARCH http://ftp.us.debian.org/debian
+               fi
+               #set chroot ID
+               echo "Synfig Packages Buildroot" > $PACKAGES_BUILDROOT.$ARCH/etc/chroot.id
+               cp -f $0 $PACKAGES_BUILDROOT.$ARCH/build.sh
+               #keep proxy settings
+               if ! [ -z $http_proxy ]; then 
+                       #echo "export http_proxy=\"$http_proxy\";" >> $PACKAGES_BUILDROOT.$ARCH/root/.bashrc
+                       #echo "echo 'proxy export done';" >> $PACKAGES_BUILDROOT.$ARCH/root/.bashrc
+                       echo "Acquire::http::Proxy \"$http_proxy\";" > $PACKAGES_BUILDROOT.$ARCH/etc/apt/apt.conf
+               fi
+               #fetch sources to cache
+               [ -d $PACKAGES_BUILDROOT.$ARCH/source ] && rm -rf $PACKAGES_BUILDROOT.$ARCH/source || true
+               if ! [ -d $PACKAGES_BUILDROOT/synfig.git ]; then
+                       if [[ $WORKDIR_IS_REPO == 1 ]]; then
+                               git clone $SYNFIG_REPO_DIR $PACKAGES_BUILDROOT/synfig.git
+                               sed -i 's|url = .*|url = git://synfig.git.sourceforge.net/gitroot/synfig/synfig|' $PACKAGES_BUILDROOT/synfig.git/.git/config
+                       else
+                               git clone git://synfig.git.sourceforge.net/gitroot/synfig/synfig $PACKAGES_BUILDROOT/synfig.git
+                       fi
+               fi
+               pushd $PACKAGES_BUILDROOT
+               cd synfig.git && git fetch && cd ..
+               [ ! -e git-$GITVERSION.tar.bz2 ] && wget -c http://kernel.org/pub/software/scm/git/git-$GITVERSION.tar.bz2
+               for FILE in \
+                       cairomm-${CAIROMM}.tar.gz \
+                       glibmm-${GLIBMM}.tar.bz2 \
+                       gtkmm-${GTKMM}.tar.bz2 \
+                       libsigc++-${LIBSIGCPP}.tar.bz2 \
+                       libxml++-${LIBXMLPP}.tar.bz2 \
+                       ImageMagick-6.3.8-invalid-gerror-use.patch \
+                       ImageMagick-${IMAGEMAGICK}-10.tar.bz2 \
+                       ImageMagick-${IMAGEMAGICK}-multilib.patch \
+                       ImageMagick-${IMAGEMAGICK}-xdg-open.patch
+               do
+                       #[ ! -e $FILE ] && wget -c http://download.tuxfamily.org/morevna/morevnapackage/sources/$FILE
+                       rsync -av rsync://download.tuxfamily.org/pub/synfig/packages/sources/$FILE ./
+               done
+               if [[ $OPENGL == 1 ]]; then
+               for FILE in \
+                       glew-${GLEW}.tar.gz\
+                       glew-${GLEW}-makefile.patch \
+                       freeglut-${FREEGLUT}.tar.gz \
+                       ftgl-${FTGL}.tar.gz \
+                       ftgl-${FTGL}-destdir.patch \
+                       ftgl-${FTGL}-Glyph-g++_41.patch \
+                       ftgl-${FTGL}-pc_req.patch \
+                       ftgl-${FTGL}-rpath_FTGLDemo.patch \
+                       ftgl-${FTGL}-ttf_font.patch \
+                       gtkglext-${GTKGLEXT}.tar.bz2 \
+                       gtkglextmm-${GTKGLEXTMM}.tar.bz2 \
+                       gtkglextmm-${GTKGLEXTMM}-aclocal.diff
+               do
+                       #[ ! -e $FILE ] && wget -c http://download.tuxfamily.org/morevna/morevnapackage/sources/$FILE
+                       rsync -av rsync://download.tuxfamily.org/pub/synfig/packages/sources/$FILE ./
+               done
+               fi
+               popd
+               #copy sources
+               [ -d $PACKAGES_BUILDROOT.$ARCH/source ] || mkdir -p $PACKAGES_BUILDROOT.$ARCH/source
+               cp -rf $PACKAGES_BUILDROOT/* $PACKAGES_BUILDROOT.$ARCH/source/
+               #go to chroot
+               $SETARCH chroot $PACKAGES_BUILDROOT.$ARCH env http_proxy=$http_proxy bash /build.sh package $SELECTEDREVISION
+               mv -f $PACKAGES_BUILDROOT.$ARCH/packages/* $PACKAGES_PATH
+               done
+               echo
+               echo
+               find $PACKAGES_PATH/synfigstudio* -maxdepth 1
+               echo "     DONE BUILDING PACKAGES INTO $HOME/synfig-packages"
+               echo
+       fi
+}
+
+###=================================== MAIN ======================================
+
+if [ -z $1 ]; then
+       ARG='standart'
+else
+       ARG=$1
+fi
+
+case $ARG in
+       full)
+               MODE='full'
+               initialize
+               mk
+               exit;;
+       standart)
+               MODE='standart'
+               initialize
+               mk
+               exit;;
+       quick)
+               MODE='quick'
+               initialize
+               mk
+               exit;;
+       package)
+               MODE='package'
+               initialize
+               mk$ARG
+               exit;;
+       *)
+               MODE='package'
+               initialize
+               mk$ARG
+               exit;;
+esac
index 680aa4f..18e66b4 100644 (file)
@@ -32,6 +32,7 @@
 #endif
 
 #include <iostream>
+#include <cstring>
 #include "svg_parser.h"
 
 /* === U S I N G =========================================================== */
@@ -1780,7 +1781,7 @@ Svg_parser::get_tokens_path(String path){ //mini path lexico-parser
                                        else if(a=='V'){ e=15; i++;}
                                        else if(a=='H'){ e=16; i++;}
                                        else if(a=='z' || a=='Z'){ e=17; i++;}
-                                       else if(a=='-' ||a=='.'|| isdigit (a)){ e=18;}
+                                       else if(a=='-' || a=='.' || a=='e' || a=='E' || isdigit (a)){ e=18;}
                                        else if(a==','){ e=19; i++;}
                                        else if(a==' '){i++;}
                                        break;
@@ -1804,7 +1805,7 @@ Svg_parser::get_tokens_path(String path){ //mini path lexico-parser
                        case 16: tokens.push_back("H"); e=0; break;
 
                        case 17: tokens.push_back("z"); e=0; break;//loop
-                       case 18: if(a=='-'||a=='.'|| isdigit (a)){
+                       case 18: if(a=='-' || a=='.' || a=='e' || a=='E' || isdigit (a)){
                                                buffer.append(path.substr(i,1));i++;
                                        }else{
                                                e=20;
@@ -1853,6 +1854,8 @@ Svg_parser::randomLetter(){
 int
 Svg_parser::getRed(String hex){
        if(hex.at(0)=='#'){
+               //allow for 3-digit hex codes (#rgb = #rrggbb)
+               if (hex.length()<7) return (16+1) * hextodec(hex.substr(1,1));
                return hextodec(hex.substr(1,2));
        }else if(hex.compare(0,3,"rgb")==0 || hex.compare(0,3,"RGB")==0){
                int start=hex.find_first_of("(")+1;
@@ -1860,11 +1863,12 @@ Svg_parser::getRed(String hex){
                String aux=tokenize(hex.substr(start,end-start),",").at(0);
                return atoi(aux.data());
        }
-       return 0;
+       return getColor(hex,1);
 }
 int
 Svg_parser::getGreen(String hex){
        if(hex.at(0)=='#'){
+               if (hex.length()<7) return (16+1) * hextodec(hex.substr(2,1));
                return hextodec(hex.substr(3,2));
        }else if(hex.compare(0,3,"rgb")==0 || hex.compare(0,3,"RGB")==0){
                int start=hex.find_first_of("(")+1;
@@ -1872,11 +1876,12 @@ Svg_parser::getGreen(String hex){
                String aux=tokenize(hex.substr(start,end-start),",").at(1);
                return atoi(aux.data());
        }
-       return 0;
+       return getColor(hex,2);
 }
 int
 Svg_parser::getBlue(String hex){
        if(hex.at(0)=='#'){
+               if (hex.length()<7) return (16+1) * hextodec(hex.substr(3,1));
                return hextodec(hex.substr(5,2));
        }else if(hex.compare(0,3,"rgb")==0 || hex.compare(0,3,"RGB")==0){
                int start=hex.find_first_of("(")+1;
@@ -1884,7 +1889,7 @@ Svg_parser::getBlue(String hex){
                String aux=tokenize(hex.substr(start,end-start),",").at(2);
                return atoi(aux.data());
        }
-       return 0;
+       return getColor(hex,3);
 }
 int
 Svg_parser::hextodec(String hex){
@@ -2017,3 +2022,161 @@ Svg_parser::new_guid(){
        return GUID::hasher(uid).get_string();
 }
 
+
+#define COLOR_NAME(color, r, g, b) else if(name.compare(0,strlen(color),color)==0) \
+                   {switch(position) \
+                              {case 1: return r; case 2: return g; case 3: return b;}  }
+
+int
+Svg_parser::getColor(String name, int position){
+       if (position<1 || position>3) return 0;
+       COLOR_NAME("aliceblue",240, 248, 255)
+       COLOR_NAME("antiquewhite",250, 235, 215)
+       COLOR_NAME("aqua", 0, 255, 255)
+       COLOR_NAME("aquamarine",127, 255, 212)
+       COLOR_NAME("azure",240, 255, 255)
+       COLOR_NAME("beige",245, 245, 220)
+       COLOR_NAME("bisque",255, 228, 196)
+       COLOR_NAME("black", 0, 0, 0)
+       COLOR_NAME("blanchedalmond",255, 235, 205)
+       COLOR_NAME("blue", 0, 0, 255)
+       COLOR_NAME("blueviolet",138, 43, 226)
+       COLOR_NAME("brown",165, 42, 42)
+       COLOR_NAME("burlywood",222, 184, 135)
+       COLOR_NAME("cadetblue", 95, 158, 160)
+       COLOR_NAME("chartreuse",127, 255, 0)
+       COLOR_NAME("chocolate",210, 105, 30)
+       COLOR_NAME("coral",255, 127, 80)
+       COLOR_NAME("cornflowerblue",100, 149, 237)
+       COLOR_NAME("cornsilk",255, 248, 220)
+       COLOR_NAME("crimson",220, 20, 60)
+       COLOR_NAME("cyan", 0, 255, 255)
+       COLOR_NAME("darkblue", 0, 0, 139)
+       COLOR_NAME("darkcyan", 0, 139, 139)
+       COLOR_NAME("darkgoldenrod",184, 134, 11)
+       COLOR_NAME("darkgray",169, 169, 169)
+       COLOR_NAME("darkgreen", 0, 100, 0)
+       COLOR_NAME("darkgrey",169, 169, 169)
+       COLOR_NAME("darkkhaki",189, 183, 107)
+       COLOR_NAME("darkmagenta",139, 0, 139)
+       COLOR_NAME("darkolivegreen", 85, 107, 47)
+       COLOR_NAME("darkorange",255, 140, 0)
+       COLOR_NAME("darkorchid",153, 50, 204)
+       COLOR_NAME("darkred",139, 0, 0)
+       COLOR_NAME("darksalmon",233, 150, 122)
+       COLOR_NAME("darkseagreen",143, 188, 143)
+       COLOR_NAME("darkslateblue", 72, 61, 139)
+       COLOR_NAME("darkslategray", 47, 79, 79)
+       COLOR_NAME("darkslategrey", 47, 79, 79)
+       COLOR_NAME("darkturquoise", 0, 206, 209)
+       COLOR_NAME("darkviolet",148, 0, 211)
+       COLOR_NAME("deeppink",255, 20, 147)
+       COLOR_NAME("deepskyblue", 0, 191, 255)
+       COLOR_NAME("dimgray",105, 105, 105)
+       COLOR_NAME("dimgrey",105, 105, 105)
+       COLOR_NAME("dodgerblue", 30, 144, 255)
+       COLOR_NAME("firebrick",178, 34, 34)
+       COLOR_NAME("floralwhite",255, 250, 240)
+       COLOR_NAME("forestgreen", 34, 139, 34)
+       COLOR_NAME("fuchsia",255, 0, 255)
+       COLOR_NAME("gainsboro",220, 220, 220)
+       COLOR_NAME("ghostwhite",248, 248, 255)
+       COLOR_NAME("gold",255, 215, 0)
+       COLOR_NAME("goldenrod",218, 165, 32)
+       COLOR_NAME("gray",128, 128, 128)
+       COLOR_NAME("grey",128, 128, 128)
+       COLOR_NAME("green", 0, 128, 0)
+       COLOR_NAME("greenyellow",173, 255, 47)
+       COLOR_NAME("honeydew",240, 255, 240)
+       COLOR_NAME("hotpink",255, 105, 180)
+       COLOR_NAME("indianred",205, 92, 92)
+       COLOR_NAME("indigo", 75, 0, 130)
+       COLOR_NAME("ivory",255, 255, 240)
+       COLOR_NAME("khaki",240, 230, 140)
+       COLOR_NAME("lavender",230, 230, 250)
+       COLOR_NAME("lavenderblush",255, 240, 245)
+       COLOR_NAME("lawngreen",124, 252, 0)
+       COLOR_NAME("lemonchiffon",255, 250, 205)
+       COLOR_NAME("lightblue",173, 216, 230)
+       COLOR_NAME("lightcoral",240, 128, 128)
+       COLOR_NAME("lightcyan",224, 255, 255)
+       COLOR_NAME("lightgoldenrodyellow",250, 250, 210)
+       COLOR_NAME("lightgray",211, 211, 211)
+       COLOR_NAME("lightgreen",144, 238, 144)
+       COLOR_NAME("lightgrey",211, 211, 211)
+       COLOR_NAME("lightpink",255, 182, 193)
+       COLOR_NAME("lightsalmon",255, 160, 122)
+       COLOR_NAME("lightseagreen", 32, 178, 170)
+       COLOR_NAME("lightskyblue",135, 206, 250)
+       COLOR_NAME("lightslategray",119, 136, 153)
+       COLOR_NAME("lightslategrey",119, 136, 153)
+       COLOR_NAME("lightsteelblue",176, 196, 222)
+       COLOR_NAME("lightyellow",255, 255, 224)
+       COLOR_NAME("lime", 0, 255, 0)
+       COLOR_NAME("limegreen", 50, 205, 50)
+       COLOR_NAME("linen",250, 240, 230)
+       COLOR_NAME("magenta",255, 0, 255)
+       COLOR_NAME("maroon",128, 0, 0)
+       COLOR_NAME("mediumaquamarine",102, 205, 170)
+       COLOR_NAME("mediumblue", 0, 0, 205)
+       COLOR_NAME("mediumorchid",186, 85, 211)
+       COLOR_NAME("mediumpurple",147, 112, 219)
+       COLOR_NAME("mediumseagreen", 60, 179, 113)
+       COLOR_NAME("mediumslateblue",123, 104, 238)
+       COLOR_NAME("mediumspringgreen", 0, 250, 154)
+       COLOR_NAME("mediumturquoise", 72, 209, 204)
+       COLOR_NAME("mediumvioletred",199, 21, 133)
+       COLOR_NAME("midnightblue", 25, 25, 112)
+       COLOR_NAME("mintcream",245, 255, 250)
+       COLOR_NAME("mistyrose",255, 228, 225)
+       COLOR_NAME("moccasin",255, 228, 181)
+       COLOR_NAME("navajowhite",255, 222, 173)
+       COLOR_NAME("navy", 0, 0, 128)
+       COLOR_NAME("oldlace",253, 245, 230)
+       COLOR_NAME("olive",128, 128, 0)
+       COLOR_NAME("olivedrab",107, 142, 35)
+       COLOR_NAME("orange",255, 165, 0)
+       COLOR_NAME("orangered",255, 69, 0)
+       COLOR_NAME("orchid",218, 112, 214)
+       COLOR_NAME("palegoldenrod",238, 232, 170)
+       COLOR_NAME("palegreen",152, 251, 152)
+       COLOR_NAME("paleturquoise",175, 238, 238)
+       COLOR_NAME("palevioletred",219, 112, 147)
+       COLOR_NAME("papayawhip",255, 239, 213)
+       COLOR_NAME("peachpuff",255, 218, 185)
+       COLOR_NAME("peru",205, 133, 63)
+       COLOR_NAME("pink",255, 192, 203)
+       COLOR_NAME("plum",221, 160, 221)
+       COLOR_NAME("powderblue",176, 224, 230)
+       COLOR_NAME("purple",128, 0, 128)
+       COLOR_NAME("red",255, 0, 0)
+       COLOR_NAME("rosybrown",188, 143, 143)
+       COLOR_NAME("royalblue", 65, 105, 225)
+       COLOR_NAME("saddlebrown",139, 69, 19)
+       COLOR_NAME("salmon",250, 128, 114)
+       COLOR_NAME("sandybrown",244, 164, 96)
+       COLOR_NAME("seagreen", 46, 139, 87)
+       COLOR_NAME("seashell",255, 245, 238)
+       COLOR_NAME("sienna",160, 82, 45)
+       COLOR_NAME("silver",192, 192, 192)
+       COLOR_NAME("skyblue",135, 206, 235)
+       COLOR_NAME("slateblue",106, 90, 205)
+       COLOR_NAME("slategray",112, 128, 144)
+       COLOR_NAME("slategrey",112, 128, 144)
+       COLOR_NAME("snow",255, 250, 250)
+       COLOR_NAME("springgreen", 0, 255, 127)
+       COLOR_NAME("steelblue", 70, 130, 180)
+       COLOR_NAME("tan",210, 180, 140)
+       COLOR_NAME("teal", 0, 128, 128)
+       COLOR_NAME("thistle",216, 191, 216)
+       COLOR_NAME("tomato",255, 99, 71)
+       COLOR_NAME("turquoise", 64, 224, 208)
+       COLOR_NAME("violet",238, 130, 238)
+       COLOR_NAME("wheat",245, 222, 179)
+       COLOR_NAME("white",255, 255, 255)
+       COLOR_NAME("whitesmoke",245, 245, 245)
+       COLOR_NAME("yellow",255, 255, 0)
+       COLOR_NAME("yellowgreen",154, 205, 50)
+       return 0;
+}
+#undef COLOR_NAME
index 6402f69..3ac8f9b 100644 (file)
@@ -65,13 +65,13 @@ typedef struct stop_t{
         float pos;
 }ColorStop;
 typedef struct linear_g{
-       char name[40];
+       char name[80];
        float x1,x2,y1,y2;
        std::list<ColorStop*> *stops;
        Matrix *transform;
 }LinearGradient;
 typedef struct radial_g{
-       char name[40];
+       char name[80];
        float cx,cy;//center point
        //float fx,fy; //not supported by Synfig
        float r; //radius
@@ -213,6 +213,7 @@ private:
                int getGreen(String hex);
                int getBlue(String hex);
                int hextodec(String hex);
+               int getColor(String name, int position);
                float getDimension(const String ac);
                //string functions
                void removeS(String *input);
index 59f90f7..855112c 100644 (file)
@@ -61,8 +61,12 @@ SYNFIG_LAYER_SET_CVS_ID(Layer_MotionBlur,"$Id$");
 /* === M E M B E R S ======================================================= */
 
 Layer_MotionBlur::Layer_MotionBlur():
-       Layer_Composite (1.0,Color::BLEND_STRAIGHT),
-       aperture                (0)
+       Layer_Composite         (1.0,Color::BLEND_STRAIGHT),
+       aperture                        (0),
+       subsamples_factor       (1.0),
+       subsampling_type        (SUBSAMPLING_HYPERBOLIC),
+       subsample_start         (0.0),
+       subsample_end           (1.0)
 {
 }
 
@@ -71,13 +75,21 @@ Layer_MotionBlur::set_param(const String &param, const ValueBase &value)
 {
 
        IMPORT(aperture);
+       IMPORT(subsamples_factor);
+       IMPORT(subsampling_type);
+       IMPORT(subsample_start);
+       IMPORT(subsample_end);
        return Layer_Composite::set_param(param,value);
 }
 
 ValueBase
 Layer_MotionBlur::get_param(const String &param)const
 {
-       EXPORT(aperture);
+       EXPORT(aperture);
+       EXPORT(subsamples_factor);
+       EXPORT(subsampling_type);
+       EXPORT(subsample_start);
+       EXPORT(subsample_end);
 
        EXPORT_NAME();
        EXPORT_VERSION();
@@ -123,6 +135,30 @@ Layer_MotionBlur::get_param_vocab()const
                .set_description(_("Shutter Time"))
        );
 
+       ret.push_back(ParamDesc("subsamples_factor")
+               .set_local_name(_("Subsamples Factor"))
+               .set_description(_("Multiplies The Number Of Subsamples Rendered"))
+       );
+
+       ret.push_back(ParamDesc("subsampling_type")
+               .set_local_name(_("Subsampling Type"))
+               .set_description(_("Curve Type For Weighting Subsamples"))
+               .set_hint("enum")
+               .add_enum_value(SUBSAMPLING_CONSTANT,"constant",_("Constant"))
+               .add_enum_value(SUBSAMPLING_LINEAR,"linear",_("Linear"))
+               .add_enum_value(SUBSAMPLING_HYPERBOLIC,"hyperbolic",_("Hyperbolic"))
+       );
+
+       ret.push_back(ParamDesc("subsample_start")
+               .set_local_name(_("Subsample Start Amount"))
+               .set_description(_("Relative Amount Of The First Subsample, For Linear Weighting"))
+       );
+
+       ret.push_back(ParamDesc("subsample_end")
+               .set_local_name(_("Subsample End Amount"))
+               .set_description(_("Relative Amount Of The Last Subsample, For Linear Weighting"))
+       );
+
        return ret;
 }
 
@@ -170,7 +206,17 @@ Layer_MotionBlur::accelerated_render(Context context,Surface *surface,int qualit
 
                }
 
-               if (samples == 1) return context.accelerated_render(surface,quality,renddesc,cb);
+               samples *= subsamples_factor;
+
+               if (samples <= 1) return context.accelerated_render(surface,quality,renddesc,cb);
+
+               // Only in modes where subsample_start/end matters...
+               if(subsampling_type == SUBSAMPLING_LINEAR)
+               {
+                       // We won't render when the scale==0, so we'll use those samples elsewhere
+                       if(subsample_start == 0) samples++;
+                       if(subsample_end == 0) samples++;
+               }
 
                Surface tmp;
                int i;
@@ -179,14 +225,32 @@ Layer_MotionBlur::accelerated_render(Context context,Surface *surface,int qualit
                surface->set_wh(renddesc.get_w(),renddesc.get_h());
                surface->clear();
 
+               // Render subsamples from time_cur-aperture to time_cur
                for(i=0;i<samples;i++)
                {
+                       float pos = i/(samples-1.0);
+                       float ipos = 1.0-pos;
+                       switch(subsampling_type)
+                       {
+                               case SUBSAMPLING_LINEAR:
+                                       scale = ipos*subsample_start + pos*subsample_end;
+                                       break;
+                               case SUBSAMPLING_HYPERBOLIC:
+                                       scale = 1.0/(samples-i);
+                                       break;
+                               case SUBSAMPLING_CONSTANT:
+                               default:
+                                       scale = 1.0; // Weights don't matter for constant overall subsampling.
+                                       break;
+                       }
+                       // Don't bother rendering if scale is zero
+                       if(scale==0)
+                               continue;
+                       divisor += scale;
                        subimagecb=SuperCallback(cb,i*(5000/samples),(i+1)*(5000/samples),5000);
-                       context.set_time(time_cur-(aperture*(samples-1-i)/(samples-1)));
+                       context.set_time(time_cur-aperture*ipos);
                        if(!context.accelerated_render(&tmp,quality,renddesc,&subimagecb))
                                return false;
-                       scale = 1.0/(samples-i);
-                       divisor += scale;
                        for(int y=0;y<renddesc.get_h();y++)
                                for(int x=0;x<renddesc.get_w();x++)
                                        (*surface)[y][x]+=tmp[y][x].premult_alpha()*scale;
index b476f59..9b4391c 100644 (file)
@@ -39,8 +39,21 @@ class Layer_MotionBlur : public synfig::Layer_Composite
 {
        SYNFIG_LAYER_MODULE_EXT
 
+       enum SubsamplingType
+       {
+           SUBSAMPLING_CONSTANT=0,             //!< weight each subsample equally
+           SUBSAMPLING_LINEAR=1,               //!< fade in subsamples linearly
+           SUBSAMPLING_HYPERBOLIC=2,   //!< fade in subsamples by a hyperbolic curve (default style of 0.62 and previous)
+
+           SUBSAMPLING_END=2                           //!< \internal
+       };
+
 private:
        Time aperture;
+       Real subsamples_factor;
+       SubsamplingType subsampling_type;
+       Real subsample_start;
+       Real subsample_end;
        mutable Time time_cur;
 
 public:
index 03553e0..718bdee 100644 (file)
@@ -261,11 +261,17 @@ Dock_PalEdit::refresh()
                widget_color->set_size_request(12,12);
                widget_color->signal_activate().connect(
                        sigc::bind(
-                               sigc::mem_fun(*this,&studio::Dock_PalEdit::select_color),
+                               sigc::mem_fun(*this,&studio::Dock_PalEdit::select_fill_color),
                                i
                        )
                );
-               widget_color->signal_secondary().connect(
+               widget_color->signal_middle_click().connect(
+                       sigc::bind(
+                               sigc::mem_fun(*this,&studio::Dock_PalEdit::select_outline_color),
+                               i
+                       )
+               );
+               widget_color->signal_right_click().connect(
                        sigc::bind(
                                sigc::mem_fun(*this,&studio::Dock_PalEdit::show_menu),
                                i
@@ -294,7 +300,13 @@ Dock_PalEdit::edit_color(int i)
 }
 
 void
-Dock_PalEdit::select_color(int i)
+Dock_PalEdit::select_fill_color(int i)
+{
+       synfigapp::Main::set_fill_color(get_color(i));
+}
+
+void
+Dock_PalEdit::select_outline_color(int i)
 {
        synfigapp::Main::set_outline_color(get_color(i));
 }
index 4c1ef2e..cd825ee 100644 (file)
@@ -87,7 +87,8 @@ private:
        void set_color(synfig::Color x, int i);
        void erase_color(int i);
 
-       void select_color(int i);
+       void select_fill_color(int i);
+       void select_outline_color(int i);
        synfig::Color get_color(int i)const;
        void edit_color(int i);
 public:
index 2e009b1..1c53b5e 100644 (file)
@@ -168,9 +168,14 @@ Widget_Color::on_event(GdkEvent *event)
                        signal_activate_();
                        return true;
                }
+               if(event->button.button==2)
+               {
+                       signal_middle_click_();
+                       return true;
+               }
                if(event->button.button==3)
                {
-                       signal_secondary_();
+                       signal_right_click_();
                        return true;
                }
                break;
index 5763bc0..14e3db1 100644 (file)
@@ -52,14 +52,16 @@ class Widget_Color : public Gtk::DrawingArea
        synfig::Color color;
 
        sigc::signal<void> signal_activate_;
-       sigc::signal<void> signal_secondary_;
+       sigc::signal<void> signal_middle_click_;
+       sigc::signal<void> signal_right_click_;
 
 protected:
 
 public:
        sigc::signal<void>& signal_activate() { return signal_activate_; }
        sigc::signal<void>& signal_clicked() { return signal_activate_; }
-       sigc::signal<void>& signal_secondary() { return signal_secondary_; }
+       sigc::signal<void>& signal_middle_click() { return signal_middle_click_; }
+       sigc::signal<void>& signal_right_click() { return signal_right_click_; }
 
        void set_value(const synfig::Color &data);
        const synfig::Color &get_value();
index 6dcc2bc..590d3c5 100755 (executable)
@@ -1,7 +1,8 @@
 #!/bin/bash
 
 # Synfig Crash Monitor script
-# Copyright (c) 2009 Konstantin Dmitriev
+# Copyright (c) 2009-2010 Konstantin Dmitriev
+#
 #      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
@@ -124,7 +125,7 @@ mainloop()
                                STARTED=1
                                RUNTIME=0
                                #get version
-                               P=$(ps --no-headers -f -Csynfigstudio |egrep "^`whoami`" | tr -s ' '| cut -d ' ' -f 8)
+                               P=$(ps --no-headers -Csynfigstudio -o uid,cmd |egrep "^ *`id -u`" | egrep -v "<defunct>" | tr -s ' ' | sed "s|^ *`id -u` *||" | sed "s|/bin/sh *||" | head -n 1)
                                echo 
                                if [ ! -e $P ]; then
                                        P=`which $P`