1#include "SkPixelXorXfermode.h"
2#include "SkColorPriv.h"
3
4// we always return an opaque color, 'cause I don't know what to do with
5// the alpha-component and still return a valid premultiplied color.
6SkPMColor SkPixelXorXfermode::xferColor(SkPMColor src, SkPMColor dst)
7{
8    SkPMColor res = src ^ dst ^ fOpColor;
9    res |= (SK_A32_MASK << SK_A32_SHIFT);   // force it to be opaque
10    return res;
11}
12
13void SkPixelXorXfermode::flatten(SkFlattenableWriteBuffer& wb)
14{
15    this->INHERITED::flatten(wb);
16    wb.write32(fOpColor);
17}
18
19SkPixelXorXfermode::SkPixelXorXfermode(SkFlattenableReadBuffer& rb)
20    : SkXfermode(rb)
21{
22    fOpColor = rb.readU32();
23}
24
25SkFlattenable::Factory SkPixelXorXfermode::getFactory()
26{
27    return Create;
28}
29
30SkFlattenable* SkPixelXorXfermode::Create(SkFlattenableReadBuffer& rb)
31{
32    return SkNEW_ARGS(SkPixelXorXfermode, (rb));
33}
34
35
36
37