blob: a4726f3247f8207b78c5bf157de375034d9a3c1b [file] [log] [blame]
junov@chromium.orgf44fcdc2013-08-07 20:00:55 +00001/*
2 * Copyright 2013 Google Inc.
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
robertphillips0a291c72016-03-23 05:00:01 -07008#ifndef SkDropShadowImageFilter_DEFINED
9#define SkDropShadowImageFilter_DEFINED
10
junov@chromium.orgf44fcdc2013-08-07 20:00:55 +000011#include "SkColor.h"
12#include "SkImageFilter.h"
13#include "SkScalar.h"
14
15class SK_API SkDropShadowImageFilter : public SkImageFilter {
16public:
sugoi234f0362014-10-23 13:59:52 -070017 enum ShadowMode {
18 kDrawShadowAndForeground_ShadowMode,
robertphillipsf3f5bad2014-12-19 13:49:15 -080019 kDrawShadowOnly_ShadowMode,
20
21 kLast_ShadowMode = kDrawShadowOnly_ShadowMode
sugoi234f0362014-10-23 13:59:52 -070022 };
23
robertphillipsf3f5bad2014-12-19 13:49:15 -080024 static const int kShadowModeCount = kLast_ShadowMode+1;
25
robertphillipsc4169122016-04-06 08:40:59 -070026 static sk_sp<SkImageFilter> Make(SkScalar dx, SkScalar dy, SkScalar sigmaX, SkScalar sigmaY,
27 SkColor color, ShadowMode shadowMode,
28 sk_sp<SkImageFilter> input,
29 const CropRect* cropRect = nullptr) {
30 return sk_sp<SkImageFilter>(new SkDropShadowImageFilter(dx, dy, sigmaX, sigmaY,
31 color, shadowMode,
32 std::move(input),
33 cropRect));
sugoi234f0362014-10-23 13:59:52 -070034 }
35
senorblancoe5e79842016-03-21 14:51:59 -070036 SkRect computeFastBounds(const SkRect&) const override;
robertphillipsf3f5bad2014-12-19 13:49:15 -080037 SK_TO_STRING_OVERRIDE()
junov@chromium.orgf44fcdc2013-08-07 20:00:55 +000038 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkDropShadowImageFilter)
39
robertphillipsc4169122016-04-06 08:40:59 -070040#ifdef SK_SUPPORT_LEGACY_IMAGEFILTER_PTR
41 static SkImageFilter* Create(SkScalar dx, SkScalar dy, SkScalar sigmaX, SkScalar sigmaY,
42 SkColor color, ShadowMode shadowMode,
43 SkImageFilter* input = nullptr,
44 const CropRect* cropRect = nullptr) {
45 return Make(dx, dy, sigmaX, sigmaY, color, shadowMode,
46 sk_ref_sp<SkImageFilter>(input), cropRect).release();
47 }
48#endif
49
junov@chromium.orgf44fcdc2013-08-07 20:00:55 +000050protected:
schenney95376a02015-10-06 12:59:55 -070051 void flatten(SkWriteBuffer&) const override;
robertphillips2302de92016-03-24 07:26:32 -070052 sk_sp<SkSpecialImage> onFilterImage(SkSpecialImage* source, const Context&,
53 SkIPoint* offset) const override;
senorblancoe5e79842016-03-21 14:51:59 -070054 SkIRect onFilterNodeBounds(const SkIRect& src, const SkMatrix&, MapDirection) const override;
reed80a6dca2015-10-06 11:12:23 -070055
schenney95376a02015-10-06 12:59:55 -070056private:
reed5ea95df2015-10-06 14:05:32 -070057 SkDropShadowImageFilter(SkScalar dx, SkScalar dy, SkScalar sigmaX, SkScalar sigmaY, SkColor,
robertphillipsc4169122016-04-06 08:40:59 -070058 ShadowMode shadowMode, sk_sp<SkImageFilter> input,
59 const CropRect* cropRect);
reed5ea95df2015-10-06 14:05:32 -070060
rmistry@google.comd6bab022013-12-02 13:50:38 +000061 SkScalar fDx, fDy, fSigmaX, fSigmaY;
junov@chromium.orgf44fcdc2013-08-07 20:00:55 +000062 SkColor fColor;
sugoi234f0362014-10-23 13:59:52 -070063 ShadowMode fShadowMode;
reed5ea95df2015-10-06 14:05:32 -070064
junov@chromium.orgf44fcdc2013-08-07 20:00:55 +000065 typedef SkImageFilter INHERITED;
66};
robertphillips0a291c72016-03-23 05:00:01 -070067
68#endif