1 | // Copyright 2013 The Flutter Authors. All rights reserved. |
2 | // Use of this source code is governed by a BSD-style license that can be |
3 | // found in the LICENSE file. |
4 | |
5 | #include "flutter/lib/ui/painting/image_filter.h" |
6 | |
7 | #include "flutter/lib/ui/painting/matrix.h" |
8 | #include "third_party/skia/include/effects/SkBlurImageFilter.h" |
9 | #include "third_party/skia/include/effects/SkImageSource.h" |
10 | #include "third_party/skia/include/effects/SkPictureImageFilter.h" |
11 | #include "third_party/tonic/converter/dart_converter.h" |
12 | #include "third_party/tonic/dart_args.h" |
13 | #include "third_party/tonic/dart_binding_macros.h" |
14 | #include "third_party/tonic/dart_library_natives.h" |
15 | |
16 | namespace flutter { |
17 | |
18 | static void ImageFilter_constructor(Dart_NativeArguments args) { |
19 | UIDartState::ThrowIfUIOperationsProhibited(); |
20 | DartCallConstructor(&ImageFilter::Create, args); |
21 | } |
22 | |
23 | IMPLEMENT_WRAPPERTYPEINFO(ui, ImageFilter); |
24 | |
25 | #define FOR_EACH_BINDING(V) \ |
26 | V(ImageFilter, initImage) \ |
27 | V(ImageFilter, initPicture) \ |
28 | V(ImageFilter, initBlur) \ |
29 | V(ImageFilter, initMatrix) |
30 | |
31 | FOR_EACH_BINDING(DART_NATIVE_CALLBACK) |
32 | |
33 | void ImageFilter::RegisterNatives(tonic::DartLibraryNatives* natives) { |
34 | natives->Register( |
35 | {{"ImageFilter_constructor" , ImageFilter_constructor, 1, true}, |
36 | FOR_EACH_BINDING(DART_REGISTER_NATIVE)}); |
37 | } |
38 | |
39 | fml::RefPtr<ImageFilter> ImageFilter::Create() { |
40 | return fml::MakeRefCounted<ImageFilter>(); |
41 | } |
42 | |
43 | ImageFilter::ImageFilter() {} |
44 | |
45 | ImageFilter::~ImageFilter() {} |
46 | |
47 | void ImageFilter::initImage(CanvasImage* image) { |
48 | filter_ = SkImageSource::Make(image->image()); |
49 | } |
50 | |
51 | void ImageFilter::initPicture(Picture* picture) { |
52 | filter_ = SkPictureImageFilter::Make(picture->picture()); |
53 | } |
54 | |
55 | void ImageFilter::initBlur(double sigma_x, double sigma_y) { |
56 | filter_ = SkBlurImageFilter::Make(sigma_x, sigma_y, nullptr, nullptr, |
57 | SkBlurImageFilter::kClamp_TileMode); |
58 | } |
59 | |
60 | void ImageFilter::initMatrix(const tonic::Float64List& matrix4, |
61 | int filterQuality) { |
62 | filter_ = SkImageFilter::MakeMatrixFilter( |
63 | ToSkMatrix(matrix4), static_cast<SkFilterQuality>(filterQuality), |
64 | nullptr); |
65 | } |
66 | |
67 | } // namespace flutter |
68 | |