diff options
author | Mike Klein <mtklein@chromium.org> | 2017-05-06 12:45:50 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-05-08 15:17:11 +0000 |
commit | 9bb75afed422f087ee68a53956c46b83c0aade34 (patch) | |
tree | 2a4b360bc25ed7026727e0901cc18cc228824909 /src | |
parent | c2dd5ed93753dc54619fb713ebcf38bd1af08592 (diff) |
Tighten up gradient clamp logic.
This is just a little refactor. Shouldn't change any logic or pixels.
Change-Id: I782df78f2d693dc7e35c286b049730e763aa3dc8
Reviewed-on: https://skia-review.googlesource.com/15653
Reviewed-by: Florin Malita <fmalita@chromium.org>
Reviewed-by: Herb Derby <herb@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
Diffstat (limited to 'src')
-rw-r--r-- | src/effects/gradients/SkLinearGradient.cpp | 24 |
1 files changed, 9 insertions, 15 deletions
diff --git a/src/effects/gradients/SkLinearGradient.cpp b/src/effects/gradients/SkLinearGradient.cpp index 0b51da1ec1..1c3dbffa99 100644 --- a/src/effects/gradients/SkLinearGradient.cpp +++ b/src/effects/gradients/SkLinearGradient.cpp @@ -92,21 +92,15 @@ bool SkLinearGradient::adjustMatrixAndAppendStages(SkArenaAlloc* alloc, SkVector dx = matrix->mapVector(1, 0); if (dx.fX >= 4) { return false; } - auto* limit = alloc->make<float>(1.0f); - if (fColorCount == 2 && fOrigPos == nullptr) { - switch (fTileMode) { - case kClamp_TileMode: p->append(SkRasterPipeline::clamp_x, limit); break; - case kMirror_TileMode: p->append(SkRasterPipeline::mirror_x, limit); break; - case kRepeat_TileMode: p->append(SkRasterPipeline::repeat_x, limit); break; - } - } else { - switch (fTileMode) { - // The search strategy does not need clamping. It has implicit hard stops at the - // first and last stop. - case kClamp_TileMode: break; - case kMirror_TileMode: p->append(SkRasterPipeline::mirror_x, limit); break; - case kRepeat_TileMode: p->append(SkRasterPipeline::repeat_x, limit); break; - } + 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; } |