aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/effects/gradients/SkLinearGradient.cpp24
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;
}