blob: 880fc2ec2c4334fb42d3ecfd8c97627b24d1dbdb [file] [log] [blame]
senorblanco@chromium.org05054f12012-03-02 21:05:45 +00001/*
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
senorblanco@chromium.org377c14a2013-02-04 22:57:21 +000012#include "SkImageFilter.h"
senorblanco@chromium.orgbf2768b2012-08-20 15:43:14 +000013#include "SkSize.h"
senorblanco@chromium.org05054f12012-03-02 21:05:45 +000014
senorblanco@chromium.org377c14a2013-02-04 22:57:21 +000015class SK_API SkMorphologyImageFilter : public SkImageFilter {
senorblanco@chromium.org05054f12012-03-02 21:05:45 +000016public:
senorblanco@chromium.orgb295fb62013-10-10 13:51:19 +000017 SkMorphologyImageFilter(int radiusX, int radiusY, SkImageFilter* input, const CropRect* cropRect);
senorblanco@chromium.org05054f12012-03-02 21:05:45 +000018
19protected:
djsollen@google.com54924242012-03-29 15:18:04 +000020 SkMorphologyImageFilter(SkFlattenableReadBuffer& buffer);
21 virtual void flatten(SkFlattenableWriteBuffer&) const SK_OVERRIDE;
senorblanco@chromium.org84207c42012-08-22 20:51:19 +000022#if SK_SUPPORT_GPU
senorblanco@chromium.org302cffb2012-08-01 20:16:34 +000023 virtual bool canFilterImageGPU() const SK_OVERRIDE { return true; }
senorblanco@chromium.org84207c42012-08-22 20:51:19 +000024#endif
djsollen@google.com54924242012-03-29 15:18:04 +000025
senorblanco@chromium.org05054f12012-03-02 21:05:45 +000026 SkISize radius() const { return fRadius; }
27
28private:
29 SkISize fRadius;
senorblanco@chromium.org377c14a2013-02-04 22:57:21 +000030 typedef SkImageFilter INHERITED;
senorblanco@chromium.org05054f12012-03-02 21:05:45 +000031};
32
33class SK_API SkDilateImageFilter : public SkMorphologyImageFilter {
34public:
senorblanco@chromium.org8fcad982013-09-17 13:41:43 +000035 SkDilateImageFilter(int radiusX, int radiusY,
36 SkImageFilter* input = NULL,
senorblanco@chromium.orgb295fb62013-10-10 13:51:19 +000037 const CropRect* cropRect = NULL)
senorblanco@chromium.org8fcad982013-09-17 13:41:43 +000038 : INHERITED(radiusX, radiusY, input, cropRect) {}
senorblanco@chromium.org05054f12012-03-02 21:05:45 +000039
senorblanco@chromium.org05054f12012-03-02 21:05:45 +000040 virtual bool onFilterImage(Proxy*, const SkBitmap& src, const SkMatrix&,
41 SkBitmap* result, SkIPoint* offset) SK_OVERRIDE;
senorblanco@chromium.org84207c42012-08-22 20:51:19 +000042#if SK_SUPPORT_GPU
commit-bot@chromium.org1aa54bf2013-08-05 16:53:50 +000043 virtual bool filterImageGPU(Proxy* proxy, const SkBitmap& src, const SkMatrix& ctm,
44 SkBitmap* result, SkIPoint* offset) SK_OVERRIDE;
senorblanco@chromium.org84207c42012-08-22 20:51:19 +000045#endif
djsollen@google.comba28d032012-03-26 17:57:35 +000046
47 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkDilateImageFilter)
senorblanco@chromium.org05054f12012-03-02 21:05:45 +000048
djsollen@google.com54924242012-03-29 15:18:04 +000049protected:
50 SkDilateImageFilter(SkFlattenableReadBuffer& buffer) : INHERITED(buffer) {}
51
52private:
senorblanco@chromium.org05054f12012-03-02 21:05:45 +000053 typedef SkMorphologyImageFilter INHERITED;
54};
55
56class SK_API SkErodeImageFilter : public SkMorphologyImageFilter {
57public:
senorblanco@chromium.org8fcad982013-09-17 13:41:43 +000058 SkErodeImageFilter(int radiusX, int radiusY,
59 SkImageFilter* input = NULL,
senorblanco@chromium.orgb295fb62013-10-10 13:51:19 +000060 const CropRect* cropRect = NULL)
senorblanco@chromium.org8fcad982013-09-17 13:41:43 +000061 : INHERITED(radiusX, radiusY, input, cropRect) {}
senorblanco@chromium.org05054f12012-03-02 21:05:45 +000062
senorblanco@chromium.org05054f12012-03-02 21:05:45 +000063 virtual bool onFilterImage(Proxy*, const SkBitmap& src, const SkMatrix&,
64 SkBitmap* result, SkIPoint* offset) SK_OVERRIDE;
senorblanco@chromium.org84207c42012-08-22 20:51:19 +000065#if SK_SUPPORT_GPU
commit-bot@chromium.org1aa54bf2013-08-05 16:53:50 +000066 virtual bool filterImageGPU(Proxy* proxy, const SkBitmap& src, const SkMatrix& ctm,
67 SkBitmap* result, SkIPoint* offset) SK_OVERRIDE;
senorblanco@chromium.org84207c42012-08-22 20:51:19 +000068#endif
senorblanco@chromium.org05054f12012-03-02 21:05:45 +000069
djsollen@google.comba28d032012-03-26 17:57:35 +000070 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkErodeImageFilter)
senorblanco@chromium.org05054f12012-03-02 21:05:45 +000071
djsollen@google.com54924242012-03-29 15:18:04 +000072protected:
73 SkErodeImageFilter(SkFlattenableReadBuffer& buffer) : INHERITED(buffer) {}
74
senorblanco@chromium.org05054f12012-03-02 21:05:45 +000075private:
76 typedef SkMorphologyImageFilter INHERITED;
77};
78
79#endif