blob: 9db874b8b283deca60678dd4420582f98e21c00f [file] [log] [blame]
// Copyright 2018 The Chromium 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 "ui/ozone/platform/scenic/scenic_window_manager.h"
#include "base/fuchsia/component_context.h"
namespace ui {
ScenicWindowManager::ScenicWindowManager() = default;
ScenicWindowManager::~ScenicWindowManager() = default;
std::unique_ptr<PlatformScreen> ScenicWindowManager::CreateScreen() {
DCHECK(windows_.IsEmpty());
auto screen = std::make_unique<ScenicScreen>();
screen_ = screen->GetWeakPtr();
return screen;
}
fuchsia::ui::viewsv1::ViewManager* ScenicWindowManager::GetViewManager() {
if (!view_manager_) {
view_manager_ = base::fuchsia::ComponentContext::GetDefault()
->ConnectToService<fuchsia::ui::viewsv1::ViewManager>();
view_manager_.set_error_handler(
[this]() { LOG(FATAL) << "ViewManager connection failed."; });
}
return view_manager_.get();
}
fuchsia::ui::scenic::Scenic* ScenicWindowManager::GetScenic() {
if (!scenic_) {
GetViewManager()->GetScenic(scenic_.NewRequest());
scenic_.set_error_handler(
[this]() { LOG(FATAL) << "Scenic connection failed."; });
}
return scenic_.get();
}
int32_t ScenicWindowManager::AddWindow(ScenicWindow* window) {
int32_t id = windows_.Add(window);
if (screen_)
screen_->OnWindowAdded(id);
return id;
}
void ScenicWindowManager::RemoveWindow(int32_t window_id,
ScenicWindow* window) {
DCHECK_EQ(window, windows_.Lookup(window_id));
windows_.Remove(window_id);
if (screen_)
screen_->OnWindowRemoved(window_id);
}
ScenicWindow* ScenicWindowManager::GetWindow(int32_t window_id) {
return windows_.Lookup(window_id);
}
} // namespace ui