SkColorMatrixFilter.h revision bada64428a52b4fc1f31a0a1982c2301ec57601c
1/*
2 * Copyright 2007 The Android Open Source Project
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#ifndef SkColorMatrixFilter_DEFINED
9#define SkColorMatrixFilter_DEFINED
10
11#include "SkColorFilter.h"
12#include "SkColorMatrix.h"
13
14class SK_API SkColorMatrixFilter : public SkColorFilter {
15public:
16    explicit SkColorMatrixFilter(const SkColorMatrix&);
17    SkColorMatrixFilter(const SkScalar array[20]);
18
19    // overrides from SkColorFilter
20    virtual void filterSpan(const SkPMColor src[], int count, SkPMColor[]) const SK_OVERRIDE;
21    virtual void filterSpan16(const uint16_t src[], int count, uint16_t[]) const SK_OVERRIDE;
22    virtual uint32_t getFlags() const SK_OVERRIDE;
23    virtual bool asColorMatrix(SkScalar matrix[20]) const SK_OVERRIDE;
24#if SK_SUPPORT_GPU
25    virtual GrEffect* asNewEffect(GrContext*) const SK_OVERRIDE;
26#endif
27
28    struct State {
29        int32_t fArray[20];
30        int     fShift;
31    };
32
33    SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkColorMatrixFilter)
34
35protected:
36    SkColorMatrixFilter(SkFlattenableReadBuffer& buffer);
37    virtual void flatten(SkFlattenableWriteBuffer&) const SK_OVERRIDE;
38
39private:
40    SkColorMatrix fMatrix;
41
42    typedef void (*Proc)(const State&, unsigned r, unsigned g, unsigned b,
43                         unsigned a, int32_t result[4]);
44
45    Proc        fProc;
46    State       fState;
47    uint32_t    fFlags;
48
49    void initState(const SkScalar array[20]);
50
51    typedef SkColorFilter INHERITED;
52};
53
54#endif
55