Index: skia/effects/SkTransparentShader.cpp |
=================================================================== |
--- skia/effects/SkTransparentShader.cpp (revision 16859) |
+++ skia/effects/SkTransparentShader.cpp (working copy) |
@@ -1,144 +0,0 @@ |
-/* libs/graphics/effects/SkTransparentShader.cpp |
-** |
-** Copyright 2006, The Android Open Source Project |
-** |
-** Licensed under the Apache License, Version 2.0 (the "License"); |
-** you may not use this file except in compliance with the License. |
-** You may obtain a copy of the License at |
-** |
-** http://www.apache.org/licenses/LICENSE-2.0 |
-** |
-** Unless required by applicable law or agreed to in writing, software |
-** distributed under the License is distributed on an "AS IS" BASIS, |
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
-** See the License for the specific language governing permissions and |
-** limitations under the License. |
-*/ |
- |
-#include "SkTransparentShader.h" |
-#include "SkColorPriv.h" |
- |
-bool SkTransparentShader::setContext(const SkBitmap& device, |
- const SkPaint& paint, |
- const SkMatrix& matrix) |
-{ |
- fDevice = &device; |
- fAlpha = paint.getAlpha(); |
- |
- return this->INHERITED::setContext(device, paint, matrix); |
-} |
- |
-uint32_t SkTransparentShader::getFlags() |
-{ |
- uint32_t flags = this->INHERITED::getFlags(); |
- |
- switch (fDevice->getConfig()) { |
- case SkBitmap::kRGB_565_Config: |
- flags |= kHasSpan16_Flag; |
- if (fAlpha == 255) |
- flags |= kOpaqueAlpha_Flag; |
- break; |
- case SkBitmap::kARGB_8888_Config: |
- case SkBitmap::kARGB_4444_Config: |
- if (fAlpha == 255 && fDevice->isOpaque()) |
- flags |= kOpaqueAlpha_Flag; |
- break; |
- default: |
- break; |
- } |
- return flags; |
-} |
- |
-void SkTransparentShader::shadeSpan(int x, int y, SkPMColor span[], int count) |
-{ |
- unsigned scale = SkAlpha255To256(fAlpha); |
- |
- switch (fDevice->getConfig()) { |
- case SkBitmap::kARGB_8888_Config: |
- if (scale == 256) |
- memcpy(span, fDevice->getAddr32(x, y), count * sizeof(SkPMColor)); |
- else |
- { |
- const SkPMColor* src = fDevice->getAddr32(x, y); |
- for (int i = count - 1; i >= 0; --i) |
- span[i] = SkAlphaMulQ(src[i], scale); |
- } |
- break; |
- case SkBitmap::kRGB_565_Config: |
- { |
- const uint16_t* src = fDevice->getAddr16(x, y); |
- if (scale == 256) |
- { |
- for (int i = count - 1; i >= 0; --i) |
- span[i] = SkPixel16ToPixel32(src[i]); |
- } |
- else |
- { |
- unsigned alpha = fAlpha; |
- for (int i = count - 1; i >= 0; --i) |
- { |
- uint16_t c = src[i]; |
- unsigned r = SkPacked16ToR32(c); |
- unsigned g = SkPacked16ToG32(c); |
- unsigned b = SkPacked16ToB32(c); |
- |
- span[i] = SkPackARGB32( alpha, |
- SkAlphaMul(r, scale), |
- SkAlphaMul(g, scale), |
- SkAlphaMul(b, scale)); |
- } |
- } |
- } |
- break; |
- case SkBitmap::kARGB_4444_Config: |
- { |
- const uint16_t* src = fDevice->getAddr16(x, y); |
- if (scale == 256) |
- { |
- for (int i = count - 1; i >= 0; --i) |
- span[i] = SkPixel4444ToPixel32(src[i]); |
- } |
- else |
- { |
- unsigned scale16 = scale >> 4; |
- for (int i = count - 1; i >= 0; --i) |
- { |
- uint32_t c = SkExpand_4444(src[i]) * scale16; |
- span[i] = SkCompact_8888(c); |
- } |
- } |
- } |
- break; |
- case SkBitmap::kIndex8_Config: |
- SkASSERT(!"index8 not supported as a destination device"); |
- break; |
- case SkBitmap::kA8_Config: |
- { |
- const uint8_t* src = fDevice->getAddr8(x, y); |
- if (scale == 256) |
- { |
- for (int i = count - 1; i >= 0; --i) |
- span[i] = SkPackARGB32(src[i], 0, 0, 0); |
- } |
- else |
- { |
- for (int i = count - 1; i >= 0; --i) |
- span[i] = SkPackARGB32(SkAlphaMul(src[i], scale), 0, 0, 0); |
- } |
- } |
- break; |
- case SkBitmap::kA1_Config: |
- SkASSERT(!"kA1_Config umimplemented at this time"); |
- break; |
- default: // to avoid warnings |
- break; |
- } |
-} |
- |
-void SkTransparentShader::shadeSpan16(int x, int y, uint16_t span[], int count) |
-{ |
- SkASSERT(fDevice->getConfig() == SkBitmap::kRGB_565_Config); |
- |
- memcpy(span, fDevice->getAddr16(x, y), count << 1); |
-} |
- |