blob: ebdd495ee124b0852a421fcd774ad87687d12ef6 [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.
#include "topaz/app/term/app.h"
#include "examples/ui/lib/skia_font_loader.h"
#include "lib/ui/view_framework/view_provider_service.h"
#include "topaz/app/term/term_params.h"
namespace term {
namespace {
template <typename Iter, typename T>
Iter FindUniquePtr(Iter begin, Iter end, T* object) {
return std::find_if(begin, end, [object](const std::unique_ptr<T>& other) {
return other.get() == object;
});
}
} // namespace
App::App(TermParams params)
: params_(std::move(params)),
context_(component::ApplicationContext::CreateFromStartupInfo()) {
context_->outgoing_services()->AddService<views_v1::ViewProvider>(
[this](fidl::InterfaceRequest<views_v1::ViewProvider> request) {
bindings_.AddBinding(this, std::move(request));
});
}
App::~App() = default;
void App::CreateView(
fidl::InterfaceRequest<views_v1_token::ViewOwner> view_owner_request,
fidl::InterfaceRequest<component::ServiceProvider> view_services) {
controllers_.push_back(std::make_unique<ViewController>(
context_->ConnectToEnvironmentService<views_v1::ViewManager>(),
std::move(view_owner_request), context_.get(), params_,
[this](ViewController* controller) { DestroyController(controller); }));
}
void App::DestroyController(ViewController* controller) {
auto it = FindUniquePtr(controllers_.begin(), controllers_.end(), controller);
ZX_DEBUG_ASSERT(it != controllers_.end());
controllers_.erase(it);
}
} // namespace term