Home | History | Annotate | Download | only in effects
      1 /*
      2  * Copyright 2012 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 SkMergeImageFilter_DEFINED
      9 #define SkMergeImageFilter_DEFINED
     10 
     11 #include "SkImageFilter.h"
     12 
     13 #include "SkXfermode.h"
     14 
     15 class SK_API SkMergeImageFilter : public SkImageFilter {
     16 public:
     17     SkMergeImageFilter(SkImageFilter* first, SkImageFilter* second,
     18                        SkXfermode::Mode = SkXfermode::kSrcOver_Mode);
     19     SkMergeImageFilter(SkImageFilter* filters[], int count,
     20                        const SkXfermode::Mode modes[] = NULL);
     21     virtual ~SkMergeImageFilter();
     22 
     23     SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkMergeImageFilter)
     24 
     25 protected:
     26     SkMergeImageFilter(SkFlattenableReadBuffer& buffer);
     27     virtual void flatten(SkFlattenableWriteBuffer&) const SK_OVERRIDE;
     28 
     29     virtual bool onFilterImage(Proxy*, const SkBitmap& src, const SkMatrix&,
     30                                SkBitmap* result, SkIPoint* loc) SK_OVERRIDE;
     31     virtual bool onFilterBounds(const SkIRect&, const SkMatrix&, SkIRect*) SK_OVERRIDE;
     32 
     33 private:
     34     uint8_t*            fModes; // SkXfermode::Mode
     35 
     36     // private storage, to avoid dynamically allocating storage for our copy
     37     // of the modes (unless the count is so large we can't fit).
     38     intptr_t    fStorage[16];
     39 
     40     void initAllocModes();
     41     void initModes(const SkXfermode::Mode []);
     42 
     43     typedef SkImageFilter INHERITED;
     44 };
     45 
     46 #endif
     47