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 { 25c73dd5c6880739f26216f198c757028fd28df1a4djsollen@google.com wb.writeColor(fOpColor); 268a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 278a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 289fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reedSkFlattenable* SkPixelXorXfermode::CreateProc(SkReadBuffer& buffer) { 299fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed return Create(buffer.readColor()); 309fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed} 31b83b6b4f7690fe929d8d6b1a3d2b7ed562b95ba6robertphillips@google.com 320f10f7bf1fb43ca6346dc220a076773b1f19a367commit-bot@chromium.org#ifndef SK_IGNORE_TO_STRING 33b83b6b4f7690fe929d8d6b1a3d2b7ed562b95ba6robertphillips@google.comvoid SkPixelXorXfermode::toString(SkString* str) const { 34b83b6b4f7690fe929d8d6b1a3d2b7ed562b95ba6robertphillips@google.com str->append("SkPixelXorXfermode: "); 35b83b6b4f7690fe929d8d6b1a3d2b7ed562b95ba6robertphillips@google.com str->appendHex(fOpColor); 36b83b6b4f7690fe929d8d6b1a3d2b7ed562b95ba6robertphillips@google.com} 37b83b6b4f7690fe929d8d6b1a3d2b7ed562b95ba6robertphillips@google.com#endif 38