aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/effects/gradients/SkRadialGradient.cpp
diff options
context:
space:
mode:
authorGravatar Herb Derby <herb@google.com>2017-05-08 15:10:36 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-05-09 03:46:57 +0000
commit090fbf86cf90dd326b3b3b59cde0a46b63a594a6 (patch)
treed9128b06915e2e79ac5b821d57d01e497a10a937 /src/effects/gradients/SkRadialGradient.cpp
parent599bf5831a69f194474d5154efc81284c27d5f3a (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.cpp31
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);
-}