diff options
author | commit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2014-05-05 21:35:09 +0000 |
---|---|---|
committer | commit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2014-05-05 21:35:09 +0000 |
commit | 906d53254a52176845090a280eac25ea24453507 (patch) | |
tree | 94a7c8cb4a10d9f9e210eab31e72f5a05efbafee | |
parent | 54e55c5fa25d524d596c838b6e1dcd88a0b94eaf (diff) | |
download | src-906d53254a52176845090a280eac25ea24453507.tar.gz |
fix TriColorShader to respect the paint's alpha
results can be seen in new gm: vertices_80
BUG=skia:
R=scroggo@google.com
Author: reed@google.com
Review URL: https://codereview.chromium.org/270023002
git-svn-id: http://skia.googlecode.com/svn/trunk/src@14581 2bbb7eff-a529-9590-31e7-b0007b416f81
-rw-r--r-- | core/SkDraw.cpp | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/core/SkDraw.cpp b/core/SkDraw.cpp index a74e3c0f..9347efe4 100644 --- a/core/SkDraw.cpp +++ b/core/SkDraw.cpp @@ -2432,6 +2432,8 @@ size_t SkTriColorShader::contextSize() const { return sizeof(TriColorShaderContext); } void SkTriColorShader::TriColorShaderContext::shadeSpan(int x, int y, SkPMColor dstC[], int count) { + const int alphaScale = Sk255To256(this->getPaintAlpha()); + SkPoint src; for (int i = 0; i < count; i++) { @@ -2450,9 +2452,15 @@ void SkTriColorShader::TriColorShaderContext::shadeSpan(int x, int y, SkPMColor scale0 = 0; } + if (256 != alphaScale) { + scale0 = SkAlphaMul(scale0, alphaScale); + scale1 = SkAlphaMul(scale1, alphaScale); + scale2 = SkAlphaMul(scale2, alphaScale); + } + dstC[i] = SkAlphaMulQ(fColors[0], scale0) + - SkAlphaMulQ(fColors[1], scale1) + - SkAlphaMulQ(fColors[2], scale2); + SkAlphaMulQ(fColors[1], scale1) + + SkAlphaMulQ(fColors[2], scale2); } } |