mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
Pass the Mozart ViewHost into Dart
Dart needs access to the ViewHost in order to create child views.
This commit is contained in:
parent
4192794b60
commit
aec7d422e7
@ -11,3 +11,4 @@ int takeServiceRegistry() native "takeServiceRegistry";
|
||||
int takeServicesProvidedByEmbedder() native "takeServicesProvidedByEmbedder";
|
||||
int takeServicesProvidedToEmbedder() native "takeServicesProvidedToEmbedder";
|
||||
int takeShellProxyHandle() native "takeShellProxyHandle";
|
||||
int takeViewHostHandle() native "takeViewHostHandle";
|
||||
|
||||
@ -15,6 +15,7 @@ mojom("interfaces") {
|
||||
"//mojo/services/asset_bundle/interfaces",
|
||||
"//mojo/services/gfx/composition/interfaces",
|
||||
"//mojo/services/service_registry/interfaces",
|
||||
"//mojo/services/ui/views/interfaces",
|
||||
"//sky/services/pointer:interfaces",
|
||||
]
|
||||
}
|
||||
|
||||
@ -9,6 +9,7 @@ import "mojo/public/interfaces/application/shell.mojom";
|
||||
import "mojo/services/asset_bundle/interfaces/asset_bundle.mojom";
|
||||
import "mojo/services/gfx/composition/interfaces/scheduling.mojom";
|
||||
import "mojo/services/service_registry/interfaces/service_registry.mojom";
|
||||
import "mojo/services/ui/views/interfaces/views.mojom";
|
||||
import "sky/services/engine/input_event.mojom";
|
||||
import "sky/services/pointer/pointer.mojom";
|
||||
|
||||
@ -32,6 +33,7 @@ struct ServicesData {
|
||||
mojo.ServiceRegistry? service_registry;
|
||||
mojo.ServiceProvider? services_provided_by_embedder;
|
||||
mojo.ServiceProvider&? services_provided_to_embedder;
|
||||
mojo.ui.ViewHost? view_host;
|
||||
mojo.gfx.composition.SceneScheduler? scene_scheduler;
|
||||
};
|
||||
|
||||
|
||||
@ -17,14 +17,16 @@ ViewImpl::ViewImpl(ServicesDataPtr services,
|
||||
: binding_(this), url_(url), listener_binding_(this) {
|
||||
DCHECK(services);
|
||||
|
||||
mojo::ui::ViewHostPtr view_host;
|
||||
|
||||
// Views
|
||||
mojo::ConnectToService(
|
||||
services->shell.get(), "mojo:view_manager_service", &view_manager_);
|
||||
mojo::ui::ViewPtr view;
|
||||
binding_.Bind(mojo::GetProxy(&view));
|
||||
view_manager_->RegisterView(
|
||||
view.Pass(), mojo::GetProxy(&view_host_), url_, callback);
|
||||
view_host_->GetServiceProvider(mojo::GetProxy(&view_service_provider_));
|
||||
view.Pass(), mojo::GetProxy(&view_host), url_, callback);
|
||||
view_host->GetServiceProvider(mojo::GetProxy(&view_service_provider_));
|
||||
|
||||
// Input
|
||||
mojo::ConnectToService(view_service_provider_.get(), &input_connection_);
|
||||
@ -34,8 +36,9 @@ ViewImpl::ViewImpl(ServicesDataPtr services,
|
||||
|
||||
// Compositing
|
||||
mojo::gfx::composition::ScenePtr scene;
|
||||
view_host_->CreateScene(mojo::GetProxy(&scene));
|
||||
view_host->CreateScene(mojo::GetProxy(&scene));
|
||||
scene->GetScheduler(mojo::GetProxy(&services->scene_scheduler));
|
||||
services->view_host = view_host.Pass();
|
||||
|
||||
// Engine
|
||||
shell_view_.reset(new ShellView(Shell::Shared()));
|
||||
|
||||
@ -49,7 +49,6 @@ class ViewImpl : public mojo::ui::View,
|
||||
mojo::StrongBinding<mojo::ui::View> binding_;
|
||||
std::string url_;
|
||||
mojo::ui::ViewManagerPtr view_manager_;
|
||||
mojo::ui::ViewHostPtr view_host_;
|
||||
mojo::ServiceProviderPtr view_service_provider_;
|
||||
mojo::ui::InputConnectionPtr input_connection_;
|
||||
mojo::Binding<mojo::ui::InputListener> listener_binding_;
|
||||
|
||||
@ -51,6 +51,11 @@ void TakeServicesProvidedToEmbedder(Dart_NativeArguments args) {
|
||||
args, GetInternals()->TakeServicesProvidedToEmbedder().value());
|
||||
}
|
||||
|
||||
void TakeViewHostHandle(Dart_NativeArguments args) {
|
||||
Dart_SetIntegerReturnValue(
|
||||
args, GetInternals()->TakeViewHostHandle().value());
|
||||
}
|
||||
|
||||
static DartLibraryNatives* g_natives;
|
||||
|
||||
void EnsureNatives() {
|
||||
@ -63,6 +68,7 @@ void EnsureNatives() {
|
||||
{"takeServicesProvidedByEmbedder", TakeServicesProvidedByEmbedder, 0, true},
|
||||
{"takeServicesProvidedToEmbedder", TakeServicesProvidedToEmbedder, 0, true},
|
||||
{"takeShellProxyHandle", TakeShellProxyHandle, 0, true},
|
||||
{"takeViewHostHandle", TakeViewHostHandle, 0, true},
|
||||
});
|
||||
}
|
||||
|
||||
@ -136,5 +142,9 @@ mojo::Handle Internals::TakeServicesProvidedToEmbedder() {
|
||||
return services_provided_to_embedder_.PassMessagePipe().release();
|
||||
}
|
||||
|
||||
mojo::Handle Internals::TakeViewHostHandle() {
|
||||
return services_ ? services_->view_host.PassInterface().PassHandle().release() : mojo::Handle();
|
||||
}
|
||||
|
||||
} // namespace shell
|
||||
} // namespace sky
|
||||
|
||||
@ -35,6 +35,7 @@ class Internals
|
||||
mojo::Handle TakeServicesProvidedByEmbedder();
|
||||
mojo::Handle TakeServicesProvidedToEmbedder();
|
||||
mojo::Handle TakeRootBundleHandle();
|
||||
mojo::Handle TakeViewHostHandle();
|
||||
|
||||
private:
|
||||
explicit Internals(ServicesDataPtr services,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user