16c8459aa6c4bbc6e0638edab09f035924f31eda3mike@reedtribe.org
2685cfc0ee13d7c355ae2f4f3d225ad45e945763fepoger@google.com/*
3685cfc0ee13d7c355ae2f4f3d225ad45e945763fepoger@google.com * Copyright 2011 Google Inc.
4685cfc0ee13d7c355ae2f4f3d225ad45e945763fepoger@google.com *
5685cfc0ee13d7c355ae2f4f3d225ad45e945763fepoger@google.com * Use of this source code is governed by a BSD-style license that can be
6685cfc0ee13d7c355ae2f4f3d225ad45e945763fepoger@google.com * found in the LICENSE file.
76c8459aa6c4bbc6e0638edab09f035924f31eda3mike@reedtribe.org */
86c8459aa6c4bbc6e0638edab09f035924f31eda3mike@reedtribe.org
9685cfc0ee13d7c355ae2f4f3d225ad45e945763fepoger@google.com
10bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#include "SkPixelXorXfermode.h"
11bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#include "SkColorPriv.h"
129ce78f26f529fd3e10a3eb4f044bc3f0037ead56djsollen@google.com#include "SkFlattenableBuffers.h"
132c1db75f44f4edffc0a50bba2085330ed8254589robertphillips@google.com#include "SkString.h"
14bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com
15bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com// we always return an opaque color, 'cause I don't know what to do with
16bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com// the alpha-component and still return a valid premultiplied color.
170deff4c128f8e2402bb0e37bf485158c60961b5dmike@reedtribe.orgSkPMColor SkPixelXorXfermode::xferColor(SkPMColor src, SkPMColor dst) const {
18bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    SkPMColor res = src ^ dst ^ fOpColor;
19bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    res |= (SK_A32_MASK << SK_A32_SHIFT);   // force it to be opaque
20bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    return res;
21bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com}
22bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com
23cd2e444e946f5cfec4723f5bc46e9487d82e8e54djsollen@google.comvoid SkPixelXorXfermode::flatten(SkFlattenableWriteBuffer& wb) const {
24bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    this->INHERITED::flatten(wb);
259ce78f26f529fd3e10a3eb4f044bc3f0037ead56djsollen@google.com    wb.writeColor(fOpColor);
26bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com}
27bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com
28bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comSkPixelXorXfermode::SkPixelXorXfermode(SkFlattenableReadBuffer& rb)
29cd2e444e946f5cfec4723f5bc46e9487d82e8e54djsollen@google.com        : INHERITED(rb) {
309ce78f26f529fd3e10a3eb4f044bc3f0037ead56djsollen@google.com    fOpColor = rb.readColor();
31bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com}
322c1db75f44f4edffc0a50bba2085330ed8254589robertphillips@google.com
332c1db75f44f4edffc0a50bba2085330ed8254589robertphillips@google.com#ifdef SK_DEVELOPER
342c1db75f44f4edffc0a50bba2085330ed8254589robertphillips@google.comvoid SkPixelXorXfermode::toString(SkString* str) const {
352c1db75f44f4edffc0a50bba2085330ed8254589robertphillips@google.com    str->append("SkPixelXorXfermode: ");
362c1db75f44f4edffc0a50bba2085330ed8254589robertphillips@google.com    str->appendHex(fOpColor);
372c1db75f44f4edffc0a50bba2085330ed8254589robertphillips@google.com}
382c1db75f44f4edffc0a50bba2085330ed8254589robertphillips@google.com#endif
39