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()19std::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()26fuchsia::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)37int32_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)44void 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)52ScenicWindow* ScenicWindowManager::GetWindow(int32_t window_id) { 53 return windows_.Lookup(window_id); 54 } 55 56 } // namespace ui 57