18a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com/*
2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2007 The Android Open Source Project
38a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com *
4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be
5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file.
68a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com */
78a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
88a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifndef SkPixelXorXfermode_DEFINED
98a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define SkPixelXorXfermode_DEFINED
108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkXfermode.h"
128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com/** SkPixelXorXfermode implements a simple pixel xor (op ^ src ^ dst).
148a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    This transformation does not follow premultiplied conventions, therefore
158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    this proc *always* returns an opaque color (alpha == 255). Thus it is
168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    not really usefull for operating on blended colors.
178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com*/
186806fe87e0b39e283291c1a1c7d1d864230aa2aatfarina@chromium.orgclass SK_API SkPixelXorXfermode : public SkXfermode {
198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic:
200a2bf90dccba3bde188e0386a7f0c60e6dde1ae9commit-bot@chromium.org    static SkPixelXorXfermode* Create(SkColor opColor) {
210a2bf90dccba3bde188e0386a7f0c60e6dde1ae9commit-bot@chromium.org        return SkNEW_ARGS(SkPixelXorXfermode, (opColor));
220a2bf90dccba3bde188e0386a7f0c60e6dde1ae9commit-bot@chromium.org    }
238a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
240f10f7bf1fb43ca6346dc220a076773b1f19a367commit-bot@chromium.org    SK_TO_STRING_OVERRIDE()
25ba28d03e94dc221d6a803bf2a84a420b9159255cdjsollen@google.com    SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkPixelXorXfermode)
261447c6f7f4579942b32af6ffff1eadede40b42bctomhudson@google.com
278a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprotected:
28bd0be25074e53a6d1abc284562568c9745191984commit-bot@chromium.org    explicit SkPixelXorXfermode(SkColor opColor) : fOpColor(opColor) {}
29bd0be25074e53a6d1abc284562568c9745191984commit-bot@chromium.org    explicit SkPixelXorXfermode(SkReadBuffer& rb);
308b0e8ac5f582de80356019406e2975079bf0829dcommit-bot@chromium.org    virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE;
3154924243c1b65b3ee6d8fa064b50a9b1bb2a19a5djsollen@google.com
328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    // override from SkXfermode
3361490fa4d20f44e049d8252a9e11d80626b608d2mike@reedtribe.org    virtual SkPMColor xferColor(SkPMColor src, SkPMColor dst) const;
348a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
358a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate:
368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    SkColor fOpColor;
378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    typedef SkXfermode INHERITED;
398a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com};
408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif
42