14f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger/*
24f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger * Copyright 2012 The Android Open Source Project
34f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger *
44f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger * Use of this source code is governed by a BSD-style license that can be
54f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger * found in the LICENSE file.
64f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger */
74f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger
84f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger
94f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger#ifndef SkMorphologyImageFilter_DEFINED
104f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger#define SkMorphologyImageFilter_DEFINED
114f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger
124f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger#include "SkImageFilter.h"
134f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger
144f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenbergerclass SK_API SkMorphologyImageFilter : public SkImageFilter {
154f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenbergerpublic:
164f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger    explicit SkMorphologyImageFilter(SkFlattenableReadBuffer& buffer);
174f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger    SkMorphologyImageFilter(int radiusX, int radiusY);
184f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger
194f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenbergerprotected:
204f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger    virtual void flatten(SkFlattenableWriteBuffer& buffer) SK_OVERRIDE;
214f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger    SkISize    radius() const { return fRadius; }
224f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger
234f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenbergerprivate:
244f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger    SkISize    fRadius;
254f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger    typedef SkImageFilter INHERITED;
264f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger};
274f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger
284f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenbergerclass SK_API SkDilateImageFilter : public SkMorphologyImageFilter {
294f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenbergerpublic:
304f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger    SkDilateImageFilter(int radiusX, int radiusY) : INHERITED(radiusX, radiusY) {}
314f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger    explicit SkDilateImageFilter(SkFlattenableReadBuffer& buffer) : INHERITED(buffer) {}
324f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger
334f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger    virtual bool asADilate(SkISize* radius) const SK_OVERRIDE;
344f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger    virtual bool onFilterImage(Proxy*, const SkBitmap& src, const SkMatrix&,
354f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger                               SkBitmap* result, SkIPoint* offset) SK_OVERRIDE;
364f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger    static SkFlattenable* CreateProc(SkFlattenableReadBuffer& buffer) {
374f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger        return SkNEW_ARGS(SkDilateImageFilter, (buffer));
384f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger    }
394f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger    virtual Factory getFactory() SK_OVERRIDE { return CreateProc; }
404f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger    SK_DECLARE_FLATTENABLE_REGISTRAR()
414f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger
424f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger    typedef SkMorphologyImageFilter INHERITED;
434f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger};
444f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger
454f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenbergerclass SK_API SkErodeImageFilter : public SkMorphologyImageFilter {
464f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenbergerpublic:
474f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger    SkErodeImageFilter(int radiusX, int radiusY) : INHERITED(radiusX, radiusY) {}
484f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger    explicit SkErodeImageFilter(SkFlattenableReadBuffer& buffer) : INHERITED(buffer) {}
494f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger
504f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger    virtual bool asAnErode(SkISize* radius) const SK_OVERRIDE;
514f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger    virtual bool onFilterImage(Proxy*, const SkBitmap& src, const SkMatrix&,
524f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger                               SkBitmap* result, SkIPoint* offset) SK_OVERRIDE;
534f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger
544f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger    static SkFlattenable* CreateProc(SkFlattenableReadBuffer& buffer) {
554f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger        return SkNEW_ARGS(SkErodeImageFilter, (buffer));
564f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger    }
574f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger    virtual Factory getFactory() SK_OVERRIDE { return CreateProc; }
584f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger    SK_DECLARE_FLATTENABLE_REGISTRAR()
594f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger
604f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenbergerprivate:
614f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger    typedef SkMorphologyImageFilter INHERITED;
624f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger};
634f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger
644f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger#endif
654f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger
66