}
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)
// 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());
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);
}