| // 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 SRC_UI_EXAMPLES_SIMPLEST_EMBEDDER_EXAMPLE_PRESENTER_H_ | |
| #define SRC_UI_EXAMPLES_SIMPLEST_EMBEDDER_EXAMPLE_PRESENTER_H_ | |
| #include <fuchsia/ui/gfx/cpp/fidl.h> | |
| #include <fuchsia/ui/policy/cpp/fidl.h> | |
| #include <fuchsia/ui/scenic/cpp/fidl.h> | |
| #include <fuchsia/ui/views/cpp/fidl.h> | |
| #include <lib/ui/scenic/cpp/resources.h> | |
| #include <lib/ui/scenic/cpp/session.h> | |
| #include <lib/zx/eventpair.h> | |
| namespace simplest_embedder { | |
| // This is a |Presenter| that is used to present a ShadertoyEmbedderView. For | |
| // simplicity we don't run it in a separate process and connect to it via FIDL. | |
| // Instead, the example directly creates a pair of tokens that are used to | |
| // create a ViewHolder/View pair; the ExamplePresenter gets one and the | |
| // ShadertoyEmbedderView gets the other. See main(). | |
| // | |
| // NB: This Presenter is currently *not* set up to receive input events from | |
| // Zircon. It is the Presenter's responsibility to convey input events to | |
| // Scenic for further dispatch. See HelloInput for an example of how to do it. | |
| class ExamplePresenter : private fuchsia::ui::policy::Presenter { | |
| public: | |
| ExamplePresenter(fuchsia::ui::scenic::Scenic* scenic); | |
| ~ExamplePresenter() = default; | |
| // |Presenter| | |
| void PresentView( | |
| fuchsia::ui::views::ViewHolderToken view_holder_token, | |
| fidl::InterfaceRequest<fuchsia::ui::policy::Presentation> presentation_request) override; | |
| void PresentOrReplaceView( | |
| fuchsia::ui::views::ViewHolderToken view_holder_token, | |
| fidl::InterfaceRequest<fuchsia::ui::policy::Presentation> presentation_request) override; | |
| void Init(float width, float height); | |
| private: | |
| class Presentation { | |
| public: | |
| Presentation(scenic::Session* session, fuchsia::ui::views::ViewHolderToken view_holder_token); | |
| void SetSize(float width, float height); | |
| const scenic::Layer& layer() const { return layer_; } | |
| private: | |
| scenic::Layer layer_; | |
| scenic::EntityNode view_holder_node_; | |
| scenic::ViewHolder view_holder_; | |
| }; | |
| void MaybeSetPresentationSize(); | |
| void ScenicSessionPresent(); | |
| scenic::Session session_; | |
| std::unique_ptr<scenic::DisplayCompositor> compositor_; | |
| scenic::LayerStack layers_; | |
| std::unique_ptr<Presentation> presentation_; | |
| float width_ = 0.f; | |
| float height_ = 0.f; | |
| }; | |
| } // namespace simplest_embedder | |
| #endif // SRC_UI_EXAMPLES_SIMPLEST_EMBEDDER_EXAMPLE_PRESENTER_H_ |