18a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com/* 2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2007 The Android Open Source Project 38a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com * 4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be 5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file. 68a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com */ 78a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 88a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifndef SkColorMatrixFilter_DEFINED 98a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define SkColorMatrixFilter_DEFINED 108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkColorFilter.h" 128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkColorMatrix.h" 138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 14c79fd6ea3f5fcc183a7848667db8bf617e55e419senorblanco@chromium.orgclass SK_API SkColorMatrixFilter : public SkColorFilter { 158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic: 16727a352f7412753d2a3e4d30eab6500a1a4de135commit-bot@chromium.org static SkColorMatrixFilter* Create(const SkColorMatrix& cm) { 17727a352f7412753d2a3e4d30eab6500a1a4de135commit-bot@chromium.org return SkNEW_ARGS(SkColorMatrixFilter, (cm)); 18727a352f7412753d2a3e4d30eab6500a1a4de135commit-bot@chromium.org } 19727a352f7412753d2a3e4d30eab6500a1a4de135commit-bot@chromium.org static SkColorMatrixFilter* Create(const SkScalar array[20]) { 20727a352f7412753d2a3e4d30eab6500a1a4de135commit-bot@chromium.org return SkNEW_ARGS(SkColorMatrixFilter, (array)); 21727a352f7412753d2a3e4d30eab6500a1a4de135commit-bot@chromium.org } 221447c6f7f4579942b32af6ffff1eadede40b42bctomhudson@google.com 238a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // overrides from SkColorFilter 24bada64428a52b4fc1f31a0a1982c2301ec57601creed@google.com virtual void filterSpan(const SkPMColor src[], int count, SkPMColor[]) const SK_OVERRIDE; 25bada64428a52b4fc1f31a0a1982c2301ec57601creed@google.com virtual void filterSpan16(const uint16_t src[], int count, uint16_t[]) const SK_OVERRIDE; 26bada64428a52b4fc1f31a0a1982c2301ec57601creed@google.com virtual uint32_t getFlags() const SK_OVERRIDE; 27bada64428a52b4fc1f31a0a1982c2301ec57601creed@google.com virtual bool asColorMatrix(SkScalar matrix[20]) const SK_OVERRIDE; 2867e78c9e47c38a51816412a24a10f4fe2db142a3bsalomon@google.com#if SK_SUPPORT_GPU 29b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt virtual GrFragmentProcessor* asFragmentProcessor(GrContext*) const SK_OVERRIDE; 3067e78c9e47c38a51816412a24a10f4fe2db142a3bsalomon@google.com#endif 311447c6f7f4579942b32af6ffff1eadede40b42bctomhudson@google.com 328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com struct State { 338a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com int32_t fArray[20]; 348a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com int fShift; 358a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com }; 368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 370f10f7bf1fb43ca6346dc220a076773b1f19a367commit-bot@chromium.org SK_TO_STRING_OVERRIDE() 381202c2ac563cdeb07406872825706b83e335c977robertphillips@google.com 39ba28d03e94dc221d6a803bf2a84a420b9159255cdjsollen@google.com SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkColorMatrixFilter) 401447c6f7f4579942b32af6ffff1eadede40b42bctomhudson@google.com 418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprotected: 42727a352f7412753d2a3e4d30eab6500a1a4de135commit-bot@chromium.org explicit SkColorMatrixFilter(const SkColorMatrix&); 43bd0be25074e53a6d1abc284562568c9745191984commit-bot@chromium.org explicit SkColorMatrixFilter(const SkScalar array[20]); 449fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed#ifdef SK_SUPPORT_LEGACY_DEEPFLATTENING 45bd0be25074e53a6d1abc284562568c9745191984commit-bot@chromium.org explicit SkColorMatrixFilter(SkReadBuffer& buffer); 469fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed#endif 47bd0be25074e53a6d1abc284562568c9745191984commit-bot@chromium.org virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE; 48727a352f7412753d2a3e4d30eab6500a1a4de135commit-bot@chromium.org 498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate: 507b6c19392cd980462908764b5ea17c4796610427reed@google.com SkColorMatrix fMatrix; 518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 52bada64428a52b4fc1f31a0a1982c2301ec57601creed@google.com typedef void (*Proc)(const State&, unsigned r, unsigned g, unsigned b, 53bada64428a52b4fc1f31a0a1982c2301ec57601creed@google.com unsigned a, int32_t result[4]); 548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 558a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com Proc fProc; 568a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com State fState; 578a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t fFlags; 581447c6f7f4579942b32af6ffff1eadede40b42bctomhudson@google.com 597b6c19392cd980462908764b5ea17c4796610427reed@google.com void initState(const SkScalar array[20]); 601447c6f7f4579942b32af6ffff1eadede40b42bctomhudson@google.com 618a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com typedef SkColorFilter INHERITED; 628a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 638a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 648a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 65