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