| // Copyright 2015 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 SRC_UI_EXAMPLES_TILE_VIEW_TILE_VIEW_H_ |
| #define SRC_UI_EXAMPLES_TILE_VIEW_TILE_VIEW_H_ |
| |
| #include <fuchsia/sys/cpp/fidl.h> |
| #include <fuchsia/ui/policy/cpp/fidl.h> |
| #include <fuchsia/ui/views/cpp/fidl.h> |
| #include <lib/fidl/cpp/binding_set.h> |
| #include <lib/sys/cpp/component_context.h> |
| #include <lib/syslog/cpp/macros.h> |
| #include <lib/ui/scenic/cpp/resources.h> |
| #include <lib/zx/eventpair.h> |
| |
| #include <map> |
| #include <memory> |
| |
| #include "src/lib/fxl/macros.h" |
| #include "src/lib/storage/vfs/cpp/pseudo_dir.h" |
| #include "src/lib/storage/vfs/cpp/synchronous_vfs.h" |
| #include "src/lib/ui/base_view/base_view.h" |
| #include "src/ui/examples/tile_view/tile_params.h" |
| |
| namespace examples { |
| |
| class TileView : public scenic::BaseView, public fuchsia::ui::policy::Presenter { |
| public: |
| TileView(scenic::ViewContext context, TileParams tile_params); |
| |
| ~TileView() override = default; |
| |
| private: |
| struct ViewData { |
| explicit ViewData(std::string label, fuchsia::ui::views::ViewHolderToken view_holder_token, |
| fuchsia::sys::ComponentControllerPtr controller, scenic::Session* session); |
| ~ViewData() = default; |
| |
| fuchsia::sys::ComponentControllerPtr controller; |
| scenic::EntityNode host_node; |
| scenic::ShapeNode clip_shape_node; |
| scenic::ViewHolder view_holder; |
| |
| float width; |
| float height; |
| }; |
| |
| // |scenic::SessionListener| |
| void OnScenicError(std::string error) override { FX_LOGS(ERROR) << "Scenic Error " << error; } |
| |
| void OnChildAttached(uint32_t view_holder_id); |
| |
| void OnChildUnavailable(uint32_t view_holder_id); |
| |
| // |scenic::BaseView| |
| void OnSceneInvalidated(fuchsia::images::PresentationInfo presentation_info) override; |
| |
| // |scenic::BaseView| |
| void OnScenicEvent(fuchsia::ui::scenic::Event event) override; |
| |
| // |fuchsia::ui::policy::Presenter| |
| void PresentView(fuchsia::ui::views::ViewHolderToken view_holder_token, |
| fidl::InterfaceRequest<fuchsia::ui::policy::Presentation> presentation) final; |
| |
| // |fuchsia::ui::policy::Presenter| |
| void PresentOrReplaceView( |
| fuchsia::ui::views::ViewHolderToken view_holder_token, |
| fidl::InterfaceRequest<fuchsia::ui::policy::Presentation> presentation_request) final; |
| |
| // |fuchsia::ui::policy::Presenter| |
| void PresentOrReplaceView2( |
| fuchsia::ui::views::ViewHolderToken view_holder_token, fuchsia::ui::views::ViewRef view_ref, |
| fidl::InterfaceRequest<fuchsia::ui::policy::Presentation> presentation_request) final; |
| |
| // Set up environment with a |Presenter| service. |
| // We launch apps with this environment. |
| void CreateNestedEnvironment(); |
| |
| // Launches initial list of views, passed as command line parameters. |
| void ConnectViews(); |
| |
| zx::channel OpenAsDirectory(); |
| |
| void AddChildView(std::string label, fuchsia::ui::views::ViewHolderToken view_holder_token, |
| fuchsia::sys::ComponentControllerPtr); |
| void RemoveChildView(uint32_t child_key); |
| |
| // Nested environment within which the apps started by TileView will run. |
| fuchsia::sys::EnvironmentPtr env_; |
| fuchsia::sys::EnvironmentControllerPtr env_controller_; |
| fs::SynchronousVfs vfs_; |
| fbl::RefPtr<fs::PseudoDir> services_dir_; |
| fuchsia::sys::LauncherPtr env_launcher_; |
| |
| // Parsed command-line parameters for this program. |
| TileParams params_; |
| |
| // The container for all views. |
| scenic::EntityNode container_node_; |
| |
| // Map from ViewHolderIds to |ViewData| |
| std::map<uint32_t, std::unique_ptr<ViewData>> views_; |
| |
| fidl::BindingSet<fuchsia::ui::policy::Presenter> presenter_bindings_; |
| |
| FXL_DISALLOW_COPY_AND_ASSIGN(TileView); |
| }; |
| |
| } // namespace examples |
| |
| #endif // SRC_UI_EXAMPLES_TILE_VIEW_TILE_VIEW_H_ |