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_shader.h"
6
7#include "flutter/lib/ui/ui_dart_state.h"
8#include "third_party/tonic/converter/dart_converter.h"
9#include "third_party/tonic/dart_args.h"
10#include "third_party/tonic/dart_binding_macros.h"
11#include "third_party/tonic/dart_library_natives.h"
12
13using tonic::ToDart;
14
15namespace flutter {
16
17static void ImageShader_constructor(Dart_NativeArguments args) {
18 DartCallConstructor(&ImageShader::Create, args);
19}
20
21IMPLEMENT_WRAPPERTYPEINFO(ui, ImageShader);
22
23#define FOR_EACH_BINDING(V) V(ImageShader, initWithImage)
24
25FOR_EACH_BINDING(DART_NATIVE_CALLBACK)
26
27void ImageShader::RegisterNatives(tonic::DartLibraryNatives* natives) {
28 natives->Register(
29 {{"ImageShader_constructor", ImageShader_constructor, 1, true},
30 FOR_EACH_BINDING(DART_REGISTER_NATIVE)});
31}
32
33fml::RefPtr<ImageShader> ImageShader::Create() {
34 return fml::MakeRefCounted<ImageShader>();
35}
36
37void ImageShader::initWithImage(CanvasImage* image,
38 SkTileMode tmx,
39 SkTileMode tmy,
40 const tonic::Float64List& matrix4) {
41 if (!image) {
42 Dart_ThrowException(
43 ToDart("ImageShader constructor called with non-genuine Image."));
44 return;
45 }
46 SkMatrix sk_matrix = ToSkMatrix(matrix4);
47 set_shader(UIDartState::CreateGPUObject(
48 image->image()->makeShader(tmx, tmy, &sk_matrix)));
49}
50
51ImageShader::ImageShader() = default;
52
53ImageShader::~ImageShader() = default;
54
55} // namespace flutter
56