SkColorMatrixFilter.h revision 67e78c9e47c38a51816412a24a10f4fe2db142a3
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#if SK_SUPPORT_GPU 25 virtual GrCustomStage* asNewCustomStage(GrContext*) const SK_OVERRIDE; 26#endif 27 28 struct State { 29 int32_t fArray[20]; 30 int fShift; 31 int32_t fResult[4]; 32 }; 33 34 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkColorMatrixFilter) 35 36protected: 37 SkColorMatrixFilter(SkFlattenableReadBuffer& buffer); 38 virtual void flatten(SkFlattenableWriteBuffer&) const SK_OVERRIDE; 39 40private: 41 SkColorMatrix fMatrix; 42 43 typedef void (*Proc)(State*, unsigned r, unsigned g, unsigned b, 44 unsigned a); 45 46 Proc fProc; 47 State fState; 48 uint32_t fFlags; 49 50 void initState(const SkScalar array[20]); 51 52 typedef SkColorFilter INHERITED; 53}; 54 55#endif 56