Author: Carlos Lopez <[email protected]>
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/synfig-devl