blob: 4ceff95668ee635ec4148352947f93c5930ecd37 [file] [log] [blame]
fmalitacd56f812015-09-14 13:31:18 -07001/*
2 * Copyright 2015 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
8#ifndef SkImageSource_DEFINED
9#define SkImageSource_DEFINED
10
msarette8597a42016-03-24 10:41:47 -070011#include "SkImage.h"
fmalitacd56f812015-09-14 13:31:18 -070012#include "SkImageFilter.h"
13
fmalitacd56f812015-09-14 13:31:18 -070014class SK_API SkImageSource : public SkImageFilter {
15public:
robertphillips225db442016-04-17 14:27:05 -070016 static sk_sp<SkImageFilter> Make(sk_sp<SkImage> image);
robertphillips549c8992016-04-01 09:28:51 -070017 static sk_sp<SkImageFilter> Make(sk_sp<SkImage> image,
18 const SkRect& srcRect,
19 const SkRect& dstRect,
robertphillips225db442016-04-17 14:27:05 -070020 SkFilterQuality filterQuality);
fmalitacd56f812015-09-14 13:31:18 -070021
senorblancoe5e79842016-03-21 14:51:59 -070022 SkRect computeFastBounds(const SkRect& src) const override;
fmalitacd56f812015-09-14 13:31:18 -070023
24 SK_TO_STRING_OVERRIDE()
25 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkImageSource)
26
robertphillips549c8992016-04-01 09:28:51 -070027#ifdef SK_SUPPORT_LEGACY_IMAGEFILTER_PTR
28 static SkImageFilter* Create(SkImage* image) {
29 return Make(sk_ref_sp<SkImage>(image)).release();
30 }
31 static SkImageFilter* Create(SkImage* image,
32 const SkRect& srcRect,
33 const SkRect& dstRect,
34 SkFilterQuality filterQuality) {
35 return Make(sk_ref_sp<SkImage>(image), srcRect, dstRect, filterQuality).release();
36 }
37#endif
38
fmalitacd56f812015-09-14 13:31:18 -070039protected:
40 void flatten(SkWriteBuffer&) const override;
41
robertphillips2302de92016-03-24 07:26:32 -070042 sk_sp<SkSpecialImage> onFilterImage(SkSpecialImage* source, const Context&,
43 SkIPoint* offset) const override;
fmalitacd56f812015-09-14 13:31:18 -070044
45private:
robertphillips549c8992016-04-01 09:28:51 -070046 explicit SkImageSource(sk_sp<SkImage>);
47 SkImageSource(sk_sp<SkImage>,
fmalitacd56f812015-09-14 13:31:18 -070048 const SkRect& srcRect,
49 const SkRect& dstRect,
50 SkFilterQuality);
51
robertphillips37bd7c32016-03-17 14:31:39 -070052 sk_sp<SkImage> fImage;
53 SkRect fSrcRect, fDstRect;
54 SkFilterQuality fFilterQuality;
fmalitacd56f812015-09-14 13:31:18 -070055
56 typedef SkImageFilter INHERITED;
57};
58
59#endif