Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / third_party / skia / include / effects / SkColorMatrixFilter.h
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
14 class SK_API SkColorMatrixFilter : public SkColorFilter {
15 public:
16     static SkColorMatrixFilter* Create(const SkColorMatrix& cm) {
17         return SkNEW_ARGS(SkColorMatrixFilter, (cm));
18     }
19     static SkColorMatrixFilter* Create(const SkScalar array[20]) {
20         return SkNEW_ARGS(SkColorMatrixFilter, (array));
21     }
22
23     // overrides from SkColorFilter
24     virtual void filterSpan(const SkPMColor src[], int count, SkPMColor[]) const SK_OVERRIDE;
25     virtual void filterSpan16(const uint16_t src[], int count, uint16_t[]) const SK_OVERRIDE;
26     virtual uint32_t getFlags() const SK_OVERRIDE;
27     virtual bool asColorMatrix(SkScalar matrix[20]) const SK_OVERRIDE;
28 #if SK_SUPPORT_GPU
29     virtual GrEffect* asNewEffect(GrContext*) const SK_OVERRIDE;
30 #endif
31
32     struct State {
33         int32_t fArray[20];
34         int     fShift;
35     };
36
37     SK_TO_STRING_OVERRIDE()
38
39     SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkColorMatrixFilter)
40
41 protected:
42     explicit SkColorMatrixFilter(const SkColorMatrix&);
43     explicit SkColorMatrixFilter(const SkScalar array[20]);
44     explicit SkColorMatrixFilter(SkReadBuffer& buffer);
45     virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE;
46
47 private:
48     SkColorMatrix fMatrix;
49
50     typedef void (*Proc)(const State&, unsigned r, unsigned g, unsigned b,
51                          unsigned a, int32_t result[4]);
52
53     Proc        fProc;
54     State       fState;
55     uint32_t    fFlags;
56
57     void initState(const SkScalar array[20]);
58
59     typedef SkColorFilter INHERITED;
60 };
61
62 #endif