1 2 /* 3 * Copyright 2007 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 SkPixelXorXfermode_DEFINED 11 #define SkPixelXorXfermode_DEFINED 12 13 #include "SkXfermode.h" 14 15 /** SkPixelXorXfermode implements a simple pixel xor (op ^ src ^ dst). 16 This transformation does not follow premultiplied conventions, therefore 17 this proc *always* returns an opaque color (alpha == 255). Thus it is 18 not really usefull for operating on blended colors. 19 */ 20 class SkPixelXorXfermode : public SkXfermode { 21 public: 22 SkPixelXorXfermode(SkColor opColor) : fOpColor(opColor) {} 23 24 // override from SkFlattenable 25 virtual Factory getFactory(); 26 virtual void flatten(SkFlattenableWriteBuffer&); 27 28 static SkFlattenable* CreateProc(SkFlattenableReadBuffer& buffer) { 29 return SkNEW_ARGS(SkPixelXorXfermode, (buffer)); 30 } 31 32 SK_DECLARE_FLATTENABLE_REGISTRAR() 33 34 protected: 35 // override from SkXfermode 36 virtual SkPMColor xferColor(SkPMColor src, SkPMColor dst); 37 38 private: 39 SkColor fOpColor; 40 41 SkPixelXorXfermode(SkFlattenableReadBuffer& rb); 42 // our private factory 43 static SkFlattenable* Create(SkFlattenableReadBuffer&); 44 45 typedef SkXfermode INHERITED; 46 }; 47 48 #endif 49