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
12 namespace flutter {
13
14 IMPLEMENT_WRAPPERTYPEINFO(ui, ImageFilter);
15
16 #define FOR_EACH_BINDING(V) \
17 V(ImageFilter, initImage) \
18 V(ImageFilter, initPicture) \
19 V(ImageFilter, initBlur) \
20 V(ImageFilter, initMatrix)
21
FOR_EACH_BINDING(DART_NATIVE_CALLBACK)22 FOR_EACH_BINDING(DART_NATIVE_CALLBACK)
23
24 void ImageFilter::RegisterNatives(tonic::DartLibraryNatives* natives) {
25 }
26
Create()27 fml::RefPtr<ImageFilter> ImageFilter::Create() {
28 return fml::MakeRefCounted<ImageFilter>();
29 }
30
ImageFilter()31 ImageFilter::ImageFilter() {}
32
~ImageFilter()33 ImageFilter::~ImageFilter() {}
34
initImage(CanvasImage * image)35 void ImageFilter::initImage(CanvasImage* image) {
36 filter_ = SkImageSource::Make(image->image());
37 }
38
initPicture(Picture * picture)39 void ImageFilter::initPicture(Picture* picture) {
40 filter_ = SkPictureImageFilter::Make(picture->picture());
41 }
42
initBlur(double sigma_x,double sigma_y)43 void ImageFilter::initBlur(double sigma_x, double sigma_y) {
44 filter_ = SkBlurImageFilter::Make(sigma_x, sigma_y, nullptr, nullptr,
45 SkBlurImageFilter::kClamp_TileMode);
46 }
47
initMatrix(const std::vector<double> & matrix4,int filterQuality)48 void ImageFilter::initMatrix(const std::vector<double>& matrix4,
49 int filterQuality) {
50 filter_ = SkImageFilter::MakeMatrixFilter(
51 ToSkMatrix(matrix4), static_cast<SkFilterQuality>(filterQuality),
52 nullptr);
53 }
54
55 } // namespace flutter
56