diff options
-rw-r--r-- | gyp/animator.gyp | 2 | ||||
-rw-r--r-- | gyp/effects.gypi | 2 | ||||
-rw-r--r-- | include/core/SkShader.h | 10 | ||||
-rw-r--r-- | include/effects/SkTransparentShader.h | 47 | ||||
-rw-r--r-- | samplecode/SampleAll.cpp | 4 | ||||
-rw-r--r-- | samplecode/SampleShaders.cpp | 7 | ||||
-rw-r--r-- | src/animator/SkDisplayType.cpp | 5 | ||||
-rw-r--r-- | src/animator/SkDrawTransparentShader.cpp | 15 | ||||
-rw-r--r-- | src/animator/SkDrawTransparentShader.h | 18 | ||||
-rw-r--r-- | src/core/SkBlitter.cpp | 10 | ||||
-rw-r--r-- | src/core/SkDraw.cpp | 3 | ||||
-rw-r--r-- | src/effects/SkTransparentShader.cpp | 130 |
12 files changed, 11 insertions, 242 deletions
diff --git a/gyp/animator.gyp b/gyp/animator.gyp index 8c682bdbec..e267756724 100644 --- a/gyp/animator.gyp +++ b/gyp/animator.gyp @@ -132,8 +132,6 @@ '../src/animator/SkDrawTextBox.h', '../src/animator/SkDrawTo.cpp', '../src/animator/SkDrawTo.h', - '../src/animator/SkDrawTransparentShader.cpp', - '../src/animator/SkDrawTransparentShader.h', '../src/animator/SkDump.cpp', '../src/animator/SkDump.h', '../src/animator/SkExtras.h', diff --git a/gyp/effects.gypi b/gyp/effects.gypi index 8b90a45137..edba3c726c 100644 --- a/gyp/effects.gypi +++ b/gyp/effects.gypi @@ -60,7 +60,6 @@ '<(skia_src_path)/effects/SkTableMaskFilter.cpp', '<(skia_src_path)/effects/SkTestImageFilters.cpp', '<(skia_src_path)/effects/SkTileImageFilter.cpp', - '<(skia_src_path)/effects/SkTransparentShader.cpp', '<(skia_src_path)/effects/SkXfermodeImageFilter.cpp', '<(skia_src_path)/effects/gradients/SkClampRange.cpp', @@ -116,7 +115,6 @@ '<(skia_include_path)/effects/SkTableColorFilter.h', '<(skia_include_path)/effects/SkTableMaskFilter.h', '<(skia_include_path)/effects/SkTileImageFilter.h', - '<(skia_include_path)/effects/SkTransparentShader.h', '<(skia_include_path)/effects/SkMagnifierImageFilter.h', ], } diff --git a/include/core/SkShader.h b/include/core/SkShader.h index 4c4dba3e32..3739c9c73c 100644 --- a/include/core/SkShader.h +++ b/include/core/SkShader.h @@ -5,7 +5,6 @@ * found in the LICENSE file. */ - #ifndef SkShader_DEFINED #define SkShader_DEFINED @@ -114,14 +113,11 @@ public: * ContextRec acts as a parameter bundle for creating Contexts. */ struct ContextRec { - ContextRec() : fDevice(NULL), fPaint(NULL), fMatrix(NULL), fLocalMatrix(NULL) {} - ContextRec(const SkBitmap& device, const SkPaint& paint, const SkMatrix& matrix) - : fDevice(&device) - , fPaint(&paint) + ContextRec(const SkPaint& paint, const SkMatrix& matrix, const SkMatrix* localM) + : fPaint(&paint) , fMatrix(&matrix) - , fLocalMatrix(NULL) {} + , fLocalMatrix(localM) {} - const SkBitmap* fDevice; // the bitmap we are drawing into const SkPaint* fPaint; // the current paint associated with the draw const SkMatrix* fMatrix; // the current matrix in the canvas const SkMatrix* fLocalMatrix; // optional local matrix diff --git a/include/effects/SkTransparentShader.h b/include/effects/SkTransparentShader.h deleted file mode 100644 index 11aa086fa4..0000000000 --- a/include/effects/SkTransparentShader.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright 2006 The Android Open Source Project - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -#ifndef SkTransparentShader_DEFINED -#define SkTransparentShader_DEFINED - -#include "SkShader.h" - -class SK_API SkTransparentShader : public SkShader { -public: - SkTransparentShader() {} - - size_t contextSize() const override; - - class TransparentShaderContext : public SkShader::Context { - public: - TransparentShaderContext(const SkTransparentShader& shader, const ContextRec&); - virtual ~TransparentShaderContext(); - - uint32_t getFlags() const override; - void shadeSpan(int x, int y, SkPMColor[], int count) override; - void shadeSpan16(int x, int y, uint16_t span[], int count) override; - - private: - const SkBitmap* fDevice; - - typedef SkShader::Context INHERITED; - }; - - SK_TO_STRING_OVERRIDE() - SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkTransparentShader) - -protected: - Context* onCreateContext(const ContextRec&, void* storage) const override; - - // we don't need to flatten anything at all - void flatten(SkWriteBuffer&) const override {} - -private: - typedef SkShader INHERITED; -}; - -#endif diff --git a/samplecode/SampleAll.cpp b/samplecode/SampleAll.cpp index 9a39ef9d76..667bcc3054 100644 --- a/samplecode/SampleAll.cpp +++ b/samplecode/SampleAll.cpp @@ -33,7 +33,6 @@ #include "SkPathMeasure.h" #include "SkPicture.h" #include "SkRandom.h" -#include "SkTransparentShader.h" #include "SkTypeface.h" #include "SkUtils.h" #include "SkXfermode.h" @@ -376,7 +375,6 @@ protected: radialRadius, radialColors, radialPos, radialCount, radialMode); - SkTransparentShader* transparentShader = new SkTransparentShader(); SkEmbossMaskFilter::Light light; light.fDirection[0] = SK_Scalar1/2; light.fDirection[1] = SK_Scalar1/2; @@ -428,7 +426,7 @@ protected: paint.setMaskFilter(embossFilter)->unref(); canvas->drawOval(rect, paint); canvas->translate(SkIntToScalar(10), SkIntToScalar(10)); - paint.setShader(transparentShader)->unref(); +// paint.setShader(transparentShader)->unref(); canvas->drawOval(rect, paint); canvas->translate(0, SkIntToScalar(-10)); diff --git a/samplecode/SampleShaders.cpp b/samplecode/SampleShaders.cpp index 093e14f4eb..a9a8cf9c17 100644 --- a/samplecode/SampleShaders.cpp +++ b/samplecode/SampleShaders.cpp @@ -20,7 +20,6 @@ #include "SkColorPriv.h" #include "SkColorFilter.h" #include "SkTime.h" -#include "SkTransparentShader.h" #include "SkTypeface.h" static SkShader* make_bitmapfade(const SkBitmap& bm) @@ -116,13 +115,9 @@ protected: canvas->drawRect(r, paint); paint.setShader(make_bitmapfade(fBitmap))->unref(); canvas->drawRect(r, paint); - - paint.setShader(new SkTransparentShader)->unref(); - canvas->drawRect(r, paint); } - virtual SkView::Click* onFindClickHandler(SkScalar x, SkScalar y, - unsigned modi) override { + SkView::Click* onFindClickHandler(SkScalar x, SkScalar y, unsigned modi) override { this->inval(NULL); return this->INHERITED::onFindClickHandler(x, y, modi); } diff --git a/src/animator/SkDisplayType.cpp b/src/animator/SkDisplayType.cpp index 4461a4b77b..87ea560d80 100644 --- a/src/animator/SkDisplayType.cpp +++ b/src/animator/SkDisplayType.cpp @@ -42,7 +42,6 @@ #include "SkDrawText.h" #include "SkDrawTextBox.h" #include "SkDrawTo.h" -#include "SkDrawTransparentShader.h" #include "SkDump.h" #include "SkExtras.h" #include "SkHitClear.h" @@ -196,7 +195,6 @@ SkDisplayable* SkDisplayType::CreateInstance(SkAnimateMaker* maker, SkDisplayTyp CASE_NEW(TextToPath); CASE_DEBUG_RETURN_NIL(TileMode); CASE_NEW(Translate); - CASE_DRAW_NEW(TransparentShader); CASE_DRAW_NEW(Typeface); CASE_DEBUG_RETURN_NIL(Xfermode); default: @@ -351,7 +349,6 @@ const SkMemberInfo* SkDisplayType::GetMembers(SkAnimateMaker* maker, CASE_GET_INFO(TextToPath); // tilemode CASE_GET_INFO(Translate); - // transparentshader CASE_GET_DRAW_INFO(Typeface); // xfermode // knumberoftypes @@ -518,7 +515,6 @@ const TypeNames gTypeNames[] = { { "textToPath", SkType_TextToPath INIT_BOOL_FIELDS }, // tilemode { "translate", SkType_Translate INIT_BOOL_FIELDS }, - DRAW_NAME("transparentShader", SkType_TransparentShader), { "typeface", SkType_Typeface INIT_BOOL_FIELDS } // xfermode // knumberoftypes @@ -679,7 +675,6 @@ bool SkDisplayType::IsDisplayable(SkAnimateMaker* , SkDisplayTypes type) { case SkType_TextOnPath: case SkType_TextToPath: case SkType_Translate: - case SkType_TransparentShader: return true; default: // to avoid warnings break; diff --git a/src/animator/SkDrawTransparentShader.cpp b/src/animator/SkDrawTransparentShader.cpp deleted file mode 100644 index 2f286f4bea..0000000000 --- a/src/animator/SkDrawTransparentShader.cpp +++ /dev/null @@ -1,15 +0,0 @@ - -/* - * Copyright 2006 The Android Open Source Project - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - - -#include "SkDrawTransparentShader.h" -#include "SkTransparentShader.h" - -SkShader* SkDrawTransparentShader::getShader() { - return new SkTransparentShader(); -} diff --git a/src/animator/SkDrawTransparentShader.h b/src/animator/SkDrawTransparentShader.h deleted file mode 100644 index 5b5b15660b..0000000000 --- a/src/animator/SkDrawTransparentShader.h +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Copyright 2006 The Android Open Source Project - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -#ifndef SkDrawTransparentShader_DEFINED -#define SkDrawTransparentShader_DEFINED - -#include "SkPaintPart.h" - -class SkDrawTransparentShader : public SkDrawShader { - DECLARE_EMPTY_MEMBER_INFO(TransparentShader); - SkShader* getShader() override; -}; - -#endif // SkDrawTransparentShader_DEFINED diff --git a/src/core/SkBlitter.cpp b/src/core/SkBlitter.cpp index 5276356206..2ac7b51180 100644 --- a/src/core/SkBlitter.cpp +++ b/src/core/SkBlitter.cpp @@ -864,7 +864,7 @@ SkBlitter* SkBlitter::Choose(const SkBitmap& device, */ SkShader::Context* shaderContext = NULL; if (shader) { - SkShader::ContextRec rec(device, *paint, matrix); + SkShader::ContextRec rec(*paint, matrix, NULL); size_t contextSize = shader->contextSize(); if (contextSize) { // Try to create the ShaderContext @@ -930,11 +930,11 @@ SkBlitter* SkBlitter::Choose(const SkBitmap& device, /////////////////////////////////////////////////////////////////////////////// -class SkTransparentShaderContext : public SkShader::Context { +class SkZeroShaderContext : public SkShader::Context { public: - SkTransparentShaderContext(const SkShader& shader, const SkShader::ContextRec& rec) + SkZeroShaderContext(const SkShader& shader, const SkShader::ContextRec& rec) // Override rec with the identity matrix, so it is guaranteed to be invertible. - : INHERITED(shader, SkShader::ContextRec(*rec.fDevice, *rec.fPaint, SkMatrix::I())) {} + : INHERITED(shader, SkShader::ContextRec(*rec.fPaint, SkMatrix::I(), NULL)) {} void shadeSpan(int x, int y, SkPMColor colors[], int count) override { sk_bzero(colors, count * sizeof(SkPMColor)); @@ -971,7 +971,7 @@ bool SkShaderBlitter::resetShaderContext(const SkShader::ContextRec& rec) { if (NULL == ctx) { // Need a valid context in fShaderContext's storage, so we can later (or our caller) call // the in-place destructor. - SkNEW_PLACEMENT_ARGS(fShaderContext, SkTransparentShaderContext, (*fShader, rec)); + SkNEW_PLACEMENT_ARGS(fShaderContext, SkZeroShaderContext, (*fShader, rec)); return false; } return true; diff --git a/src/core/SkDraw.cpp b/src/core/SkDraw.cpp index 0ecc27d491..ac69680811 100644 --- a/src/core/SkDraw.cpp +++ b/src/core/SkDraw.cpp @@ -2110,8 +2110,7 @@ void SkDraw::drawVertices(SkCanvas::VertexMode vmode, int count, if (textures) { SkMatrix tempM; if (texture_to_matrix(state, vertices, textures, &tempM)) { - SkShader::ContextRec rec(*fBitmap, p, *fMatrix); - rec.fLocalMatrix = &tempM; + SkShader::ContextRec rec(p, *fMatrix, &tempM); if (!blitter->resetShaderContext(rec)) { continue; } diff --git a/src/effects/SkTransparentShader.cpp b/src/effects/SkTransparentShader.cpp deleted file mode 100644 index aab5a3d85c..0000000000 --- a/src/effects/SkTransparentShader.cpp +++ /dev/null @@ -1,130 +0,0 @@ - -/* - * Copyright 2006 The Android Open Source Project - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - - -#include "SkTransparentShader.h" -#include "SkColorPriv.h" -#include "SkString.h" - -SkShader::Context* SkTransparentShader::onCreateContext(const ContextRec& rec, - void* storage) const { - return SkNEW_PLACEMENT_ARGS(storage, TransparentShaderContext, (*this, rec)); -} - -size_t SkTransparentShader::contextSize() const { - return sizeof(TransparentShaderContext); -} - -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 (this->getPaintAlpha() == 255) - flags |= kOpaqueAlpha_Flag; - break; - case kN32_SkColorType: - if (this->getPaintAlpha() == 255 && fDevice->isOpaque()) - flags |= kOpaqueAlpha_Flag; - break; - default: - break; - } - return flags; -} - -void SkTransparentShader::TransparentShaderContext::shadeSpan(int x, int y, SkPMColor span[], - int count) { - unsigned scale = SkAlpha255To256(this->getPaintAlpha()); - - switch (fDevice->colorType()) { - case kN32_SkColorType: - if (scale == 256) { - SkPMColor* src = fDevice->getAddr32(x, y); - if (src != span) { - memcpy(span, src, 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 kRGB_565_SkColorType: { - 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 = this->getPaintAlpha(); - 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 kAlpha_8_SkColorType: { - 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; - } - default: - SkDEBUGFAIL("colorType not supported as a destination device"); - break; - } -} - -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); - if (src != span) { - memcpy(span, src, count << 1); - } -} - -SkFlattenable* SkTransparentShader::CreateProc(SkReadBuffer& buffer) { - return SkNEW(SkTransparentShader); -} - -#ifndef SK_IGNORE_TO_STRING -void SkTransparentShader::toString(SkString* str) const { - str->append("SkTransparentShader: ("); - - this->INHERITED::toString(str); - - str->append(")"); -} -#endif |