• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_filter.h"
20 #include "flutter/lib/ui/painting/image_shader.h"
21 #include "flutter/lib/ui/painting/path.h"
22 #include "flutter/lib/ui/painting/path_measure.h"
23 #include "flutter/lib/ui/painting/picture.h"
24 #include "flutter/lib/ui/painting/picture_recorder.h"
25 #include "flutter/lib/ui/painting/vertices.h"
26 #include "flutter/lib/ui/semantics/semantics_update.h"
27 #include "flutter/lib/ui/semantics/semantics_update_builder.h"
28 #include "flutter/lib/ui/text/font_collection.h"
29 #include "flutter/lib/ui/text/paragraph.h"
30 #include "flutter/lib/ui/text/paragraph_builder.h"
31 #include "flutter/lib/ui/window/window.h"
32 
33 #if defined(OS_FUCHSIA)
34 #include "flutter/lib/ui/compositing/scene_host.h"
35 #endif
36 
37 using tonic::ToDart;
38 
39 namespace flutter {
40 namespace {
41 
42 static tonic::DartLibraryNatives* g_natives;
43 static tonic::DartLibraryNatives* g_natives_secondary;
44 
GetNativeFunction(Dart_Handle name,int argument_count,bool * auto_setup_scope)45 Dart_NativeFunction GetNativeFunction(Dart_Handle name,
46                                       int argument_count,
47                                       bool* auto_setup_scope) {
48   return g_natives->GetNativeFunction(name, argument_count, auto_setup_scope);
49 }
50 
GetNativeFunctionSecondary(Dart_Handle name,int argument_count,bool * auto_setup_scope)51 Dart_NativeFunction GetNativeFunctionSecondary(Dart_Handle name,
52                                                int argument_count,
53                                                bool* auto_setup_scope) {
54   return g_natives_secondary->GetNativeFunction(name, argument_count,
55                                                 auto_setup_scope);
56 }
57 
GetSymbol(Dart_NativeFunction native_function)58 const uint8_t* GetSymbol(Dart_NativeFunction native_function) {
59   return g_natives->GetSymbol(native_function);
60 }
61 
GetSymbolSecondary(Dart_NativeFunction native_function)62 const uint8_t* GetSymbolSecondary(Dart_NativeFunction native_function) {
63   return g_natives_secondary->GetSymbol(native_function);
64 }
65 
66 }  // namespace
67 
InitForGlobal()68 void DartUI::InitForGlobal() {
69   if (!g_natives) {
70     g_natives = new tonic::DartLibraryNatives();
71     Canvas::RegisterNatives(g_natives);
72     CanvasGradient::RegisterNatives(g_natives);
73     CanvasImage::RegisterNatives(g_natives);
74     CanvasPath::RegisterNatives(g_natives);
75     CanvasPathMeasure::RegisterNatives(g_natives);
76     Codec::RegisterNatives(g_natives);
77     ColorFilter::RegisterNatives(g_natives);
78     DartRuntimeHooks::RegisterNatives(g_natives);
79     EngineLayer::RegisterNatives(g_natives);
80     FontCollection::RegisterNatives(g_natives);
81     FrameInfo::RegisterNatives(g_natives);
82     ImageFilter::RegisterNatives(g_natives);
83     ImageShader::RegisterNatives(g_natives);
84     IsolateNameServerNatives::RegisterNatives(g_natives);
85     Paragraph::RegisterNatives(g_natives);
86     ParagraphBuilder::RegisterNatives(g_natives);
87     Picture::RegisterNatives(g_natives);
88     PictureRecorder::RegisterNatives(g_natives);
89     Scene::RegisterNatives(g_natives);
90     SceneBuilder::RegisterNatives(g_natives);
91     SemanticsUpdate::RegisterNatives(g_natives);
92     SemanticsUpdateBuilder::RegisterNatives(g_natives);
93     Vertices::RegisterNatives(g_natives);
94     Window::RegisterNatives(g_natives);
95 #if defined(OS_FUCHSIA)
96     SceneHost::RegisterNatives(g_natives);
97 #endif
98 
99     // Secondary isolates do not provide UI-related APIs.
100     g_natives_secondary = new tonic::DartLibraryNatives();
101     DartRuntimeHooks::RegisterNatives(g_natives_secondary);
102     IsolateNameServerNatives::RegisterNatives(g_natives_secondary);
103   }
104 }
105 
InitForIsolate(bool is_root_isolate)106 void DartUI::InitForIsolate(bool is_root_isolate) {
107   FML_DCHECK(g_natives);
108   auto get_native_function =
109       is_root_isolate ? GetNativeFunction : GetNativeFunctionSecondary;
110   auto get_symbol = is_root_isolate ? GetSymbol : GetSymbolSecondary;
111   Dart_Handle result = Dart_SetNativeResolver(
112       Dart_LookupLibrary(ToDart("dart:ui")), get_native_function, get_symbol);
113   if (Dart_IsError(result)) {
114     Dart_PropagateError(result);
115   }
116 }
117 
118 }  // namespace flutter
119