blob: 79293a3637972cf30997d64b7a0dd1daaa8fb334 [file] [log] [blame]
// Copyright 2019 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_TESTING_VIEWS_EMBEDDER_VIEW_H_
#define GARNET_TESTING_VIEWS_EMBEDDER_VIEW_H_
#include <fuchsia/ui/scenic/cpp/fidl.h>
#include <lib/ui/base_view/cpp/base_view.h>
#include <lib/ui/scenic/cpp/resources.h>
#include <lib/ui/scenic/cpp/session.h>
namespace scenic {
// This is a simplified |BaseView| that exposes view state events.
//
// See also lib/ui/base_view.
class EmbedderView : public fuchsia::ui::scenic::SessionListener {
public:
EmbedderView(ViewContext context,
const std::string& debug_name = "EmbedderView");
// Sets the EmbeddedViewInfo and attaches the embedded View to the scene. Any
// callbacks for the embedded View's ViewState are delivered to the supplied
// callback.
void EmbedView(EmbeddedViewInfo info,
std::function<void(fuchsia::ui::gfx::ViewState)> callback);
private:
// |fuchsia::ui::scenic::SessionListener|
void OnScenicEvent(std::vector<fuchsia::ui::scenic::Event> events) override;
// |fuchsia::ui::scenic::SessionListener|
void OnScenicError(std::string error) override;
struct EmbeddedView {
EmbeddedView(
EmbeddedViewInfo info, Session* session,
std::function<void(fuchsia::ui::gfx::ViewState)> view_state_callback,
const std::string& debug_name = "EmbedderView");
EmbeddedViewInfo embedded_info;
ViewHolder view_holder;
std::function<void(fuchsia::ui::gfx::ViewState)>
view_state_changed_callback;
};
fidl::Binding<fuchsia::ui::scenic::SessionListener> binding_;
Session session_;
View view_;
EntityNode top_node_;
std::optional<fuchsia::ui::gfx::ViewProperties> embedded_view_properties_;
std::unique_ptr<EmbeddedView> embedded_view_;
};
} // namespace scenic
#endif // GARNET_TESTING_VIEWS_EMBEDDER_VIEW_H_