SkPixelXorXfermode.cpp revision d686ac77c2c485c4a3302eda9c1de597a6f8c568
1
2/*
3 * Copyright 2011 Google Inc.
4 *
5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file.
7 */
8
9
10#include "SkPixelXorXfermode.h"
11#include "SkColorPriv.h"
12#include "SkFlattenableBuffers.h"
13#include "SkString.h"
14
15// we always return an opaque color, 'cause I don't know what to do with
16// the alpha-component and still return a valid premultiplied color.
17SkPMColor SkPixelXorXfermode::xferColor(SkPMColor src, SkPMColor dst) const {
18    SkPMColor res = src ^ dst ^ fOpColor;
19    res |= (SK_A32_MASK << SK_A32_SHIFT);   // force it to be opaque
20    return res;
21}
22
23void SkPixelXorXfermode::flatten(SkFlattenableWriteBuffer& wb) const {
24    this->INHERITED::flatten(wb);
25    wb.writeColor(fOpColor);
26}
27
28SkPixelXorXfermode::SkPixelXorXfermode(SkFlattenableReadBuffer& rb)
29        : INHERITED(rb) {
30    fOpColor = rb.readColor();
31}
32
33#ifdef SK_DEVELOPER
34void SkPixelXorXfermode::toString(SkString* str) const {
35    str->append("SkPixelXorXfermode: ");
36    str->appendHex(fOpColor);
37}
38#endif
39