1f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com/*
25bb6825f10d64834ad1d1d967f590aebae285360epoger@google.com * Copyright 2007 The Android Open Source Project
3f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com *
45bb6825f10d64834ad1d1d967f590aebae285360epoger@google.com * Use of this source code is governed by a BSD-style license that can be
55bb6825f10d64834ad1d1d967f590aebae285360epoger@google.com * found in the LICENSE file.
6f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com */
7f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com
8f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com#ifndef SkColorMatrixFilter_DEFINED
9f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com#define SkColorMatrixFilter_DEFINED
10f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com
11f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com#include "SkColorFilter.h"
12f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com#include "SkColorMatrix.h"
13f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com
14ed73f727e3d6088b312fd58cc0aca07278638b34senorblanco@chromium.orgclass SK_API SkColorMatrixFilter : public SkColorFilter {
15f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.compublic:
16f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    explicit SkColorMatrixFilter(const SkColorMatrix&);
17f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    SkColorMatrixFilter(const SkScalar array[20]);
18718c2c29e99f7c9b6177847dd353298284dba964tomhudson@google.com
19f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    // overrides from SkColorFilter
205b80c642da8c265b2c0aaeeb10194aed37ddcf40reed@google.com    virtual void filterSpan(const SkPMColor src[], int count, SkPMColor[]) const SK_OVERRIDE;
215b80c642da8c265b2c0aaeeb10194aed37ddcf40reed@google.com    virtual void filterSpan16(const uint16_t src[], int count, uint16_t[]) const SK_OVERRIDE;
225b80c642da8c265b2c0aaeeb10194aed37ddcf40reed@google.com    virtual uint32_t getFlags() const SK_OVERRIDE;
235b80c642da8c265b2c0aaeeb10194aed37ddcf40reed@google.com    virtual bool asColorMatrix(SkScalar matrix[20]) const SK_OVERRIDE;
24e2090cb09aa8667b0e84e64edc21dbede436697dbsalomon@google.com#if SK_SUPPORT_GPU
251bc435a41e1424b78b9cd44bd060e7d8b7a9bdfebsalomon@google.com    virtual GrEffectRef* asNewEffect(GrContext*) const SK_OVERRIDE;
26e2090cb09aa8667b0e84e64edc21dbede436697dbsalomon@google.com#endif
27718c2c29e99f7c9b6177847dd353298284dba964tomhudson@google.com
28f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    struct State {
29f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com        int32_t fArray[20];
30f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com        int     fShift;
31f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    };
32f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com
3361cd8826648066a512de73c922d375467fb0bcd1robertphillips@google.com    SkDEVCODE(virtual void toString(SkString* str) const SK_OVERRIDE;)
3461cd8826648066a512de73c922d375467fb0bcd1robertphillips@google.com
3514f592f823cedde633bf7d468c3a14b02ee56674djsollen@google.com    SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkColorMatrixFilter)
36718c2c29e99f7c9b6177847dd353298284dba964tomhudson@google.com
37f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.comprotected:
38f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    SkColorMatrixFilter(SkFlattenableReadBuffer& buffer);
39e133d6ad314603114c7ef80423391f65cbb599d7djsollen@google.com    virtual void flatten(SkFlattenableWriteBuffer&) const SK_OVERRIDE;
40718c2c29e99f7c9b6177847dd353298284dba964tomhudson@google.com
41f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.comprivate:
42644efe36bae77caaffcf231b104648209694007breed@google.com    SkColorMatrix fMatrix;
43f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com
445b80c642da8c265b2c0aaeeb10194aed37ddcf40reed@google.com    typedef void (*Proc)(const State&, unsigned r, unsigned g, unsigned b,
455b80c642da8c265b2c0aaeeb10194aed37ddcf40reed@google.com                         unsigned a, int32_t result[4]);
46f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com
47f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    Proc        fProc;
48f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    State       fState;
49f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    uint32_t    fFlags;
50718c2c29e99f7c9b6177847dd353298284dba964tomhudson@google.com
51644efe36bae77caaffcf231b104648209694007breed@google.com    void initState(const SkScalar array[20]);
52718c2c29e99f7c9b6177847dd353298284dba964tomhudson@google.com
53f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    typedef SkColorFilter INHERITED;
54f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com};
55f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com
56f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com#endif
57