blob: 28e91cc1a8900fa85a5e56a8deed4b37b5a4c089 [file] [log] [blame]
// 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_EMBEDDER_APP_H_
#define SRC_UI_EXAMPLES_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/async-loop/default.h>
#include <lib/fidl/cpp/binding_set.h>
#include <lib/sys/cpp/component_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<sys::ComponentContext> component_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 // SRC_UI_EXAMPLES_EMBEDDER_APP_H_