SkMergeImageFilter.h revision ae761f7545d8ebf181d220169afac2056b057b8c
1324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/* 2324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Copyright 2012 The Android Open Source Project 3324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * 4324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Use of this source code is governed by a BSD-style license that can be 5324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * found in the LICENSE file. 6324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 7324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 8324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#ifndef SkMergeImageFilter_DEFINED 9324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#define SkMergeImageFilter_DEFINED 10324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 11324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include "SkImageFilter.h" 12324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 13324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include "SkXfermode.h" 14324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 15324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverclass SK_API SkMergeImageFilter : public SkImageFilter { 16324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverpublic: 17324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver SkMergeImageFilter(SkImageFilter* first, SkImageFilter* second, 18324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver SkXfermode::Mode = SkXfermode::kSrcOver_Mode, 19324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver const CropRect* cropRect = NULL); 20324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver SkMergeImageFilter(SkImageFilter* filters[], int count, 21324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver const SkXfermode::Mode modes[] = NULL, 22324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver const CropRect* cropRect = NULL); 23324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver virtual ~SkMergeImageFilter(); 24324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 25324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkMergeImageFilter) 26324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 27324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverprotected: 28324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver SkMergeImageFilter(SkReadBuffer& buffer); 29324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE; 30324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 31324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver virtual bool onFilterImage(Proxy*, const SkBitmap& src, const SkMatrix&, 32324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver SkBitmap* result, SkIPoint* loc) const SK_OVERRIDE; 33324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverprivate: 34324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver uint8_t* fModes; // SkXfermode::Mode 35324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 36324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // private storage, to avoid dynamically allocating storage for our copy 37324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // of the modes (unless the count is so large we can't fit). 38324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver intptr_t fStorage[16]; 39324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 40324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver void initAllocModes(); 41324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver void initModes(const SkXfermode::Mode []); 42324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 43324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver typedef SkImageFilter INHERITED; 44324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver}; 45324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 46324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#endif 47324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver