SkColorMatrixFilter.h revision 6806fe87e0b39e283291c1a1c7d1d864230aa2aa
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[]) SK_OVERRIDE;
21    virtual void filterSpan16(const uint16_t src[], int count, uint16_t[]) SK_OVERRIDE;
22    virtual uint32_t getFlags() SK_OVERRIDE;
23    virtual bool asColorMatrix(SkScalar matrix[20]) SK_OVERRIDE;
24
25    struct State {
26        int32_t fArray[20];
27        int     fShift;
28        int32_t fResult[4];
29    };
30
31    SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkColorMatrixFilter)
32
33protected:
34    SkColorMatrixFilter(SkFlattenableReadBuffer& buffer);
35    virtual void flatten(SkFlattenableWriteBuffer&) const SK_OVERRIDE;
36
37private:
38    SkColorMatrix fMatrix;
39
40    typedef void (*Proc)(State*, unsigned r, unsigned g, unsigned b,
41                         unsigned a);
42
43    Proc        fProc;
44    State       fState;
45    uint32_t    fFlags;
46
47    void initState(const SkScalar array[20]);
48
49    typedef SkColorFilter INHERITED;
50};
51
52#endif
53