Author: Carlos Lopez <genet...@gmail.com> Date: Thu Apr 18 18:37:54 2013 +0200
CairoColor: add specialization for Blend mode COLOR, HUE, SATURATION, LUMINANCE and BEHIND --- synfig-core/src/synfig/color.cpp | 39 ++++++++++++++++++++++++++++++++++++++ 1 files changed, 39 insertions(+), 0 deletions(-) diff --git a/synfig-core/src/synfig/color.cpp b/synfig-core/src/synfig/color.cpp index 8e47c98..c7aecef 100644 --- a/synfig-core/src/synfig/color.cpp +++ b/synfig-core/src/synfig/color.cpp @@ -779,6 +779,15 @@ blendfunc_COLOR(C &a,C &b,float amount) return (temp-b)*amount*a.get_a()+b; } + +template <> +CairoColor +blendfunc_COLOR(CairoColor &a, CairoColor &b, float amount) +{ + return CairoColor(Color::blend(Color(a), Color(b), amount, Color::BLEND_COLOR)); +} + + template <class C> static C blendfunc_HUE(C &a,C &b,float amount) @@ -788,6 +797,13 @@ blendfunc_HUE(C &a,C &b,float amount) return (temp-b)*amount*a.get_a()+b; } +template <> +CairoColor +blendfunc_HUE(CairoColor &a, CairoColor &b, float amount) +{ + return CairoColor(Color::blend(Color(a), Color(b), amount, Color::BLEND_HUE)); +} + template <class C> static C blendfunc_SATURATION(C &a,C &b,float amount) @@ -797,6 +813,13 @@ blendfunc_SATURATION(C &a,C &b,float amount) return (temp-b)*amount*a.get_a()+b; } +template <> +CairoColor +blendfunc_SATURATION(CairoColor &a, CairoColor &b, float amount) +{ + return CairoColor(Color::blend(Color(a), Color(b), amount, Color::BLEND_SATURATION)); +} + template <class C> static C blendfunc_LUMINANCE(C &a,C &b,float amount) @@ -806,6 +829,13 @@ blendfunc_LUMINANCE(C &a,C &b,float amount) return (temp-b)*amount*a.get_a()+b; } +template <> +CairoColor +blendfunc_LUMINANCE(CairoColor &a, CairoColor &b, float amount) +{ + return CairoColor(Color::blend(Color(a), Color(b), amount, Color::BLEND_LUMINANCE)); +} + template <class C> static C blendfunc_BEHIND(C &a,C &b,float amount) @@ -817,6 +847,15 @@ blendfunc_BEHIND(C &a,C &b,float amount) return blendfunc_COMPOSITE(b,a,1.0); } +template <> +CairoColor +blendfunc_BEHIND(CairoColor &a, CairoColor &b, float amount) +{ + a.set_a(a.get_a()*amount); + return CairoColor::blend(b, a, 1.0, Color::BLEND_COMPOSITE); +} + + template <class C> static C blendfunc_ALPHA_BRIGHTEN(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