diff -r 000000000000 -r 6474c204b198 gfx/skia/trunk/src/animator/SkDrawShader.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gfx/skia/trunk/src/animator/SkDrawShader.cpp Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,83 @@ + +/* + * 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 "SkDrawShader.h" +#include "SkDrawBitmap.h" +#include "SkDrawMatrix.h" +#include "SkDrawPaint.h" +#include "SkTemplates.h" + +#if SK_USE_CONDENSED_INFO == 0 + +const SkMemberInfo SkDrawShader::fInfo[] = { + SK_MEMBER(matrix, Matrix), + SK_MEMBER(tileMode, TileMode) +}; + +#endif + +DEFINE_GET_MEMBER(SkDrawShader); + +SkDrawShader::SkDrawShader() : matrix(NULL), + tileMode(SkShader::kClamp_TileMode) { +} + +bool SkDrawShader::add() { + if (fPaint->shader != (SkDrawShader*) -1) + return true; + fPaint->shader = this; + fPaint->fOwnsShader = true; + return false; +} + +void SkDrawShader::addPostlude(SkShader* shader) { + if (matrix) + shader->setLocalMatrix(matrix->getMatrix()); +} + +#if SK_USE_CONDENSED_INFO == 0 + +const SkMemberInfo SkDrawBitmapShader::fInfo[] = { + SK_MEMBER_INHERITED, + SK_MEMBER(filterBitmap, Boolean), + SK_MEMBER(image, BaseBitmap) +}; + +#endif + +DEFINE_GET_MEMBER(SkDrawBitmapShader); + +SkDrawBitmapShader::SkDrawBitmapShader() : filterBitmap(-1), image(NULL) {} + +bool SkDrawBitmapShader::add() { + if (fPaint->shader != (SkDrawShader*) -1) + return true; + fPaint->shader = this; + fPaint->fOwnsShader = true; + return false; +} + +SkShader* SkDrawBitmapShader::getShader() { + if (image == NULL) + return NULL; + + // note: bitmap shader now supports independent tile modes for X and Y + // we pass the same to both, but later we should extend this flexibility + // to the xml (e.g. tileModeX="repeat" tileModeY="clmap") + // + // oops, bitmapshader no longer takes filterBitmap, but deduces it at + // draw-time from the paint + SkShader* shader = SkShader::CreateBitmapShader(image->fBitmap, + (SkShader::TileMode) tileMode, + (SkShader::TileMode) tileMode); + SkAutoTDelete autoDel(shader); + addPostlude(shader); + (void)autoDel.detach(); + return shader; +}