Chromium Code Reviews| Index: src/effects/SkTransparentShader.cpp |
| diff --git a/src/effects/SkTransparentShader.cpp b/src/effects/SkTransparentShader.cpp |
| index 9de4a0cc23423d14ec451d7f5237b554341aad90..dbd821c34eee19597100130a44ba6243ef318ef8 100644 |
| --- a/src/effects/SkTransparentShader.cpp |
| +++ b/src/effects/SkTransparentShader.cpp |
| @@ -11,26 +11,40 @@ |
| #include "SkColorPriv.h" |
| #include "SkString.h" |
| -bool SkTransparentShader::setContext(const SkBitmap& device, |
| - const SkPaint& paint, |
| - const SkMatrix& matrix) { |
| - fDevice = &device; |
| - fAlpha = paint.getAlpha(); |
| +SkShader::Context* SkTransparentShader::createContext(const SkBitmap& device, |
| + const SkPaint& paint, |
| + const SkMatrix& matrix, |
| + void* storage) const { |
| + if (!this->validContext(device, paint, matrix)) { |
| + return NULL; |
| + } |
| + |
| + return SkNEW_PLACEMENT_ARGS(storage, TransparentShaderContext, (*this, device, paint, matrix)); |
| +} |
| - return this->INHERITED::setContext(device, paint, matrix); |
| +size_t SkTransparentShader::contextSize() const { |
| + return sizeof(TransparentShaderContext); |
| } |
| -uint32_t SkTransparentShader::getFlags() { |
| +SkTransparentShader::TransparentShaderContext::TransparentShaderContext( |
| + const SkTransparentShader& shader, const SkBitmap& device, |
| + const SkPaint& paint, const SkMatrix& matrix) |
| + : INHERITED(shader, device, paint, matrix) |
| + , fDevice(&device) {} |
| + |
| +SkTransparentShader::TransparentShaderContext::~TransparentShaderContext() {} |
| + |
| +uint32_t SkTransparentShader::TransparentShaderContext::getFlags() const { |
| uint32_t flags = this->INHERITED::getFlags(); |
| switch (fDevice->colorType()) { |
| case kRGB_565_SkColorType: |
| flags |= kHasSpan16_Flag; |
| - if (fAlpha == 255) |
| + if (getPaintAlpha() == 255) |
|
scroggo
2014/03/26 23:13:09
style nit: When calling an objects own member func
Dominik Grewe
2014/03/27 14:27:20
Done.
|
| flags |= kOpaqueAlpha_Flag; |
| break; |
| case kPMColor_SkColorType: |
| - if (fAlpha == 255 && fDevice->isOpaque()) |
| + if (getPaintAlpha() == 255 && fDevice->isOpaque()) |
| flags |= kOpaqueAlpha_Flag; |
| break; |
| default: |
| @@ -39,8 +53,9 @@ uint32_t SkTransparentShader::getFlags() { |
| return flags; |
| } |
| -void SkTransparentShader::shadeSpan(int x, int y, SkPMColor span[], int count) { |
| - unsigned scale = SkAlpha255To256(fAlpha); |
| +void SkTransparentShader::TransparentShaderContext::shadeSpan(int x, int y, SkPMColor span[], |
| + int count) { |
| + unsigned scale = SkAlpha255To256(getPaintAlpha()); |
| switch (fDevice->colorType()) { |
| case kPMColor_SkColorType: |
| @@ -63,7 +78,7 @@ void SkTransparentShader::shadeSpan(int x, int y, SkPMColor span[], int count) { |
| span[i] = SkPixel16ToPixel32(src[i]); |
| } |
| } else { |
| - unsigned alpha = fAlpha; |
| + unsigned alpha = getPaintAlpha(); |
| for (int i = count - 1; i >= 0; --i) { |
| uint16_t c = src[i]; |
| unsigned r = SkPacked16ToR32(c); |
| @@ -97,7 +112,8 @@ void SkTransparentShader::shadeSpan(int x, int y, SkPMColor span[], int count) { |
| } |
| } |
| -void SkTransparentShader::shadeSpan16(int x, int y, uint16_t span[], int count) { |
| +void SkTransparentShader::TransparentShaderContext::shadeSpan16(int x, int y, uint16_t span[], |
| + int count) { |
| SkASSERT(fDevice->colorType() == kRGB_565_SkColorType); |
| uint16_t* src = fDevice->getAddr16(x, y); |