Home | History | Annotate | Download | only in effects
      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 GrEffectRef* 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
     63