blob: c86550d1781232e18bfb0626b168878ded98c59c [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"
Cary Clark4dc5a452018-05-21 11:56:57 -040012#include "SkFlattenable.h"
junov@chromium.orgf44fcdc2013-08-07 20:00:55 +000013#include "SkImageFilter.h"
14#include "SkScalar.h"
15
16class SK_API SkDropShadowImageFilter : public SkImageFilter {
17public:
sugoi234f0362014-10-23 13:59:52 -070018 enum ShadowMode {
19 kDrawShadowAndForeground_ShadowMode,
robertphillipsf3f5bad2014-12-19 13:49:15 -080020 kDrawShadowOnly_ShadowMode,
21
22 kLast_ShadowMode = kDrawShadowOnly_ShadowMode
sugoi234f0362014-10-23 13:59:52 -070023 };
24
robertphillipsf3f5bad2014-12-19 13:49:15 -080025 static const int kShadowModeCount = kLast_ShadowMode+1;
26
robertphillipsc4169122016-04-06 08:40:59 -070027 static sk_sp<SkImageFilter> Make(SkScalar dx, SkScalar dy, SkScalar sigmaX, SkScalar sigmaY,
28 SkColor color, ShadowMode shadowMode,
29 sk_sp<SkImageFilter> input,
robertphillips225db442016-04-17 14:27:05 -070030 const CropRect* cropRect = nullptr);
sugoi234f0362014-10-23 13:59:52 -070031
senorblancoe5e79842016-03-21 14:51:59 -070032 SkRect computeFastBounds(const SkRect&) const override;
Cary Clark4dc5a452018-05-21 11:56:57 -040033
34 Factory getFactory() const override { return CreateProc; }
junov@chromium.orgf44fcdc2013-08-07 20:00:55 +000035
36protected:
schenney95376a02015-10-06 12:59:55 -070037 void flatten(SkWriteBuffer&) const override;
robertphillips2302de92016-03-24 07:26:32 -070038 sk_sp<SkSpecialImage> onFilterImage(SkSpecialImage* source, const Context&,
39 SkIPoint* offset) const override;
Matt Sarett6d72ed92017-04-10 16:35:33 -040040 sk_sp<SkImageFilter> onMakeColorSpace(SkColorSpaceXformer*) const override;
Robert Phillips12078432018-05-17 11:17:39 -040041 SkIRect onFilterNodeBounds(const SkIRect& src, const SkMatrix& ctm,
42 MapDirection, const SkIRect* inputRect) const override;
reed80a6dca2015-10-06 11:12:23 -070043
schenney95376a02015-10-06 12:59:55 -070044private:
reed5ea95df2015-10-06 14:05:32 -070045 SkDropShadowImageFilter(SkScalar dx, SkScalar dy, SkScalar sigmaX, SkScalar sigmaY, SkColor,
robertphillipsc4169122016-04-06 08:40:59 -070046 ShadowMode shadowMode, sk_sp<SkImageFilter> input,
47 const CropRect* cropRect);
Cary Clark4dc5a452018-05-21 11:56:57 -040048 static sk_sp<SkFlattenable> CreateProc(SkReadBuffer&);
49 friend class SkFlattenable::PrivateInitializer;
reed5ea95df2015-10-06 14:05:32 -070050
rmistry@google.comd6bab022013-12-02 13:50:38 +000051 SkScalar fDx, fDy, fSigmaX, fSigmaY;
junov@chromium.orgf44fcdc2013-08-07 20:00:55 +000052 SkColor fColor;
sugoi234f0362014-10-23 13:59:52 -070053 ShadowMode fShadowMode;
reed5ea95df2015-10-06 14:05:32 -070054
junov@chromium.orgf44fcdc2013-08-07 20:00:55 +000055 typedef SkImageFilter INHERITED;
56};
robertphillips0a291c72016-03-23 05:00:01 -070057
58#endif