1 2 /* 3 * Copyright 2006 The Android Open Source Project 4 * 5 * Use of this source code is governed by a BSD-style license that can be 6 * found in the LICENSE file. 7 */ 8 9 10 #ifndef SkComposeShader_DEFINED 11 #define SkComposeShader_DEFINED 12 13 #include "SkShader.h" 14 15 class SkXfermode; 16 17 /////////////////////////////////////////////////////////////////////////////////////////// 18 19 /** \class SkComposeShader 20 This subclass of shader returns the coposition of two other shaders, combined by 21 a xfermode. 22 */ 23 class SK_API SkComposeShader : public SkShader { 24 public: 25 /** Create a new compose shader, given shaders A, B, and a combining xfermode mode. 26 When the xfermode is called, it will be given the result from shader A as its 27 "dst", and the result of from shader B as its "src". 28 mode->xfer32(sA_result, sB_result, ...) 29 @param shaderA The colors from this shader are seen as the "dst" by the xfermode 30 @param shaderB The colors from this shader are seen as the "src" by the xfermode 31 @param mode The xfermode that combines the colors from the two shaders. If mode 32 is null, then SRC_OVER is assumed. 33 */ 34 SkComposeShader(SkShader* sA, SkShader* sB, SkXfermode* mode = NULL); 35 virtual ~SkComposeShader(); 36 37 virtual bool setContext(const SkBitmap&, const SkPaint&, 38 const SkMatrix&) SK_OVERRIDE; 39 virtual void endContext() SK_OVERRIDE; 40 virtual void shadeSpan(int x, int y, SkPMColor[], int count) SK_OVERRIDE; 41 42 SK_DEVELOPER_TO_STRING() 43 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkComposeShader) 44 45 protected: 46 SkComposeShader(SkFlattenableReadBuffer& ); 47 virtual void flatten(SkFlattenableWriteBuffer&) const SK_OVERRIDE; 48 49 private: 50 51 SkShader* fShaderA; 52 SkShader* fShaderB; 53 SkXfermode* fMode; 54 55 typedef SkShader INHERITED; 56 }; 57 58 #endif 59