Home | History | Annotate | Download | only in effects
      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