1 // Copyright 2018 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "ui/ozone/platform/scenic/scenic_window_manager.h"
6 
7 #include <lib/sys/cpp/component_context.h>
8 #include <memory>
9 
10 #include "base/fuchsia/default_context.h"
11 #include "base/fuchsia/fuchsia_logging.h"
12 #include "ui/ozone/platform/scenic/ozone_platform_scenic.h"
13 
14 namespace ui {
15 
16 ScenicWindowManager::ScenicWindowManager() = default;
17 ScenicWindowManager::~ScenicWindowManager() = default;
18 
CreateScreen()19 std::unique_ptr<PlatformScreen> ScenicWindowManager::CreateScreen() {
20   DCHECK(windows_.IsEmpty());
21   auto screen = std::make_unique<ScenicScreen>();
22   screen_ = screen->GetWeakPtr();
23   return screen;
24 }
25 
GetScenic()26 fuchsia::ui::scenic::Scenic* ScenicWindowManager::GetScenic() {
27   if (!scenic_) {
28     scenic_ = base::fuchsia::ComponentContextForCurrentProcess()
29                   ->svc()
30                   ->Connect<fuchsia::ui::scenic::Scenic>();
31     scenic_.set_error_handler(
32         [](zx_status_t status) { ZX_LOG(FATAL, status) << " Scenic lost."; });
33   }
34   return scenic_.get();
35 }
36 
AddWindow(ScenicWindow * window)37 int32_t ScenicWindowManager::AddWindow(ScenicWindow* window) {
38   int32_t id = windows_.Add(window);
39   if (screen_)
40     screen_->OnWindowAdded(id);
41   return id;
42 }
43 
RemoveWindow(int32_t window_id,ScenicWindow * window)44 void ScenicWindowManager::RemoveWindow(int32_t window_id,
45                                        ScenicWindow* window) {
46   DCHECK_EQ(window, windows_.Lookup(window_id));
47   windows_.Remove(window_id);
48   if (screen_)
49     screen_->OnWindowRemoved(window_id);
50 }
51 
GetWindow(int32_t window_id)52 ScenicWindow* ScenicWindowManager::GetWindow(int32_t window_id) {
53   return windows_.Lookup(window_id);
54 }
55 
56 }  // namespace ui
57