SkImageSource.h revision 225db4441e0cb887d52c906e8bb39df506304b3e
1/*
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
11#include "SkImage.h"
12#include "SkImageFilter.h"
13
14class SK_API SkImageSource : public SkImageFilter {
15public:
16    static sk_sp<SkImageFilter> Make(sk_sp<SkImage> image);
17    static sk_sp<SkImageFilter> Make(sk_sp<SkImage> image,
18                                     const SkRect& srcRect,
19                                     const SkRect& dstRect,
20                                     SkFilterQuality filterQuality);
21
22    SkRect computeFastBounds(const SkRect& src) const override;
23
24    SK_TO_STRING_OVERRIDE()
25    SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkImageSource)
26
27#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
39protected:
40    void flatten(SkWriteBuffer&) const override;
41
42    sk_sp<SkSpecialImage> onFilterImage(SkSpecialImage* source, const Context&,
43                                        SkIPoint* offset) const override;
44
45private:
46    explicit SkImageSource(sk_sp<SkImage>);
47    SkImageSource(sk_sp<SkImage>,
48                  const SkRect& srcRect,
49                  const SkRect& dstRect,
50                  SkFilterQuality);
51
52    sk_sp<SkImage>   fImage;
53    SkRect           fSrcRect, fDstRect;
54    SkFilterQuality  fFilterQuality;
55
56    typedef SkImageFilter INHERITED;
57};
58
59#endif
60