diff options
author | 2017-05-08 15:10:36 -0400 | |
---|---|---|
committer | 2017-05-09 03:46:57 +0000 | |
commit | 090fbf86cf90dd326b3b3b59cde0a46b63a594a6 (patch) | |
tree | d9128b06915e2e79ac5b821d57d01e497a10a937 /src/effects/gradients/SkRadialGradient.cpp | |
parent | 599bf5831a69f194474d5154efc81284c27d5f3a (diff) |
Add radial gradient stage.
Change-Id: Ie1f9640f5149f21bd8b3b864ff8b176232e1b0a9
Reviewed-on: https://skia-review.googlesource.com/15461
Reviewed-by: Florin Malita <fmalita@chromium.org>
Commit-Queue: Herb Derby <herb@google.com>
Diffstat (limited to 'src/effects/gradients/SkRadialGradient.cpp')
-rw-r--r-- | src/effects/gradients/SkRadialGradient.cpp | 31 |
1 files changed, 22 insertions, 9 deletions
diff --git a/src/effects/gradients/SkRadialGradient.cpp b/src/effects/gradients/SkRadialGradient.cpp index 6a1a19f001..2133227403 100644 --- a/src/effects/gradients/SkRadialGradient.cpp +++ b/src/effects/gradients/SkRadialGradient.cpp @@ -376,6 +376,28 @@ sk_sp<SkShader> SkRadialGradient::onMakeColorSpace(SkColorSpaceXformer* xformer) &this->getLocalMatrix()); } +bool SkRadialGradient::adjustMatrixAndAppendStages(SkArenaAlloc* alloc, + SkMatrix* matrix, + SkRasterPipeline* p) const { + matrix->postTranslate(-fCenter.fX, -fCenter.fY); + matrix->postScale(1/fRadius, 1/fRadius); + + p->append(SkRasterPipeline::xy_to_radius); + + switch(fTileMode) { + case kMirror_TileMode: p->append(SkRasterPipeline::mirror_x, alloc->make<float>(1)); break; + case kRepeat_TileMode: p->append(SkRasterPipeline::repeat_x, alloc->make<float>(1)); break; + case kClamp_TileMode: + if (fColorCount == 2 && fOrigPos == nullptr) { + // The general strategy does not need clamping due to implicit hard stops at 0 and 1, + // but the 2-point specialization must be clamped. + p->append(SkRasterPipeline::clamp_x, alloc->make<float>(1)); + } + } + + return true; +} + #ifndef SK_IGNORE_TO_STRING void SkRadialGradient::toString(SkString* str) const { str->append("SkRadialGradient: ("); @@ -393,12 +415,3 @@ void SkRadialGradient::toString(SkString* str) const { str->append(")"); } #endif - -bool SkRadialGradient::onAppendStages(SkRasterPipeline* p, - SkColorSpace* dstCS, - SkArenaAlloc* alloc, - const SkMatrix& ctm, - const SkPaint& paint, - const SkMatrix* localM) const { - return SkShader::onAppendStages(p, dstCS, alloc, ctm, paint, localM); -} |