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

Reply via email to