11cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 20910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project/* 31cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Copyright 2006 The Android Open Source Project 40910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project * 51cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Use of this source code is governed by a BSD-style license that can be 61cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * found in the LICENSE file. 70910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project */ 80910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 91cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifndef SkComposeShader_DEFINED 110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#define SkComposeShader_DEFINED 120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkShader.h" 140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectclass SkXfermode; 160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project/////////////////////////////////////////////////////////////////////////////////////////// 180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project/** \class SkComposeShader 200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project This subclass of shader returns the coposition of two other shaders, combined by 210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project a xfermode. 220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project*/ 230b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenbergerclass SK_API SkComposeShader : public SkShader { 240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectpublic: 250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project /** Create a new compose shader, given shaders A, B, and a combining xfermode mode. 260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project When the xfermode is called, it will be given the result from shader A as its 270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project "dst", and the result of from shader B as its "src". 280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project mode->xfer32(sA_result, sB_result, ...) 290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project @param shaderA The colors from this shader are seen as the "dst" by the xfermode 300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project @param shaderB The colors from this shader are seen as the "src" by the xfermode 310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project @param mode The xfermode that combines the colors from the two shaders. If mode 320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project is null, then SRC_OVER is assumed. 330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project */ 340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkComposeShader(SkShader* sA, SkShader* sB, SkXfermode* mode = NULL); 350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual ~SkComposeShader(); 360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project // override 380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual bool setContext(const SkBitmap& device, const SkPaint& paint, const SkMatrix& matrix); 390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual void shadeSpan(int x, int y, SkPMColor result[], int count); 400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual void beginSession(); 410910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual void endSession(); 420910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectprotected: 440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkComposeShader(SkFlattenableReadBuffer& ); 450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual void flatten(SkFlattenableWriteBuffer& ); 460910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual Factory getFactory() { return CreateProc; } 470910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 480910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectprivate: 490910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project static SkFlattenable* CreateProc(SkFlattenableReadBuffer& buffer) { 500910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return SkNEW_ARGS(SkComposeShader, (buffer)); } 510910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 520910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkShader* fShaderA; 530910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkShader* fShaderB; 540910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkXfermode* fMode; 550910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 560910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project typedef SkShader INHERITED; 570910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}; 580910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 590910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif 60