Line data Source code
1 : /*
2 : * Copyright 2014 The Android Open Source Project
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 SkMatrixImageFilter_DEFINED
9 : #define SkMatrixImageFilter_DEFINED
10 :
11 : #include "SkImageFilter.h"
12 : #include "SkMatrix.h"
13 :
14 : /*! \class SkMatrixImageFilter
15 : Matrix transformation image filter. This filter draws its source
16 : input transformed by the given matrix.
17 : */
18 :
19 0 : class SK_API SkMatrixImageFilter : public SkImageFilter {
20 : public:
21 : /** Construct a 2D transformation image filter.
22 : * @param transform The matrix to apply when drawing the src bitmap
23 : * @param filterQuality The quality of filtering to apply when scaling.
24 : * @param input The input image filter. If nullptr, the src bitmap
25 : * passed to filterImage() is used instead.
26 : */
27 :
28 : static sk_sp<SkImageFilter> Make(const SkMatrix& transform,
29 : SkFilterQuality filterQuality,
30 : sk_sp<SkImageFilter> input);
31 :
32 : SkRect computeFastBounds(const SkRect&) const override;
33 :
34 : SK_TO_STRING_OVERRIDE()
35 0 : SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkMatrixImageFilter)
36 :
37 : protected:
38 : SkMatrixImageFilter(const SkMatrix& transform,
39 : SkFilterQuality,
40 : sk_sp<SkImageFilter> input);
41 : void flatten(SkWriteBuffer&) const override;
42 :
43 : sk_sp<SkSpecialImage> onFilterImage(SkSpecialImage* source, const Context&,
44 : SkIPoint* offset) const override;
45 : SkIRect onFilterNodeBounds(const SkIRect& src, const SkMatrix&, MapDirection) const override;
46 :
47 : private:
48 : SkMatrix fTransform;
49 : SkFilterQuality fFilterQuality;
50 : typedef SkImageFilter INHERITED;
51 : };
52 :
53 : #endif
|