| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "services/ui/ws/display.h" | 5 #include "services/ui/ws/display.h" |
| 6 | 6 |
| 7 #include <set> | 7 #include <set> |
| 8 #include <utility> | 8 #include <utility> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| 11 #include "base/memory/ptr_util.h" | 11 #include "base/memory/ptr_util.h" |
| 12 #include "base/strings/utf_string_conversions.h" | 12 #include "base/strings/utf_string_conversions.h" |
| 13 #include "services/service_manager/public/interfaces/connector.mojom.h" | 13 #include "services/service_manager/public/interfaces/connector.mojom.h" |
| 14 #include "services/ui/common/types.h" | 14 #include "services/ui/common/types.h" |
| 15 #include "services/ui/display/viewport_metrics.h" |
| 15 #include "services/ui/public/interfaces/cursor.mojom.h" | 16 #include "services/ui/public/interfaces/cursor.mojom.h" |
| 16 #include "services/ui/ws/display_binding.h" | 17 #include "services/ui/ws/display_binding.h" |
| 17 #include "services/ui/ws/display_manager.h" | 18 #include "services/ui/ws/display_manager.h" |
| 18 #include "services/ui/ws/focus_controller.h" | 19 #include "services/ui/ws/focus_controller.h" |
| 19 #include "services/ui/ws/platform_display.h" | 20 #include "services/ui/ws/platform_display.h" |
| 20 #include "services/ui/ws/platform_display_init_params.h" | |
| 21 #include "services/ui/ws/user_activity_monitor.h" | 21 #include "services/ui/ws/user_activity_monitor.h" |
| 22 #include "services/ui/ws/window_manager_display_root.h" | 22 #include "services/ui/ws/window_manager_display_root.h" |
| 23 #include "services/ui/ws/window_manager_state.h" | 23 #include "services/ui/ws/window_manager_state.h" |
| 24 #include "services/ui/ws/window_manager_window_tree_factory.h" | 24 #include "services/ui/ws/window_manager_window_tree_factory.h" |
| 25 #include "services/ui/ws/window_server.h" | 25 #include "services/ui/ws/window_server.h" |
| 26 #include "services/ui/ws/window_server_delegate.h" | 26 #include "services/ui/ws/window_server_delegate.h" |
| 27 #include "services/ui/ws/window_tree.h" | 27 #include "services/ui/ws/window_tree.h" |
| 28 #include "services/ui/ws/window_tree_binding.h" | 28 #include "services/ui/ws/window_tree_binding.h" |
| 29 #include "ui/base/cursor/cursor.h" | 29 #include "ui/base/cursor/cursor.h" |
| 30 #include "ui/display/screen.h" |
| 30 | 31 |
| 31 namespace ui { | 32 namespace ui { |
| 32 namespace ws { | 33 namespace ws { |
| 33 | 34 |
| 34 Display::Display(WindowServer* window_server) | 35 Display::Display(WindowServer* window_server) |
| 35 : window_server_(window_server), last_cursor_(mojom::Cursor::CURSOR_NULL) { | 36 : window_server_(window_server), last_cursor_(mojom::Cursor::CURSOR_NULL) { |
| 36 window_server_->window_manager_window_tree_factory_set()->AddObserver(this); | 37 window_server_->window_manager_window_tree_factory_set()->AddObserver(this); |
| 37 window_server_->user_id_tracker()->AddObserver(this); | 38 window_server_->user_id_tracker()->AddObserver(this); |
| 38 } | 39 } |
| 39 | 40 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 53 pair.second->window_manager_state()->OnDisplayDestroying(this); | 54 pair.second->window_manager_state()->OnDisplayDestroying(this); |
| 54 } else if (!window_manager_display_root_map_.empty()) { | 55 } else if (!window_manager_display_root_map_.empty()) { |
| 55 // If there is a |binding_| then the tree was created specifically for this | 56 // If there is a |binding_| then the tree was created specifically for this |
| 56 // display (which corresponds to a WindowTreeHost). | 57 // display (which corresponds to a WindowTreeHost). |
| 57 window_server_->DestroyTree(window_manager_display_root_map_.begin() | 58 window_server_->DestroyTree(window_manager_display_root_map_.begin() |
| 58 ->second->window_manager_state() | 59 ->second->window_manager_state() |
| 59 ->window_tree()); | 60 ->window_tree()); |
| 60 } | 61 } |
| 61 } | 62 } |
| 62 | 63 |
| 63 void Display::Init(const PlatformDisplayInitParams& init_params, | 64 void Display::Init(const display::ViewportMetrics& metrics, |
| 64 std::unique_ptr<DisplayBinding> binding) { | 65 std::unique_ptr<DisplayBinding> binding) { |
| 65 binding_ = std::move(binding); | 66 binding_ = std::move(binding); |
| 66 display_manager()->AddDisplay(this); | 67 display_manager()->AddDisplay(this); |
| 67 | 68 |
| 68 CreateRootWindow(init_params.metrics.pixel_size); | 69 CreateRootWindow(metrics.bounds_in_pixels.size()); |
| 69 PlatformDisplayInitParams params_copy = init_params; | |
| 70 params_copy.root_window = root_.get(); | |
| 71 | 70 |
| 72 platform_display_ = PlatformDisplay::Create(params_copy); | 71 platform_display_ = PlatformDisplay::Create(root_.get(), metrics); |
| 73 platform_display_->Init(this); | 72 platform_display_->Init(this); |
| 74 } | 73 } |
| 75 | 74 |
| 76 int64_t Display::GetId() const { | 75 int64_t Display::GetId() const { |
| 77 return platform_display_->GetId(); | 76 // TODO(tonikitoo): Implement a different ID for external window mode. |
| 77 return display_.id(); |
| 78 } |
| 79 |
| 80 void Display::SetDisplay(const display::Display& display) { |
| 81 display_ = display; |
| 82 } |
| 83 |
| 84 const display::Display& Display::GetDisplay() { |
| 85 return display_; |
| 78 } | 86 } |
| 79 | 87 |
| 80 DisplayManager* Display::display_manager() { | 88 DisplayManager* Display::display_manager() { |
| 81 return window_server_->display_manager(); | 89 return window_server_->display_manager(); |
| 82 } | 90 } |
| 83 | 91 |
| 84 const DisplayManager* Display::display_manager() const { | 92 const DisplayManager* Display::display_manager() const { |
| 85 return window_server_->display_manager(); | 93 return window_server_->display_manager(); |
| 86 } | 94 } |
| 87 | 95 |
| 88 display::Display Display::ToDisplay() const { | |
| 89 display::Display display(GetId()); | |
| 90 | |
| 91 const display::ViewportMetrics& metrics = | |
| 92 platform_display_->GetViewportMetrics(); | |
| 93 | |
| 94 display.set_bounds(metrics.bounds); | |
| 95 display.set_work_area(metrics.work_area); | |
| 96 display.set_device_scale_factor(metrics.device_scale_factor); | |
| 97 display.set_rotation(metrics.rotation); | |
| 98 display.set_touch_support( | |
| 99 display::Display::TouchSupport::TOUCH_SUPPORT_UNKNOWN); | |
| 100 | |
| 101 return display; | |
| 102 } | |
| 103 | |
| 104 gfx::Size Display::GetSize() const { | 96 gfx::Size Display::GetSize() const { |
| 105 DCHECK(root_); | 97 DCHECK(root_); |
| 106 return root_->bounds().size(); | 98 return root_->bounds().size(); |
| 107 } | 99 } |
| 108 | 100 |
| 109 ServerWindow* Display::GetRootWithId(const WindowId& id) { | 101 ServerWindow* Display::GetRootWithId(const WindowId& id) { |
| 110 if (id == root_->id()) | 102 if (id == root_->id()) |
| 111 return root_.get(); | 103 return root_.get(); |
| 112 for (auto& pair : window_manager_display_root_map_) { | 104 for (auto& pair : window_manager_display_root_map_) { |
| 113 if (pair.second->root()->id() == id) | 105 if (pair.second->root()->id() == id) |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 213 // id works. | 205 // id works. |
| 214 window_manager_display_root_map_[service_manager::mojom::kRootUserID] = | 206 window_manager_display_root_map_[service_manager::mojom::kRootUserID] = |
| 215 display_root_ptr.get(); | 207 display_root_ptr.get(); |
| 216 WindowTree* window_tree = binding_->CreateWindowTree(display_root->root()); | 208 WindowTree* window_tree = binding_->CreateWindowTree(display_root->root()); |
| 217 display_root->window_manager_state_ = window_tree->window_manager_state(); | 209 display_root->window_manager_state_ = window_tree->window_manager_state(); |
| 218 window_tree->window_manager_state()->AddWindowManagerDisplayRoot( | 210 window_tree->window_manager_state()->AddWindowManagerDisplayRoot( |
| 219 std::move(display_root_ptr)); | 211 std::move(display_root_ptr)); |
| 220 } else { | 212 } else { |
| 221 CreateWindowManagerDisplayRootsFromFactories(); | 213 CreateWindowManagerDisplayRootsFromFactories(); |
| 222 } | 214 } |
| 223 display_manager()->OnDisplayUpdate(this); | 215 display_manager()->OnDisplayUpdate(display_); |
| 224 } | 216 } |
| 225 | 217 |
| 226 void Display::CreateWindowManagerDisplayRootsFromFactories() { | 218 void Display::CreateWindowManagerDisplayRootsFromFactories() { |
| 227 std::vector<WindowManagerWindowTreeFactory*> factories = | 219 std::vector<WindowManagerWindowTreeFactory*> factories = |
| 228 window_server_->window_manager_window_tree_factory_set()->GetFactories(); | 220 window_server_->window_manager_window_tree_factory_set()->GetFactories(); |
| 229 for (WindowManagerWindowTreeFactory* factory : factories) { | 221 for (WindowManagerWindowTreeFactory* factory : factories) { |
| 230 if (factory->window_tree()) | 222 if (factory->window_tree()) |
| 231 CreateWindowManagerDisplayRootFromFactory(factory); | 223 CreateWindowManagerDisplayRootFromFactory(factory); |
| 232 } | 224 } |
| 233 } | 225 } |
| (...skipping 23 matching lines...) Expand all Loading... |
| 257 display_manager()->GetAndAdvanceNextRootId(), | 249 display_manager()->GetAndAdvanceNextRootId(), |
| 258 ServerWindow::Properties())); | 250 ServerWindow::Properties())); |
| 259 root_->set_event_targeting_policy( | 251 root_->set_event_targeting_policy( |
| 260 mojom::EventTargetingPolicy::DESCENDANTS_ONLY); | 252 mojom::EventTargetingPolicy::DESCENDANTS_ONLY); |
| 261 root_->SetBounds(gfx::Rect(size), allocator_.GenerateId()); | 253 root_->SetBounds(gfx::Rect(size), allocator_.GenerateId()); |
| 262 root_->SetVisible(true); | 254 root_->SetVisible(true); |
| 263 focus_controller_ = base::MakeUnique<FocusController>(this, root_.get()); | 255 focus_controller_ = base::MakeUnique<FocusController>(this, root_.get()); |
| 264 focus_controller_->AddObserver(this); | 256 focus_controller_->AddObserver(this); |
| 265 } | 257 } |
| 266 | 258 |
| 267 display::Display Display::GetDisplay() { | |
| 268 return ToDisplay(); | |
| 269 } | |
| 270 | |
| 271 ServerWindow* Display::GetRootWindow() { | 259 ServerWindow* Display::GetRootWindow() { |
| 272 return root_.get(); | 260 return root_.get(); |
| 273 } | 261 } |
| 274 | 262 |
| 275 void Display::OnAcceleratedWidgetAvailable() { | 263 void Display::OnAcceleratedWidgetAvailable() { |
| 276 display_manager()->OnDisplayAcceleratedWidgetAvailable(this); | 264 display_manager()->OnDisplayAcceleratedWidgetAvailable(this); |
| 277 InitWindowManagerDisplayRoots(); | 265 InitWindowManagerDisplayRoots(); |
| 278 } | 266 } |
| 279 | 267 |
| 280 bool Display::IsInHighContrastMode() { | 268 bool Display::IsInHighContrastMode() { |
| (...skipping 11 matching lines...) Expand all Loading... |
| 292 } | 280 } |
| 293 | 281 |
| 294 void Display::OnNativeCaptureLost() { | 282 void Display::OnNativeCaptureLost() { |
| 295 WindowManagerDisplayRoot* display_root = GetActiveWindowManagerDisplayRoot(); | 283 WindowManagerDisplayRoot* display_root = GetActiveWindowManagerDisplayRoot(); |
| 296 if (display_root) | 284 if (display_root) |
| 297 display_root->window_manager_state()->SetCapture(nullptr, kInvalidClientId); | 285 display_root->window_manager_state()->SetCapture(nullptr, kInvalidClientId); |
| 298 } | 286 } |
| 299 | 287 |
| 300 void Display::OnViewportMetricsChanged( | 288 void Display::OnViewportMetricsChanged( |
| 301 const display::ViewportMetrics& metrics) { | 289 const display::ViewportMetrics& metrics) { |
| 302 if (root_->bounds().size() == metrics.pixel_size) | 290 if (root_->bounds().size() == metrics.bounds_in_pixels.size()) |
| 303 return; | 291 return; |
| 304 | 292 |
| 305 gfx::Rect new_bounds(metrics.pixel_size); | 293 gfx::Rect new_bounds(metrics.bounds_in_pixels.size()); |
| 306 root_->SetBounds(new_bounds, allocator_.GenerateId()); | 294 root_->SetBounds(new_bounds, allocator_.GenerateId()); |
| 307 for (auto& pair : window_manager_display_root_map_) | 295 for (auto& pair : window_manager_display_root_map_) |
| 308 pair.second->root()->SetBounds(new_bounds, allocator_.GenerateId()); | 296 pair.second->root()->SetBounds(new_bounds, allocator_.GenerateId()); |
| 309 } | 297 } |
| 310 | 298 |
| 311 ServerWindow* Display::GetActiveRootWindow() { | 299 ServerWindow* Display::GetActiveRootWindow() { |
| 312 WindowManagerDisplayRoot* display_root = GetActiveWindowManagerDisplayRoot(); | 300 WindowManagerDisplayRoot* display_root = GetActiveWindowManagerDisplayRoot(); |
| 313 if (display_root) | 301 if (display_root) |
| 314 return display_root->root(); | 302 return display_root->root(); |
| 315 return nullptr; | 303 return nullptr; |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 393 } | 381 } |
| 394 | 382 |
| 395 void Display::OnWindowManagerWindowTreeFactoryReady( | 383 void Display::OnWindowManagerWindowTreeFactoryReady( |
| 396 WindowManagerWindowTreeFactory* factory) { | 384 WindowManagerWindowTreeFactory* factory) { |
| 397 if (!binding_) | 385 if (!binding_) |
| 398 CreateWindowManagerDisplayRootFromFactory(factory); | 386 CreateWindowManagerDisplayRootFromFactory(factory); |
| 399 } | 387 } |
| 400 | 388 |
| 401 } // namespace ws | 389 } // namespace ws |
| 402 } // namespace ui | 390 } // namespace ui |
| OLD | NEW |