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/dart_ui.h"
6
7#include "flutter/fml/build_config.h"
8#include "flutter/lib/ui/compositing/scene.h"
9#include "flutter/lib/ui/compositing/scene_builder.h"
10#include "flutter/lib/ui/dart_runtime_hooks.h"
11#include "flutter/lib/ui/isolate_name_server/isolate_name_server_natives.h"
12#include "flutter/lib/ui/painting/canvas.h"
13#include "flutter/lib/ui/painting/codec.h"
14#include "flutter/lib/ui/painting/color_filter.h"
15#include "flutter/lib/ui/painting/engine_layer.h"
16#include "flutter/lib/ui/painting/frame_info.h"
17#include "flutter/lib/ui/painting/gradient.h"
18#include "flutter/lib/ui/painting/image.h"
19#include "flutter/lib/ui/painting/image_descriptor.h"
20#include "flutter/lib/ui/painting/image_filter.h"
21#include "flutter/lib/ui/painting/image_shader.h"
22#include "flutter/lib/ui/painting/immutable_buffer.h"
23#include "flutter/lib/ui/painting/path.h"
24#include "flutter/lib/ui/painting/path_measure.h"
25#include "flutter/lib/ui/painting/picture.h"
26#include "flutter/lib/ui/painting/picture_recorder.h"
27#include "flutter/lib/ui/painting/vertices.h"
28#include "flutter/lib/ui/semantics/semantics_update.h"
29#include "flutter/lib/ui/semantics/semantics_update_builder.h"
30#include "flutter/lib/ui/text/font_collection.h"
31#include "flutter/lib/ui/text/paragraph.h"
32#include "flutter/lib/ui/text/paragraph_builder.h"
33#include "flutter/lib/ui/window/platform_configuration.h"
34#include "third_party/tonic/converter/dart_converter.h"
35#include "third_party/tonic/logging/dart_error.h"
36
37#if defined(LEGACY_FUCHSIA_EMBEDDER)
38#include "flutter/lib/ui/compositing/scene_host.h" // nogncheck
39#endif
40
41using tonic::ToDart;
42
43namespace flutter {
44namespace {
45
46static tonic::DartLibraryNatives* g_natives;
47
48Dart_NativeFunction GetNativeFunction(Dart_Handle name,
49 int argument_count,
50 bool* auto_setup_scope) {
51 return g_natives->GetNativeFunction(name, argument_count, auto_setup_scope);
52}
53
54const uint8_t* GetSymbol(Dart_NativeFunction native_function) {
55 return g_natives->GetSymbol(native_function);
56}
57
58} // namespace
59
60void DartUI::InitForGlobal() {
61 if (!g_natives) {
62 g_natives = new tonic::DartLibraryNatives();
63 Canvas::RegisterNatives(g_natives);
64 CanvasGradient::RegisterNatives(g_natives);
65 CanvasImage::RegisterNatives(g_natives);
66 CanvasPath::RegisterNatives(g_natives);
67 CanvasPathMeasure::RegisterNatives(g_natives);
68 Codec::RegisterNatives(g_natives);
69 ColorFilter::RegisterNatives(g_natives);
70 DartRuntimeHooks::RegisterNatives(g_natives);
71 EngineLayer::RegisterNatives(g_natives);
72 FontCollection::RegisterNatives(g_natives);
73 FrameInfo::RegisterNatives(g_natives);
74 ImageDescriptor::RegisterNatives(g_natives);
75 ImageFilter::RegisterNatives(g_natives);
76 ImageShader::RegisterNatives(g_natives);
77 ImmutableBuffer::RegisterNatives(g_natives);
78 IsolateNameServerNatives::RegisterNatives(g_natives);
79 Paragraph::RegisterNatives(g_natives);
80 ParagraphBuilder::RegisterNatives(g_natives);
81 Picture::RegisterNatives(g_natives);
82 PictureRecorder::RegisterNatives(g_natives);
83 Scene::RegisterNatives(g_natives);
84 SceneBuilder::RegisterNatives(g_natives);
85 SemanticsUpdate::RegisterNatives(g_natives);
86 SemanticsUpdateBuilder::RegisterNatives(g_natives);
87 Vertices::RegisterNatives(g_natives);
88 PlatformConfiguration::RegisterNatives(g_natives);
89#if defined(LEGACY_FUCHSIA_EMBEDDER)
90 SceneHost::RegisterNatives(g_natives);
91#endif
92 }
93}
94
95void DartUI::InitForIsolate() {
96 FML_DCHECK(g_natives);
97 Dart_Handle result = Dart_SetNativeResolver(
98 Dart_LookupLibrary(ToDart("dart:ui")), GetNativeFunction, GetSymbol);
99 if (Dart_IsError(result)) {
100 Dart_PropagateError(result);
101 }
102}
103
104} // namespace flutter
105