SkComposeShader.h revision 0910916c0f7b951ee55c4b7c6358295b9bca0565
1ce6c3389061fb9fcdefc94fab2044a8e11600b52Jesse Hall/* 2ce6c3389061fb9fcdefc94fab2044a8e11600b52Jesse Hall * Copyright (C) 2006 The Android Open Source Project 3ce6c3389061fb9fcdefc94fab2044a8e11600b52Jesse Hall * 4ce6c3389061fb9fcdefc94fab2044a8e11600b52Jesse Hall * Licensed under the Apache License, Version 2.0 (the "License"); 5ce6c3389061fb9fcdefc94fab2044a8e11600b52Jesse Hall * you may not use this file except in compliance with the License. 6ce6c3389061fb9fcdefc94fab2044a8e11600b52Jesse Hall * You may obtain a copy of the License at 7ce6c3389061fb9fcdefc94fab2044a8e11600b52Jesse Hall * 8ce6c3389061fb9fcdefc94fab2044a8e11600b52Jesse Hall * http://www.apache.org/licenses/LICENSE-2.0 9ce6c3389061fb9fcdefc94fab2044a8e11600b52Jesse Hall * 10ce6c3389061fb9fcdefc94fab2044a8e11600b52Jesse Hall * Unless required by applicable law or agreed to in writing, software 11ce6c3389061fb9fcdefc94fab2044a8e11600b52Jesse Hall * distributed under the License is distributed on an "AS IS" BASIS, 12ce6c3389061fb9fcdefc94fab2044a8e11600b52Jesse Hall * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ce6c3389061fb9fcdefc94fab2044a8e11600b52Jesse Hall * See the License for the specific language governing permissions and 14ce6c3389061fb9fcdefc94fab2044a8e11600b52Jesse Hall * limitations under the License. 15ce6c3389061fb9fcdefc94fab2044a8e11600b52Jesse Hall */ 16ce6c3389061fb9fcdefc94fab2044a8e11600b52Jesse Hall 17ce6c3389061fb9fcdefc94fab2044a8e11600b52Jesse Hall#ifndef SkComposeShader_DEFINED 18ce6c3389061fb9fcdefc94fab2044a8e11600b52Jesse Hall#define SkComposeShader_DEFINED 19ce6c3389061fb9fcdefc94fab2044a8e11600b52Jesse Hall 20ce6c3389061fb9fcdefc94fab2044a8e11600b52Jesse Hall#include "SkShader.h" 21ce6c3389061fb9fcdefc94fab2044a8e11600b52Jesse Hall 22ce6c3389061fb9fcdefc94fab2044a8e11600b52Jesse Hallclass SkXfermode; 23ce6c3389061fb9fcdefc94fab2044a8e11600b52Jesse Hall 24ce6c3389061fb9fcdefc94fab2044a8e11600b52Jesse Hall/////////////////////////////////////////////////////////////////////////////////////////// 25dca7f2a6ac56567850e0e03a063e1739e43c5ce2Jesse Hall 26ce6c3389061fb9fcdefc94fab2044a8e11600b52Jesse Hall/** \class SkComposeShader 27ce6c3389061fb9fcdefc94fab2044a8e11600b52Jesse Hall This subclass of shader returns the coposition of two other shaders, combined by 28ce6c3389061fb9fcdefc94fab2044a8e11600b52Jesse Hall a xfermode. 29ce6c3389061fb9fcdefc94fab2044a8e11600b52Jesse Hall*/ 30dca7f2a6ac56567850e0e03a063e1739e43c5ce2Jesse Hallclass SkComposeShader : public SkShader { 31ce6c3389061fb9fcdefc94fab2044a8e11600b52Jesse Hallpublic: 32dca7f2a6ac56567850e0e03a063e1739e43c5ce2Jesse Hall /** Create a new compose shader, given shaders A, B, and a combining xfermode mode. 33ce6c3389061fb9fcdefc94fab2044a8e11600b52Jesse Hall When the xfermode is called, it will be given the result from shader A as its 34ce6c3389061fb9fcdefc94fab2044a8e11600b52Jesse Hall "dst", and the result of from shader B as its "src". 35ce6c3389061fb9fcdefc94fab2044a8e11600b52Jesse Hall mode->xfer32(sA_result, sB_result, ...) 36ce6c3389061fb9fcdefc94fab2044a8e11600b52Jesse Hall @param shaderA The colors from this shader are seen as the "dst" by the xfermode 37ce6c3389061fb9fcdefc94fab2044a8e11600b52Jesse Hall @param shaderB The colors from this shader are seen as the "src" by the xfermode 38ce6c3389061fb9fcdefc94fab2044a8e11600b52Jesse Hall @param mode The xfermode that combines the colors from the two shaders. If mode 39ce6c3389061fb9fcdefc94fab2044a8e11600b52Jesse Hall is null, then SRC_OVER is assumed. 40ce6c3389061fb9fcdefc94fab2044a8e11600b52Jesse Hall */ 41ce6c3389061fb9fcdefc94fab2044a8e11600b52Jesse Hall SkComposeShader(SkShader* sA, SkShader* sB, SkXfermode* mode = NULL); 42ce6c3389061fb9fcdefc94fab2044a8e11600b52Jesse Hall virtual ~SkComposeShader(); 43ce6c3389061fb9fcdefc94fab2044a8e11600b52Jesse Hall 44ce6c3389061fb9fcdefc94fab2044a8e11600b52Jesse Hall // override 45ce6c3389061fb9fcdefc94fab2044a8e11600b52Jesse Hall virtual bool setContext(const SkBitmap& device, const SkPaint& paint, const SkMatrix& matrix); 46ce6c3389061fb9fcdefc94fab2044a8e11600b52Jesse Hall virtual void shadeSpan(int x, int y, SkPMColor result[], int count); 47ce6c3389061fb9fcdefc94fab2044a8e11600b52Jesse Hall virtual void beginSession(); 48ce6c3389061fb9fcdefc94fab2044a8e11600b52Jesse Hall virtual void endSession(); 49ce6c3389061fb9fcdefc94fab2044a8e11600b52Jesse Hall 50ce6c3389061fb9fcdefc94fab2044a8e11600b52Jesse Hallprotected: 51ce6c3389061fb9fcdefc94fab2044a8e11600b52Jesse Hall SkComposeShader(SkFlattenableReadBuffer& ); 52 virtual void flatten(SkFlattenableWriteBuffer& ); 53 virtual Factory getFactory() { return CreateProc; } 54 55private: 56 static SkFlattenable* CreateProc(SkFlattenableReadBuffer& buffer) { 57 return SkNEW_ARGS(SkComposeShader, (buffer)); } 58 59 SkShader* fShaderA; 60 SkShader* fShaderB; 61 SkXfermode* fMode; 62 63 typedef SkShader INHERITED; 64}; 65 66#endif 67