blob: d25cb6dc36bcbbb1a0e3add05f568e669f256f0e [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
Cary Clark4dc5a452018-05-21 11:56:57 -040011#include "SkFlattenable.h"
msarette8597a42016-03-24 10:41:47 -070012#include "SkImage.h"
fmalitacd56f812015-09-14 13:31:18 -070013#include "SkImageFilter.h"
14
fmalitacd56f812015-09-14 13:31:18 -070015class SK_API SkImageSource : public SkImageFilter {
16public:
robertphillips225db442016-04-17 14:27:05 -070017 static sk_sp<SkImageFilter> Make(sk_sp<SkImage> image);
robertphillips549c8992016-04-01 09:28:51 -070018 static sk_sp<SkImageFilter> Make(sk_sp<SkImage> image,
19 const SkRect& srcRect,
20 const SkRect& dstRect,
robertphillips225db442016-04-17 14:27:05 -070021 SkFilterQuality filterQuality);
fmalitacd56f812015-09-14 13:31:18 -070022
senorblancoe5e79842016-03-21 14:51:59 -070023 SkRect computeFastBounds(const SkRect& src) const override;
fmalitacd56f812015-09-14 13:31:18 -070024
Cary Clark32a49102018-05-20 23:15:43 +000025 void toString(SkString* str) const override;
Cary Clark4dc5a452018-05-21 11:56:57 -040026
27 Factory getFactory() const override { return CreateProc; }
fmalitacd56f812015-09-14 13:31:18 -070028
29protected:
30 void flatten(SkWriteBuffer&) const override;
31
robertphillips2302de92016-03-24 07:26:32 -070032 sk_sp<SkSpecialImage> onFilterImage(SkSpecialImage* source, const Context&,
33 SkIPoint* offset) const override;
Matt Sarett6d72ed92017-04-10 16:35:33 -040034 sk_sp<SkImageFilter> onMakeColorSpace(SkColorSpaceXformer*) const override;
fmalitacd56f812015-09-14 13:31:18 -070035
Robert Phillips12078432018-05-17 11:17:39 -040036 SkIRect onFilterNodeBounds(const SkIRect&, const SkMatrix& ctm,
37 MapDirection, const SkIRect* inputRect) const override;
Xianzhu Wangb4496662017-09-25 10:26:40 -070038
fmalitacd56f812015-09-14 13:31:18 -070039private:
robertphillips549c8992016-04-01 09:28:51 -070040 explicit SkImageSource(sk_sp<SkImage>);
41 SkImageSource(sk_sp<SkImage>,
fmalitacd56f812015-09-14 13:31:18 -070042 const SkRect& srcRect,
43 const SkRect& dstRect,
44 SkFilterQuality);
Cary Clark4dc5a452018-05-21 11:56:57 -040045 static sk_sp<SkFlattenable> CreateProc(SkReadBuffer&);
46 friend class SkFlattenable::PrivateInitializer;
fmalitacd56f812015-09-14 13:31:18 -070047
robertphillips37bd7c32016-03-17 14:31:39 -070048 sk_sp<SkImage> fImage;
49 SkRect fSrcRect, fDstRect;
50 SkFilterQuality fFilterQuality;
fmalitacd56f812015-09-14 13:31:18 -070051
52 typedef SkImageFilter INHERITED;
53};
54
55#endif