SkColorMatrixFilter.h revision 6806fe87e0b39e283291c1a1c7d1d864230aa2aa
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 14class SK_API SkColorMatrixFilter : public SkColorFilter { 15public: 16 explicit SkColorMatrixFilter(const SkColorMatrix&); 17 SkColorMatrixFilter(const SkScalar array[20]); 18 19 // overrides from SkColorFilter 20 virtual void filterSpan(const SkPMColor src[], int count, SkPMColor[]) SK_OVERRIDE; 21 virtual void filterSpan16(const uint16_t src[], int count, uint16_t[]) SK_OVERRIDE; 22 virtual uint32_t getFlags() SK_OVERRIDE; 23 virtual bool asColorMatrix(SkScalar matrix[20]) SK_OVERRIDE; 24 25 struct State { 26 int32_t fArray[20]; 27 int fShift; 28 int32_t fResult[4]; 29 }; 30 31 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkColorMatrixFilter) 32 33protected: 34 SkColorMatrixFilter(SkFlattenableReadBuffer& buffer); 35 virtual void flatten(SkFlattenableWriteBuffer&) const SK_OVERRIDE; 36 37private: 38 SkColorMatrix fMatrix; 39 40 typedef void (*Proc)(State*, unsigned r, unsigned g, unsigned b, 41 unsigned a); 42 43 Proc fProc; 44 State fState; 45 uint32_t fFlags; 46 47 void initState(const SkScalar array[20]); 48 49 typedef SkColorFilter INHERITED; 50}; 51 52#endif 53