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