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