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