diff --git a/include/core/SkShader.h b/include/core/SkShader.h index faaa0afc4b..c59cc59029 100644 --- a/include/core/SkShader.h +++ b/include/core/SkShader.h @@ -80,7 +80,7 @@ public: shadeSpan(). */ kConstInY32_Flag = 0x08, - + /** same as kConstInY32_Flag, but is set if this is true for shadeSpan16 which may not always be the case, since shadeSpan16 may be predithered, which would mean it was not const in Y, even though @@ -101,7 +101,7 @@ public: kHasSpan16_Flag is not set, this value is meaningless. */ virtual uint8_t getSpan16Alpha() const { return fPaintAlpha; } - + /** Called once before drawing, with the current paint and device matrix. Return true if your shader supports these parameters, or false if not. If false is returned, nothing @@ -144,7 +144,7 @@ public: */ virtual void beginSession(); virtual void endSession(); - + /** Gives method bitmap should be read to implement a shader. Also determines number and interpretation of "extra" parameters returned @@ -152,35 +152,35 @@ public: */ enum BitmapType { kNone_BitmapType, //INHERITED::endSession(); } -SkShader::BitmapType SkBitmapProcShader::asABitmap(SkBitmap* texture, - SkMatrix* texM, +SkShader::BitmapType SkBitmapProcShader::asABitmap(SkBitmap* texture, + SkMatrix* texM, TileMode xy[], - SkScalar* twoPointRadialParams) { + SkScalar* twoPointRadialParams) const { if (texture) { *texture = fRawBitmap; } @@ -95,7 +95,7 @@ bool SkBitmapProcShader::setContext(const SkBitmap& device, const SkBitmap& bitmap = *fState.fBitmap; bool bitmapIsOpaque = bitmap.isOpaque(); - + // update fFlags uint32_t flags = 0; if (bitmapIsOpaque && (255 == this->getPaintAlpha())) { @@ -182,7 +182,7 @@ void SkBitmapProcShader::shadeSpan(int x, int y, SkPMColor dstC[], int count) { } #endif sproc(state, buffer, n, dstC); - + if ((count -= n) == 0) { break; } @@ -198,7 +198,7 @@ void SkBitmapProcShader::shadeSpan16(int x, int y, uint16_t dstC[], int count) { state.fShaderProc16(state, x, y, dstC, count); return; } - + uint32_t buffer[BUF_MAX]; SkBitmapProcState::MatrixProc mproc = state.fMatrixProc; SkBitmapProcState::SampleProc16 sproc = state.fSampleProc16; @@ -215,7 +215,7 @@ void SkBitmapProcShader::shadeSpan16(int x, int y, uint16_t dstC[], int count) { } mproc(state, buffer, n, x, y); sproc(state, buffer, n, dstC); - + if ((count -= n) == 0) { break; } @@ -287,7 +287,7 @@ bool SkBitmapProcShader::toDumpString(SkString* str) const { str->printf("BitmapShader: [%d %d %d", fRawBitmap.width(), fRawBitmap.height(), fRawBitmap.bytesPerPixel()); - + // add the pixelref SkPixelRef* pr = fRawBitmap.pixelRef(); if (pr) { @@ -296,7 +296,7 @@ bool SkBitmapProcShader::toDumpString(SkString* str) const { str->appendf(" \"%s\"", uri); } } - + // add the (optional) matrix { SkMatrix m; @@ -306,7 +306,7 @@ bool SkBitmapProcShader::toDumpString(SkString* str) const { str->appendf(" %s", info.c_str()); } } - + str->appendf(" [%s %s]]", gTileModeName[fState.fTileModeX], gTileModeName[fState.fTileModeY]); diff --git a/src/core/SkBitmapProcShader.h b/src/core/SkBitmapProcShader.h index 88598fc1fb..bd19b751d9 100644 --- a/src/core/SkBitmapProcShader.h +++ b/src/core/SkBitmapProcShader.h @@ -2,16 +2,16 @@ ** ** 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 +** 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 +** 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 +** 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. */ @@ -32,12 +32,12 @@ public: virtual void shadeSpan16(int x, int y, uint16_t dstC[], int count); virtual void beginSession(); virtual void endSession(); - virtual BitmapType asABitmap(SkBitmap*, SkMatrix*, TileMode*, - SkScalar* twoPointRadialParams); + virtual BitmapType asABitmap(SkBitmap*, SkMatrix*, TileMode*, + SkScalar* twoPointRadialParams) const; static bool CanDo(const SkBitmap&, TileMode tx, TileMode ty); - static SkFlattenable* CreateProc(SkFlattenableReadBuffer& buffer) { + static SkFlattenable* CreateProc(SkFlattenableReadBuffer& buffer) { return SkNEW_ARGS(SkBitmapProcShader, (buffer)); } @@ -53,7 +53,7 @@ protected: SkBitmapProcState fState; uint32_t fFlags; -private: +private: typedef SkShader INHERITED; }; diff --git a/src/core/SkShader.cpp b/src/core/SkShader.cpp index 6798bec888..015389ebd1 100644 --- a/src/core/SkShader.cpp +++ b/src/core/SkShader.cpp @@ -2,16 +2,16 @@ ** ** 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 +** 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 +** 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 +** 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. */ @@ -120,7 +120,7 @@ void SkShader::shadeSpan16(int x, int y, uint16_t span16[], int count) { } #define kTempColorQuadCount 6 // balance between speed (larger) and saving stack-space -#define kTempColorCount (kTempColorQuadCount << 2) +#define kTempColorCount (kTempColorQuadCount << 2) #ifdef SK_CPU_BENDIAN #define SkU32BitShiftToByteOffset(shift) (3 - ((shift) >> 3)) @@ -198,7 +198,7 @@ SkShader::MatrixClass SkShader::ComputeMatrixClass(const SkMatrix& mat) { ////////////////////////////////////////////////////////////////////////////// SkShader::BitmapType SkShader::asABitmap(SkBitmap*, SkMatrix*, - TileMode*, SkScalar*) { + TileMode*, SkScalar*) const { return kNone_BitmapType; } @@ -311,7 +311,7 @@ void SkColorShader::shadeSpanAlpha(int x, int y, uint8_t alpha[], int count) { // if we had a asAColor method, that would be more efficient... SkShader::BitmapType SkColorShader::asABitmap(SkBitmap* bitmap, SkMatrix* matrix, - TileMode modes[], + TileMode modes[], SkScalar* twoPointRadialParams) { // we cache the pixelref, since its generateID is used in the texture cache if (NULL == fAsABitmapPixelRef) { @@ -320,7 +320,7 @@ SkShader::BitmapType SkColorShader::asABitmap(SkBitmap* bitmap, SkMatrix* matrix fAsABitmapPixelRef = new SkMallocPixelRef(storage, sizeof(SkPMColor), NULL); } - + if (bitmap) { bitmap->setConfig(SkBitmap::kARGB_8888_Config, 1, 1); bitmap->setPixelRef(fAsABitmapPixelRef); diff --git a/src/effects/SkGradientShader.cpp b/src/effects/SkGradientShader.cpp index 41b97cc4c3..34522122ab 100644 --- a/src/effects/SkGradientShader.cpp +++ b/src/effects/SkGradientShader.cpp @@ -123,12 +123,10 @@ protected: kCache32Count = 1 << kCache32Bits }; virtual void flatten(SkFlattenableWriteBuffer& ); - const uint16_t* getCache16(); - const SkPMColor* getCache32(); + const uint16_t* getCache16() const; + const SkPMColor* getCache32() const; - SkMallocPixelRef* fCache32PixelRef; - - void commonAsABitmap(SkBitmap*); + void commonAsABitmap(SkBitmap*) const; void commonAsAGradient(GradientInfo*) const; private: @@ -140,10 +138,11 @@ private: SkColor fStorage[(kStorageSize + 3) >> 2]; SkColor* fOrigColors; - uint16_t* fCache16; // working ptr. If this is NULL, we need to recompute the cache values - SkPMColor* fCache32; // working ptr. If this is NULL, we need to recompute the cache values + mutable uint16_t* fCache16; // working ptr. If this is NULL, we need to recompute the cache values + mutable SkPMColor* fCache32; // working ptr. If this is NULL, we need to recompute the cache values - uint16_t* fCache16Storage; // storage for fCache16, allocated on demand + mutable uint16_t* fCache16Storage; // storage for fCache16, allocated on demand + mutable SkMallocPixelRef* fCache32PixelRef; unsigned fCacheAlpha; // the alpha value we used when we computed the cache. larger than 8bits so we can store uninitialized value static void Build16bitCache(uint16_t[], SkColor c0, SkColor c1, int count); @@ -536,7 +535,7 @@ static inline U16CPU bitsTo16(unsigned x, const unsigned bits) { return 0; } -const uint16_t* Gradient_Shader::getCache16() { +const uint16_t* Gradient_Shader::getCache16() const { if (fCache16 == NULL) { // double the count for dither entries const int entryCount = kCache16Count * 2; @@ -579,7 +578,7 @@ const uint16_t* Gradient_Shader::getCache16() { return fCache16; } -const SkPMColor* Gradient_Shader::getCache32() { +const SkPMColor* Gradient_Shader::getCache32() const { if (fCache32 == NULL) { // double the count for dither entries const int entryCount = kCache32Count * 2; @@ -636,7 +635,7 @@ const SkPMColor* Gradient_Shader::getCache32() { * colors and positions. Note: we don't try to flatten the fMapper, so if one * is present, we skip the cache for now. */ -void Gradient_Shader::commonAsABitmap(SkBitmap* bitmap) { +void Gradient_Shader::commonAsABitmap(SkBitmap* bitmap) const { // don't have a way to put the mapper into our cache-key yet if (fMapper) { // force our cahce32pixelref to be built @@ -741,7 +740,7 @@ public: virtual void shadeSpan(int x, int y, SkPMColor dstC[], int count); virtual void shadeSpan16(int x, int y, uint16_t dstC[], int count); virtual BitmapType asABitmap(SkBitmap*, SkMatrix*, - TileMode*, SkScalar* twoPointRadialParams); + TileMode*, SkScalar* twoPointRadialParams) const; virtual GradientType asAGradient(GradientInfo* info) const; static SkFlattenable* CreateProc(SkFlattenableReadBuffer& buffer) { @@ -875,7 +874,7 @@ void Linear_Gradient::shadeSpan(int x, int y, SkPMColor dstC[], int count) SkShader::BitmapType Linear_Gradient::asABitmap(SkBitmap* bitmap, SkMatrix* matrix, TileMode xy[], - SkScalar* twoPointRadialParams) { + SkScalar* twoPointRadialParams) const { if (bitmap) { this->commonAsABitmap(bitmap); } @@ -1236,7 +1235,7 @@ public: virtual BitmapType asABitmap(SkBitmap* bitmap, SkMatrix* matrix, TileMode* xy, - SkScalar* twoPointRadialParams) { + SkScalar* twoPointRadialParams) const { if (bitmap) { this->commonAsABitmap(bitmap); } @@ -1388,7 +1387,7 @@ public: virtual BitmapType asABitmap(SkBitmap* bitmap, SkMatrix* matrix, TileMode* xy, - SkScalar* twoPointRadialParams) { + SkScalar* twoPointRadialParams) const { if (bitmap) { this->commonAsABitmap(bitmap); } @@ -1604,7 +1603,7 @@ public: virtual BitmapType asABitmap(SkBitmap* bitmap, SkMatrix* matrix, TileMode* xy, - SkScalar* twoPointRadialParams) { + SkScalar* twoPointRadialParams) const { if (bitmap) { this->commonAsABitmap(bitmap); }