2 * Copyright 2007 The Android Open Source Project
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
8 #ifndef SkColorMatrixFilter_DEFINED
9 #define SkColorMatrixFilter_DEFINED
11 #include "SkColorFilter.h"
12 #include "SkColorMatrix.h"
14 class SK_API SkColorMatrixFilter : public SkColorFilter {
16 static SkColorMatrixFilter* Create(const SkColorMatrix& cm) {
17 return SkNEW_ARGS(SkColorMatrixFilter, (cm));
19 static SkColorMatrixFilter* Create(const SkScalar array[20]) {
20 return SkNEW_ARGS(SkColorMatrixFilter, (array));
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;
29 virtual GrFragmentProcessor* asFragmentProcessor(GrContext*) const SK_OVERRIDE;
37 SK_TO_STRING_OVERRIDE()
39 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkColorMatrixFilter)
42 explicit SkColorMatrixFilter(const SkColorMatrix&);
43 explicit SkColorMatrixFilter(const SkScalar array[20]);
44 #ifdef SK_SUPPORT_LEGACY_DEEPFLATTENING
45 explicit SkColorMatrixFilter(SkReadBuffer& buffer);
47 virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE;
50 SkColorMatrix fMatrix;
52 typedef void (*Proc)(const State&, unsigned r, unsigned g, unsigned b,
53 unsigned a, int32_t result[4]);
59 void initState(const SkScalar array[20]);
61 typedef SkColorFilter INHERITED;