Home | History | Annotate | Download | only in effects
      1 
      2 /*
      3  * Copyright 2007 The Android Open Source Project
      4  *
      5  * Use of this source code is governed by a BSD-style license that can be
      6  * found in the LICENSE file.
      7  */
      8 
      9 
     10 #ifndef SkColorMatrixFilter_DEFINED
     11 #define SkColorMatrixFilter_DEFINED
     12 
     13 #include "SkColorFilter.h"
     14 #include "SkColorMatrix.h"
     15 
     16 class SK_API SkColorMatrixFilter : public SkColorFilter {
     17 public:
     18     SkColorMatrixFilter();
     19     explicit SkColorMatrixFilter(const SkColorMatrix&);
     20     SkColorMatrixFilter(const SkScalar array[20]);
     21 
     22     void setMatrix(const SkColorMatrix&);
     23     void setArray(const SkScalar array[20]);
     24 
     25     // overrides from SkColorFilter
     26     virtual void filterSpan(const SkPMColor src[], int count, SkPMColor[]) SK_OVERRIDE;
     27     virtual void filterSpan16(const uint16_t src[], int count, uint16_t[]) SK_OVERRIDE;
     28     virtual uint32_t getFlags() SK_OVERRIDE;
     29     virtual bool asColorMatrix(SkScalar matrix[20]) SK_OVERRIDE;
     30 
     31     // overrides for SkFlattenable
     32     virtual void flatten(SkFlattenableWriteBuffer& buffer) SK_OVERRIDE;
     33 
     34     struct State {
     35         int32_t fArray[20];
     36         int     fShift;
     37         int32_t fResult[4];
     38     };
     39 
     40     static SkFlattenable* CreateProc(SkFlattenableReadBuffer& buffer);
     41 
     42     SK_DECLARE_FLATTENABLE_REGISTRAR()
     43 
     44 protected:
     45     // overrides for SkFlattenable
     46     virtual Factory getFactory();
     47 
     48     SkColorMatrixFilter(SkFlattenableReadBuffer& buffer);
     49 
     50 private:
     51 
     52     typedef void (*Proc)(State*, unsigned r, unsigned g, unsigned b,
     53                          unsigned a);
     54 
     55     Proc        fProc;
     56     State       fState;
     57     uint32_t    fFlags;
     58 
     59     void setup(const SkScalar array[20]);
     60 
     61     typedef SkColorFilter INHERITED;
     62 };
     63 
     64 #endif
     65