diff options
Diffstat (limited to 'src/effects/SkPixelXorXfermode.cpp')
-rw-r--r-- | src/effects/SkPixelXorXfermode.cpp | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/src/effects/SkPixelXorXfermode.cpp b/src/effects/SkPixelXorXfermode.cpp new file mode 100644 index 0000000..a5599e2 --- /dev/null +++ b/src/effects/SkPixelXorXfermode.cpp @@ -0,0 +1,36 @@ +#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)); +} + + + |