text: 
  /*
   * Copyright 2011 Google Inc.
   *
   * Use of this source code is governed by a BSD-style license that can be
   * found in the LICENSE file.
   */
  
  
  #include "SkPixelXorXfermode.h"
  #include "SkColorPriv.h"
  
  // we always return an opaque color, 'cause I don't know what to do with
  // the alpha-component and still return a valid premultiplied color.
  SkPMColor SkPixelXorXfermode::xferColor(SkPMColor src, SkPMColor dst) {
      SkPMColor res = src ^ dst ^ fOpColor;
      res |= (SK_A32_MASK << SK_A32_SHIFT);   // force it to be opaque
      return res;
  }
  
  void SkPixelXorXfermode::flatten(SkFlattenableWriteBuffer& wb) {
      this->INHERITED::flatten(wb);
      wb.write32(fOpColor);
  }
  
  SkPixelXorXfermode::SkPixelXorXfermode(SkFlattenableReadBuffer& rb)
          : SkXfermode(rb) {
      fOpColor = rb.readU32();
  }
  
  SkFlattenable::Factory SkPixelXorXfermode::getFactory() {
      return Create;
  }
  
  SkFlattenable* SkPixelXorXfermode::Create(SkFlattenableReadBuffer& rb) {
      return SkNEW_ARGS(SkPixelXorXfermode, (rb));
  }
  
  SK_DEFINE_FLATTENABLE_REGISTRAR(SkPixelXorXfermode)
  