1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/gfx/skia/trunk/src/animator/SkDrawShader.cpp Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,83 @@ 1.4 + 1.5 +/* 1.6 + * Copyright 2006 The Android Open Source Project 1.7 + * 1.8 + * Use of this source code is governed by a BSD-style license that can be 1.9 + * found in the LICENSE file. 1.10 + */ 1.11 + 1.12 + 1.13 +#include "SkDrawShader.h" 1.14 +#include "SkDrawBitmap.h" 1.15 +#include "SkDrawMatrix.h" 1.16 +#include "SkDrawPaint.h" 1.17 +#include "SkTemplates.h" 1.18 + 1.19 +#if SK_USE_CONDENSED_INFO == 0 1.20 + 1.21 +const SkMemberInfo SkDrawShader::fInfo[] = { 1.22 + SK_MEMBER(matrix, Matrix), 1.23 + SK_MEMBER(tileMode, TileMode) 1.24 +}; 1.25 + 1.26 +#endif 1.27 + 1.28 +DEFINE_GET_MEMBER(SkDrawShader); 1.29 + 1.30 +SkDrawShader::SkDrawShader() : matrix(NULL), 1.31 + tileMode(SkShader::kClamp_TileMode) { 1.32 +} 1.33 + 1.34 +bool SkDrawShader::add() { 1.35 + if (fPaint->shader != (SkDrawShader*) -1) 1.36 + return true; 1.37 + fPaint->shader = this; 1.38 + fPaint->fOwnsShader = true; 1.39 + return false; 1.40 +} 1.41 + 1.42 +void SkDrawShader::addPostlude(SkShader* shader) { 1.43 + if (matrix) 1.44 + shader->setLocalMatrix(matrix->getMatrix()); 1.45 +} 1.46 + 1.47 +#if SK_USE_CONDENSED_INFO == 0 1.48 + 1.49 +const SkMemberInfo SkDrawBitmapShader::fInfo[] = { 1.50 + SK_MEMBER_INHERITED, 1.51 + SK_MEMBER(filterBitmap, Boolean), 1.52 + SK_MEMBER(image, BaseBitmap) 1.53 +}; 1.54 + 1.55 +#endif 1.56 + 1.57 +DEFINE_GET_MEMBER(SkDrawBitmapShader); 1.58 + 1.59 +SkDrawBitmapShader::SkDrawBitmapShader() : filterBitmap(-1), image(NULL) {} 1.60 + 1.61 +bool SkDrawBitmapShader::add() { 1.62 + if (fPaint->shader != (SkDrawShader*) -1) 1.63 + return true; 1.64 + fPaint->shader = this; 1.65 + fPaint->fOwnsShader = true; 1.66 + return false; 1.67 +} 1.68 + 1.69 +SkShader* SkDrawBitmapShader::getShader() { 1.70 + if (image == NULL) 1.71 + return NULL; 1.72 + 1.73 + // note: bitmap shader now supports independent tile modes for X and Y 1.74 + // we pass the same to both, but later we should extend this flexibility 1.75 + // to the xml (e.g. tileModeX="repeat" tileModeY="clmap") 1.76 + // 1.77 + // oops, bitmapshader no longer takes filterBitmap, but deduces it at 1.78 + // draw-time from the paint 1.79 + SkShader* shader = SkShader::CreateBitmapShader(image->fBitmap, 1.80 + (SkShader::TileMode) tileMode, 1.81 + (SkShader::TileMode) tileMode); 1.82 + SkAutoTDelete<SkShader> autoDel(shader); 1.83 + addPostlude(shader); 1.84 + (void)autoDel.detach(); 1.85 + return shader; 1.86 +}