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 
      9 #ifndef SkMorphologyImageFilter_DEFINED
     10 #define SkMorphologyImageFilter_DEFINED
     11 
     12 #include "SkImageFilter.h"
     13 #include "SkSize.h"
     14 
     15 class SK_API SkMorphologyImageFilter : public SkImageFilter {
     16 public:
     17     SkMorphologyImageFilter(int radiusX, int radiusY, SkImageFilter* input);
     18 
     19 protected:
     20     SkMorphologyImageFilter(SkFlattenableReadBuffer& buffer);
     21     virtual void flatten(SkFlattenableWriteBuffer&) const SK_OVERRIDE;
     22 #if SK_SUPPORT_GPU
     23     virtual bool canFilterImageGPU() const SK_OVERRIDE { return true; }
     24 #endif
     25 
     26     SkISize    radius() const { return fRadius; }
     27 
     28 private:
     29     SkISize    fRadius;
     30     typedef SkImageFilter INHERITED;
     31 };
     32 
     33 class SK_API SkDilateImageFilter : public SkMorphologyImageFilter {
     34 public:
     35     SkDilateImageFilter(int radiusX, int radiusY, SkImageFilter* input = NULL)
     36     : INHERITED(radiusX, radiusY, input) {}
     37 
     38     virtual bool onFilterImage(Proxy*, const SkBitmap& src, const SkMatrix&,
     39                                SkBitmap* result, SkIPoint* offset) SK_OVERRIDE;
     40 #if SK_SUPPORT_GPU
     41     virtual bool filterImageGPU(Proxy* proxy, const SkBitmap& src, const SkMatrix& ctm,
     42                                 SkBitmap* result, SkIPoint* offset) SK_OVERRIDE;
     43 #endif
     44 
     45     SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkDilateImageFilter)
     46 
     47 protected:
     48     SkDilateImageFilter(SkFlattenableReadBuffer& buffer) : INHERITED(buffer) {}
     49 
     50 private:
     51     typedef SkMorphologyImageFilter INHERITED;
     52 };
     53 
     54 class SK_API SkErodeImageFilter : public SkMorphologyImageFilter {
     55 public:
     56     SkErodeImageFilter(int radiusX, int radiusY, SkImageFilter* input = NULL)
     57     : INHERITED(radiusX, radiusY, input) {}
     58 
     59     virtual bool onFilterImage(Proxy*, const SkBitmap& src, const SkMatrix&,
     60                                SkBitmap* result, SkIPoint* offset) SK_OVERRIDE;
     61 #if SK_SUPPORT_GPU
     62     virtual bool filterImageGPU(Proxy* proxy, const SkBitmap& src, const SkMatrix& ctm,
     63                                 SkBitmap* result, SkIPoint* offset) SK_OVERRIDE;
     64 #endif
     65 
     66     SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkErodeImageFilter)
     67 
     68 protected:
     69     SkErodeImageFilter(SkFlattenableReadBuffer& buffer) : INHERITED(buffer) {}
     70 
     71 private:
     72     typedef SkMorphologyImageFilter INHERITED;
     73 };
     74 
     75 #endif
     76