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

Reply via email to