| // 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_HELLO_BASE_VIEW_EXAMPLE_PRESENTER_H_ |
| #define GARNET_EXAMPLES_UI_HELLO_BASE_VIEW_EXAMPLE_PRESENTER_H_ |
| |
| #include <fuchsia/ui/policy/cpp/fidl.h> |
| #include <fuchsia/ui/scenic/cpp/fidl.h> |
| |
| #include "lib/ui/scenic/cpp/resources.h" |
| #include "lib/ui/scenic/cpp/session.h" |
| |
| namespace hello_base_view { |
| |
| // This is a Presenter2 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 zx::eventpairs that are used |
| // to create a ViewHolder/View pair; the ExamplePresenter gets one and the |
| // ShadertoyEmbedderView gets the other. See main(). |
| // |
| // Note Well! 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::Presenter2 { |
| public: |
| ExamplePresenter(fuchsia::ui::scenic::Scenic* scenic); |
| ~ExamplePresenter() = default; |
| |
| // |Presenter2| |
| void PresentView(zx::eventpair view_holder_token, |
| ::fidl::InterfaceRequest<fuchsia::ui::policy::Presentation> |
| ignored) override; |
| |
| void Init(float width, float height); |
| |
| private: |
| class Presentation { |
| public: |
| Presentation(scenic::Session* session, zx::eventpair 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 hello_base_view |
| |
| #endif // GARNET_EXAMPLES_UI_HELLO_BASE_VIEW_EXAMPLE_PRESENTER_H_ |