Author: Carlos Lopez <genet...@gmail.com> Date: Sun Apr 14 20:30:36 2013 +0200
CairoColor: add specialization for Blend mode STRAIGHT --- synfig-core/src/synfig/color.cpp | 35 +++++++++++++++++++++++++++++++++++ 1 files changed, 35 insertions(+), 0 deletions(-) diff --git a/synfig-core/src/synfig/color.cpp b/synfig-core/src/synfig/color.cpp index 0b14090..249ab19 100644 --- a/synfig-core/src/synfig/color.cpp +++ b/synfig-core/src/synfig/color.cpp @@ -351,6 +351,41 @@ blendfunc_STRAIGHT(C &src,C &bg,float amount) return out; } +//Specialization for CairoColor +template <> +CairoColor +blendfunc_STRAIGHT(CairoColor &a, CairoColor &b, float amount) +{ + int ra, ga, ba, aa; //src + int rb, gb, bb, ab; //bg + int rc, gc, bc; + float ac; //out + + ra=a.get_r(); + ga=a.get_g(); + ba=a.get_b(); + aa=a.get_a(); + + rb=b.get_r(); + gb=b.get_g(); + bb=b.get_b(); + ab=b.get_a(); + + ac=(aa-ab)*amount+ab; + + // if ac!=0.0 + if(fabsf(ac)>COLOR_EPSILON) + { + rc= ((ra*aa-rb*ab)*amount + rb*ab)/ac; + gc= ((ga*aa-gb*ab)*amount + gb*ab)/ac; + bc= ((ba*aa-bb*ab)*amount + bb*ab)/ac; + return CairoColor(rc, gc, bc, ac); + } + else + return CairoColor::alpha(); +} + + template <class C> static C blendfunc_ONTO(C &a,C &b,float amount) ------------------------------------------------------------------------------ Precog is a next-generation analytics platform capable of advanced analytics on semi-structured data. The platform includes APIs for building apps and a phenomenal toolset for data science. Developers can use our toolset for easy data analysis & visualization. Get a free account! http://www2.precog.com/precogplatform/slashdotnewsletter _______________________________________________ Synfig-devl mailing list Synfig-devl@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/synfig-devl