00001 /* 00002 * Copyright (C) 2006 The Android Open Source Project 00003 * 00004 * Licensed under the Apache License, Version 2.0 (the "License"); 00005 * you may not use this file except in compliance with the License. 00006 * You may obtain a copy of the License at 00007 * 00008 * http://www.apache.org/licenses/LICENSE-2.0 00009 * 00010 * Unless required by applicable law or agreed to in writing, software 00011 * distributed under the License is distributed on an "AS IS" BASIS, 00012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 00013 * See the License for the specific language governing permissions and 00014 * limitations under the License. 00015 */ 00016 00017 #ifndef SkComposeShader_DEFINED 00018 #define SkComposeShader_DEFINED 00019 00020 #include "SkShader.h" 00021 00022 class SkXfermode; 00023 00025 00030 class SkComposeShader : public SkShader { 00031 public: 00041 SkComposeShader(SkShader* sA, SkShader* sB, SkXfermode* mode = NULL); 00042 virtual ~SkComposeShader(); 00043 00044 // override 00045 virtual bool setContext(const SkBitmap& device, const SkPaint& paint, const SkMatrix& matrix); 00046 virtual void shadeSpan(int x, int y, SkPMColor result[], int count); 00047 virtual void beginSession(); 00048 virtual void endSession(); 00049 00050 protected: 00051 SkComposeShader(SkFlattenableReadBuffer& ); 00052 virtual void flatten(SkFlattenableWriteBuffer& ); 00053 virtual Factory getFactory() { return CreateProc; } 00054 00055 private: 00056 static SkFlattenable* CreateProc(SkFlattenableReadBuffer& buffer) { 00057 return SkNEW_ARGS(SkComposeShader, (buffer)); } 00058 00059 SkShader* fShaderA; 00060 SkShader* fShaderB; 00061 SkXfermode* fMode; 00062 00063 typedef SkShader INHERITED; 00064 }; 00065 00066 #endif