X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-core%2Ftrunk%2Fsrc%2Fsynfig%2Fgradient.cpp;h=21ea1071cb122afb24bf44d16d7cb9f40c4d3a0a;hb=716b28d513455e159096dff4777db6f60f9f3c8f;hp=ff8a581a6584ff525f90ae6cf9926a35df968afd;hpb=cc54c38609ee9745ad678e5e9b9d7d2912be9c95;p=synfig.git diff --git a/synfig-core/trunk/src/synfig/gradient.cpp b/synfig-core/trunk/src/synfig/gradient.cpp index ff8a581..21ea107 100644 --- a/synfig-core/trunk/src/synfig/gradient.cpp +++ b/synfig-core/trunk/src/synfig/gradient.cpp @@ -33,6 +33,7 @@ #include "general.h" #include #include "exception.h" +#include #include #endif @@ -107,11 +108,8 @@ supersample_helper(const synfig::Gradient::CPoint &color1, const synfig::Gradien if(color1.pos>=begin && color2.pos=begin && color2.pos>=end) { @@ -119,11 +117,8 @@ supersample_helper(const synfig::Gradient::CPoint &color1, const synfig::Gradien float pos((end+color1.pos)*0.5); float amount((pos-color1.pos)/(color2.pos-color1.pos)); //if(abs(amount)>1)amount=(amount>0)?1:-1; - ColorAccumulator ret(Color::blend(color2.color,color1.color, amount, Color::BLEND_STRAIGHT)); - ret.set_r(ret.get_r()*ret.get_a()); - ret.set_g(ret.get_g()*ret.get_a()); - ret.set_b(ret.get_b()*ret.get_a()); - return ret*weight; + ColorAccumulator ret(Color::blend(color2.color,color1.color, amount, Color::BLEND_STRAIGHT).premult_alpha()*weight); + return ret; } if(color1.pos1)amount=(amount>0)?1:-1; - ColorAccumulator ret(Color::blend(color2.color,color1.color, amount, Color::BLEND_STRAIGHT)); - ret.set_r(ret.get_r()*ret.get_a()); - ret.set_g(ret.get_g()*ret.get_a()); - ret.set_b(ret.get_b()*ret.get_a()); - return ret*weight; + ColorAccumulator ret(Color::blend(color2.color,color1.color, amount, Color::BLEND_STRAIGHT).premult_alpha()*weight); + return ret; } synfig::error("color1.pos=%f",color1.pos); synfig::error("color2.pos=%f",color2.pos); @@ -285,7 +277,7 @@ synfig::Gradient::operator()(const Real &x,float supersample)const { weight=x-iter->pos; //weight*=iter->color.get_a(); - pool+=ColorAccumulator(iter->color)*(float)iter->color.get_a()*weight; + pool+=ColorAccumulator(iter->color).premult_alpha()*weight; divisor+=weight; } else @@ -296,7 +288,7 @@ synfig::Gradient::operator()(const Real &x,float supersample)const { weight=iter2->pos-(begin_sample); //weight*=iter2->color.get_a(); - pool+=ColorAccumulator(iter2->color)*(float)iter2->color.get_a()*weight; + pool+=ColorAccumulator(iter2->color).premult_alpha()*weight; divisor+=weight; break; } @@ -313,7 +305,7 @@ synfig::Gradient::operator()(const Real &x,float supersample)const if(next2==end()) { weight=(end_sample)-iter2->pos; - pool+=ColorAccumulator(iter2->color)*(float)iter2->color.get_a()*weight; + pool+=ColorAccumulator(iter2->color).premult_alpha()*weight; divisor+=weight; break; }