| // Copyright 2018 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef GARNET_EXAMPLES_UI_EMBEDDER_APP_H_ |
| #define GARNET_EXAMPLES_UI_EMBEDDER_APP_H_ |
| |
| #include <fuchsia/sys/cpp/fidl.h> |
| #include <fuchsia/ui/app/cpp/fidl.h> |
| #include <fuchsia/ui/scenic/cpp/fidl.h> |
| #include <lib/async-loop/cpp/loop.h> |
| #include <lib/component/cpp/startup_context.h> |
| #include <lib/ui/scenic/cpp/resources.h> |
| #include <lib/ui/scenic/cpp/session.h> |
| |
| namespace embedder { |
| |
| enum class AppType : unsigned char { CONTAINER, SUBVIEW }; |
| |
| class App : public fuchsia::sys::ServiceProvider { |
| public: |
| App(async::Loop* loop, AppType type); |
| ~App(); |
| App(const App&) = delete; |
| App& operator=(const App&) = delete; |
| |
| // |sys::ServiceProvider| |
| void ConnectToService(std::string service_name, ::zx::channel channel) {} |
| |
| private: |
| // Called asynchronously when the session dies. |
| void ReleaseSessionResources(); |
| |
| // Updates and presents the scene. Called first by Init(). Each invocation |
| // schedules another call to Update() when the result of the previous |
| // presentation is asynchronously received. |
| void Update(uint64_t next_presentation_time); |
| |
| // Creates all of the scene resources and sets up the scene graph. |
| void CreateScene(float display_width, float display_height); |
| |
| std::unique_ptr<component::StartupContext> startup_context_; |
| async::Loop* const loop_; |
| |
| AppType type_; |
| fidl::BindingSet<fuchsia::sys::ServiceProvider> service_bindings_; |
| fuchsia::sys::ServiceProviderPtr incoming_services_; |
| fuchsia::ui::app::ViewProviderPtr view_provider_; |
| std::unique_ptr<fuchsia::ui::app::ViewProvider> view_provider_impl_; |
| |
| fuchsia::ui::scenic::ScenicPtr scenic_; |
| std::unique_ptr<scenic::Session> session_; |
| std::unique_ptr<scenic::DisplayCompositor> compositor_; |
| std::unique_ptr<scenic::Camera> camera_; |
| uint32_t view_id_ = 0; |
| uint32_t root_node_id_ = 0; |
| }; |
| |
| } // namespace embedder |
| |
| #endif // GARNET_EXAMPLES_UI_EMBEDDER_APP_H_ |