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