unify semantics of the blend methods

This commit is contained in:
Jinhao
2017-04-15 11:30:16 +08:00
parent f261fa296e
commit 4e9646cf64
24 changed files with 108 additions and 135 deletions

View File

@@ -53,11 +53,6 @@ namespace nana
a_((static_cast<int>(rgba) & 0xFF) / 255.0)
{}
color::color(unsigned red, unsigned green, unsigned blue)
: r_(red), g_(green), b_(blue), a_(1.0)
{
}
color::color(unsigned red, unsigned green, unsigned blue, double alpha)
: r_(red), g_(green), b_(blue), a_(alpha)
{
@@ -426,47 +421,12 @@ namespace nana
return *this;
}
color color::blend(const color& bgcolor, bool ignore_bgcolor_alpha) const
{
if (a_ < 1.0)
{
color result;
if (0.0 < a_)
{
if (ignore_bgcolor_alpha || (1.0 == bgcolor.b_))
{
result.r_ = r_ * a_ + bgcolor.r_ * (1.0 - a_);
result.g_ = g_ * a_ + bgcolor.g_ * (1.0 - a_);
result.b_ = b_ * a_ + bgcolor.b_ * (1.0 - a_);
result.a_ = 1.0;
}
else
{
result.r_ = r_ * a_ + bgcolor.r_ * bgcolor.a_ * (1.0 - a_);
result.g_ = g_ * a_ + bgcolor.g_ * bgcolor.a_ * (1.0 - a_);
result.b_ = b_ * a_ + bgcolor.b_ * bgcolor.a_ * (1.0 - a_);
result.a_ = a_ + (bgcolor.a_ * (1.0 - a_));
}
}
else
{
result.r_ = bgcolor.r_;
result.g_ = bgcolor.g_;
result.b_ = bgcolor.b_;
result.a_ = (ignore_bgcolor_alpha ? 1.0 : bgcolor.a_);
}
return result;
}
return *this;
}
color color::blend(const color& bgcolor, double alpha) const
{
color result;
result.r_ = r_ * alpha + bgcolor.r_ * (1.0 - alpha);
result.g_ = g_ * alpha + bgcolor.g_ * (1.0 - alpha);
result.b_ = b_ * alpha + bgcolor.b_ * (1.0 - alpha);
result.r_ = r_ * (1.0 - alpha) + bgcolor.r_ * alpha;
result.g_ = g_ * (1.0 - alpha) + bgcolor.g_ * alpha;
result.b_ = b_ * (1.0 - alpha) + bgcolor.b_ * alpha;
result.a_ = 1.0;
return result;
}