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