Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / third_party / skia / src / effects / SkTransparentShader.cpp
index b6a5e1e..f290d0d 100644 (file)
 #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::onCreateContext(const ContextRec& rec,
+                                                        void* storage) const {
+    return SkNEW_PLACEMENT_ARGS(storage, TransparentShaderContext, (*this, rec));
+}
 
-    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 ContextRec& rec)
+    : INHERITED(shader, rec)
+    , fDevice(rec.fDevice) {}
+
+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 (this->getPaintAlpha() == 255)
                 flags |= kOpaqueAlpha_Flag;
             break;
-        case kPMColor_SkColorType:
-            if (fAlpha == 255 && fDevice->isOpaque())
+        case kN32_SkColorType:
+            if (this->getPaintAlpha() == 255 && fDevice->isOpaque())
                 flags |= kOpaqueAlpha_Flag;
             break;
         default:
@@ -39,11 +46,12 @@ 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(this->getPaintAlpha());
 
     switch (fDevice->colorType()) {
-        case kPMColor_SkColorType:
+        case kN32_SkColorType:
             if (scale == 256) {
                 SkPMColor* src = fDevice->getAddr32(x, y);
                 if (src != span) {
@@ -63,7 +71,7 @@ void SkTransparentShader::shadeSpan(int x, int y, SkPMColor span[], int count) {
                     span[i] = SkPixel16ToPixel32(src[i]);
                 }
             } else {
-                unsigned alpha = fAlpha;
+                unsigned alpha = this->getPaintAlpha();
                 for (int i = count - 1; i >= 0; --i) {
                     uint16_t c = src[i];
                     unsigned r = SkPacked16ToR32(c);
@@ -97,7 +105,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);