diff options
author | 2013-09-17 17:17:47 +0000 | |
---|---|---|
committer | 2013-09-17 17:17:47 +0000 | |
commit | 8135323f70b38e465761ab3e9817183750e3864d (patch) | |
tree | 3988f7a6135fd49213f7872da38619cbddd3b1b4 /src/pdf/SkPDFShader.cpp | |
parent | 5e5239ed35dcac2a42c4780baa7846b751111895 (diff) |
pdf: ifgnore shader colors applied for 0 range.
R=vandebo@chromium.org
Review URL: https://codereview.chromium.org/23654044
git-svn-id: http://skia.googlecode.com/svn/trunk@11322 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'src/pdf/SkPDFShader.cpp')
-rw-r--r-- | src/pdf/SkPDFShader.cpp | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/pdf/SkPDFShader.cpp b/src/pdf/SkPDFShader.cpp index fa0587fc50..80ea2f2ce7 100644 --- a/src/pdf/SkPDFShader.cpp +++ b/src/pdf/SkPDFShader.cpp @@ -55,6 +55,7 @@ static void unitToPointsMatrix(const SkPoint pts[2], SkMatrix* matrix) { */ static void interpolateColorCode(SkScalar range, SkScalar* curColor, SkScalar* prevColor, SkString* result) { + SkASSERT(range != SkIntToScalar(0)); static const int kColorComponents = 3; // Figure out how to scale each color component. @@ -152,7 +153,13 @@ static void gradientFunctionCode(const SkShader::GradientInfo& info, result->append(" }\n"); // The gradient colors. + int gradients = 0; for (int i = 1 ; i < info.fColorCount; i++) { + if (info.fColorOffsets[i] == info.fColorOffsets[i - 1]) { + continue; + } + gradients++; + result->append("{dup "); result->appendScalar(info.fColorOffsets[i]); result->append(" le {"); @@ -174,7 +181,7 @@ static void gradientFunctionCode(const SkShader::GradientInfo& info, result->append(" "); result->appendScalar(colorData[info.fColorCount - 1][2]); - for (int i = 0 ; i < info.fColorCount; i++) { + for (int i = 0 ; i < gradients + 1; i++) { result->append("} ifelse\n"); } } |