13334c3a1fa05b5ee0cab0f2f1ec7b19939737337mike@reedtribe.org
2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/*
3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2011 Google Inc.
4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com *
5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be
6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file.
73334c3a1fa05b5ee0cab0f2f1ec7b19939737337mike@reedtribe.org */
83334c3a1fa05b5ee0cab0f2f1ec7b19939737337mike@reedtribe.org
9ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com
108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkPixelXorXfermode.h"
118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkColorPriv.h"
128b0e8ac5f582de80356019406e2975079bf0829dcommit-bot@chromium.org#include "SkReadBuffer.h"
138b0e8ac5f582de80356019406e2975079bf0829dcommit-bot@chromium.org#include "SkWriteBuffer.h"
14b83b6b4f7690fe929d8d6b1a3d2b7ed562b95ba6robertphillips@google.com#include "SkString.h"
158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com// we always return an opaque color, 'cause I don't know what to do with
178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com// the alpha-component and still return a valid premultiplied color.
1861490fa4d20f44e049d8252a9e11d80626b608d2mike@reedtribe.orgSkPMColor SkPixelXorXfermode::xferColor(SkPMColor src, SkPMColor dst) const {
198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    SkPMColor res = src ^ dst ^ fOpColor;
208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    res |= (SK_A32_MASK << SK_A32_SHIFT);   // force it to be opaque
218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    return res;
228a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}
238a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
248b0e8ac5f582de80356019406e2975079bf0829dcommit-bot@chromium.orgvoid SkPixelXorXfermode::flatten(SkWriteBuffer& wb) const {
258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    this->INHERITED::flatten(wb);
26c73dd5c6880739f26216f198c757028fd28df1a4djsollen@google.com    wb.writeColor(fOpColor);
278a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}
288a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
298b0e8ac5f582de80356019406e2975079bf0829dcommit-bot@chromium.orgSkPixelXorXfermode::SkPixelXorXfermode(SkReadBuffer& rb)
3054924243c1b65b3ee6d8fa064b50a9b1bb2a19a5djsollen@google.com        : INHERITED(rb) {
31c73dd5c6880739f26216f198c757028fd28df1a4djsollen@google.com    fOpColor = rb.readColor();
328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}
33b83b6b4f7690fe929d8d6b1a3d2b7ed562b95ba6robertphillips@google.com
340f10f7bf1fb43ca6346dc220a076773b1f19a367commit-bot@chromium.org#ifndef SK_IGNORE_TO_STRING
35b83b6b4f7690fe929d8d6b1a3d2b7ed562b95ba6robertphillips@google.comvoid SkPixelXorXfermode::toString(SkString* str) const {
36b83b6b4f7690fe929d8d6b1a3d2b7ed562b95ba6robertphillips@google.com    str->append("SkPixelXorXfermode: ");
37b83b6b4f7690fe929d8d6b1a3d2b7ed562b95ba6robertphillips@google.com    str->appendHex(fOpColor);
38b83b6b4f7690fe929d8d6b1a3d2b7ed562b95ba6robertphillips@google.com}
39b83b6b4f7690fe929d8d6b1a3d2b7ed562b95ba6robertphillips@google.com#endif
40