Index: src/effects/gradients/SkTwoPointConicalGradient.cpp |
diff --git a/src/effects/gradients/SkTwoPointConicalGradient.cpp b/src/effects/gradients/SkTwoPointConicalGradient.cpp |
index 37b49f0d475a22c9eecfb2027649e32e8b475587..7cb094391a60a46a1b3c6bae4f7610666216385d 100644 |
--- a/src/effects/gradients/SkTwoPointConicalGradient.cpp |
+++ b/src/effects/gradients/SkTwoPointConicalGradient.cpp |
@@ -74,6 +74,8 @@ void TwoPtRadial::init(const SkPoint& center0, SkScalar rad0, |
fA = sqr(fDCenterX) + sqr(fDCenterY) - sqr(fDRadius); |
fRadius2 = sqr(fRadius); |
fRDR = fRadius * fDRadius; |
+ |
+ fConeFillsPlane = rad0 != rad1 && SkMaxScalar(rad0, rad1) > SkPoint::Distance(center0, center1); |
} |
void TwoPtRadial::setup(SkScalar fx, SkScalar fy, SkScalar dfx, SkScalar dfy) { |
@@ -189,10 +191,7 @@ SkTwoPointConicalGradient::SkTwoPointConicalGradient( |
} |
bool SkTwoPointConicalGradient::isOpaque() const { |
- // Because areas outside the cone are left untouched, we cannot treat the |
- // shader as opaque even if the gradient itself is opaque. |
- // TODO(junov): Compute whether the cone fills the plane crbug.com/222380 |
- return false; |
+ return INHERITED::isOpaque() && this->fRec.fConeFillsPlane; |
} |
void SkTwoPointConicalGradient::shadeSpan(int x, int y, SkPMColor* dstCParam, |