Added copyright lines for files I've edited this year.
[synfig.git] / synfig-core / trunk / src / synfig / color.cpp
index a7b5133..1dcc314 100644 (file)
@@ -6,7 +6,7 @@
 **
 **     \legal
 **     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
-**     Copyright (c) 2007 Chris Moore
+**     Copyright (c) 2007, 2008 Chris Moore
 **
 **     This package is free software; you can redistribute it and/or
 **     modify it under the terms of the GNU General Public License as
@@ -79,9 +79,16 @@ Color::real2hex(ColorReal c)
 }
 
 void
-Color::set_hex(String& hex)
+Color::set_hex(String& str)
 {
        value_type r, g, b;
+       String hex;
+
+       // use just the hex characters
+       for (String::const_iterator iter = str.begin(); iter != str.end(); iter++)
+               if (isxdigit(*iter))
+                       hex.push_back(*iter);
+
        try
        {
                if (hex.size() == 1)
@@ -385,7 +392,7 @@ blendfunc_DIVIDE(Color &a,Color &b,float amount)
        // We add COLOR_EPSILON in order to avoid a divide-by-zero condition.
        // This causes DIVIDE to bias toward positive values, but the effect is
        // really negligible. There is a reason why we use COLOR_EPSILON--we
-       // want the change to be imperceptable.
+       // want the change to be imperceptible.
 
        b.set_r(((b.get_r()/(a.get_r()+COLOR_EPSILON))-b.get_r())*(amount)+b.get_r());
        b.set_g(((b.get_g()/(a.get_g()+COLOR_EPSILON))-b.get_g())*(amount)+b.get_g());
@@ -429,7 +436,7 @@ blendfunc_LUMINANCE(Color &a,Color &b,float amount)
 static Color
 blendfunc_BEHIND(Color &a,Color &b,float amount)
 {
-       if(a.get_a()==0)a.set_a(COLOR_EPSILON);         //!< \hack
+       if(a.get_a()==0)a.set_a(COLOR_EPSILON);         //!< \todo this is a hack
        a.set_a(a.get_a()*amount);
        return blendfunc_COMPOSITE(b,a,1.0);
 }
@@ -437,7 +444,9 @@ blendfunc_BEHIND(Color &a,Color &b,float amount)
 static Color
 blendfunc_ALPHA_BRIGHTEN(Color &a,Color &b,float amount)
 {
-       if(a.get_a()<b.get_a()*amount)
+       // \todo can this be right, multiplying amount by *b*'s alpha?
+       // compare with blendfunc_BRIGHTEN where it is multiplied by *a*'s
+       if(a.get_a() < b.get_a()*amount)
                return a.set_a(a.get_a()*amount);
        return b;
 }
@@ -445,7 +454,7 @@ blendfunc_ALPHA_BRIGHTEN(Color &a,Color &b,float amount)
 static Color
 blendfunc_ALPHA_DARKEN(Color &a,Color &b,float amount)
 {
-       if(a.get_a()*amount>b.get_a())
+       if(a.get_a()*amount > b.get_a())
                return a.set_a(a.get_a()*amount);
        return b;
 }
@@ -562,27 +571,27 @@ Color::blend(Color a, Color b,float amount, Color::BlendMethod type)
 
        const static blendfunc vtable[BLEND_END]=
        {
-               blendfunc_COMPOSITE,
+               blendfunc_COMPOSITE,    // 0
                blendfunc_STRAIGHT,
                blendfunc_BRIGHTEN,
                blendfunc_DARKEN,
                blendfunc_ADD,
-               blendfunc_SUBTRACT,
+               blendfunc_SUBTRACT,             // 5
                blendfunc_MULTIPLY,
                blendfunc_DIVIDE,
                blendfunc_COLOR,
                blendfunc_HUE,
-               blendfunc_SATURATION,
+               blendfunc_SATURATION,   // 10
                blendfunc_LUMINANCE,
                blendfunc_BEHIND,
                blendfunc_ONTO,
                blendfunc_ALPHA_BRIGHTEN,
-               blendfunc_ALPHA_DARKEN,
+               blendfunc_ALPHA_DARKEN, // 15
                blendfunc_SCREEN,
                blendfunc_HARD_LIGHT,
                blendfunc_DIFFERENCE,
                blendfunc_ALPHA_OVER,
-               blendfunc_OVERLAY,
+               blendfunc_OVERLAY,              // 20
                blendfunc_STRAIGHT_ONTO,
        };