diff options
author | 2013-07-04 14:42:26 +0000 | |
---|---|---|
committer | 2013-07-04 14:42:26 +0000 | |
commit | 5e6c3557f8254d3f73f37f322f7560f7594ea793 (patch) | |
tree | b159c01558f5baa21f3e72cfbaab3d6bc02a8c49 /src/effects/gradients/SkTwoPointConicalGradient.cpp | |
parent | e7db8d6c0291371ae2766fd0b6fc0918a0ed1c03 (diff) |
Consider conical shader opaque if it covers entire plane.
BUG=222380
R=junov@chromium.org, senorblanco@chromium.org, reed@google.com
Author: arbesfeld@chromium.org
Review URL: https://chromiumcodereview.appspot.com/18533006
git-svn-id: http://skia.googlecode.com/svn/trunk@9902 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'src/effects/gradients/SkTwoPointConicalGradient.cpp')
-rw-r--r-- | src/effects/gradients/SkTwoPointConicalGradient.cpp | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/src/effects/gradients/SkTwoPointConicalGradient.cpp b/src/effects/gradients/SkTwoPointConicalGradient.cpp index 37b49f0d47..7cb094391a 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, |