Tighten up gradient clamp logic.
authorMike Klein <mtklein@chromium.org>
Sat, 6 May 2017 16:45:50 +0000 (12:45 -0400)
committerSkia Commit-Bot <skia-commit-bot@chromium.org>
Mon, 8 May 2017 15:17:11 +0000 (15:17 +0000)
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>

src/effects/gradients/SkLinearGradient.cpp

index 0b51da1..1c3dbff 100644 (file)
@@ -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;
 }