OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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/user_display_manager.h" | 5 #include "services/ui/ws/user_display_manager.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "services/ui/display/screen_manager.h" | 9 #include "services/ui/display/screen_manager.h" |
10 #include "services/ui/ws/display.h" | 10 #include "services/ui/ws/display.h" |
11 #include "services/ui/ws/display_manager.h" | 11 #include "services/ui/ws/display_manager.h" |
12 #include "services/ui/ws/user_display_manager_delegate.h" | 12 #include "services/ui/ws/user_display_manager_delegate.h" |
13 #include "ui/display/types/display_constants.h" | 13 #include "ui/display/types/display_constants.h" |
14 | 14 |
15 namespace ui { | 15 namespace ui { |
16 namespace ws { | 16 namespace ws { |
| 17 namespace { |
| 18 |
| 19 std::vector<mojom::WsDisplayPtr> CloneDisplays( |
| 20 const std::vector<mojom::WsDisplayPtr>& input) { |
| 21 std::vector<mojom::WsDisplayPtr> result; |
| 22 result.reserve(input.size()); |
| 23 for (const auto& display : input) { |
| 24 result.push_back(display.Clone()); |
| 25 } |
| 26 return result; |
| 27 } |
| 28 |
| 29 } // namespace |
17 | 30 |
18 UserDisplayManager::UserDisplayManager(ws::DisplayManager* display_manager, | 31 UserDisplayManager::UserDisplayManager(ws::DisplayManager* display_manager, |
19 UserDisplayManagerDelegate* delegate, | 32 UserDisplayManagerDelegate* delegate, |
20 const UserId& user_id) | 33 const UserId& user_id) |
21 : display_manager_(display_manager), | 34 : display_manager_(display_manager), |
22 delegate_(delegate), | 35 delegate_(delegate), |
23 user_id_(user_id), | 36 user_id_(user_id), |
24 got_valid_frame_decorations_( | 37 got_valid_frame_decorations_( |
25 delegate->GetFrameDecorationsForUser(user_id, nullptr)), | 38 delegate->GetFrameDecorationsForUser(user_id, nullptr)), |
26 current_cursor_location_(0) {} | 39 current_cursor_location_(0) {} |
27 | 40 |
28 UserDisplayManager::~UserDisplayManager() {} | 41 UserDisplayManager::~UserDisplayManager() {} |
29 | 42 |
30 void UserDisplayManager::OnFrameDecorationValuesChanged() { | 43 void UserDisplayManager::OnFrameDecorationValuesChanged() { |
31 if (!got_valid_frame_decorations_) { | 44 if (!got_valid_frame_decorations_) { |
32 got_valid_frame_decorations_ = true; | 45 got_valid_frame_decorations_ = true; |
33 display_manager_observers_.ForAllPtrs([this]( | 46 display_manager_observers_.ForAllPtrs([this]( |
34 mojom::DisplayManagerObserver* observer) { CallOnDisplays(observer); }); | 47 mojom::DisplayManagerObserver* observer) { CallOnDisplays(observer); }); |
35 return; | 48 return; |
36 } | 49 } |
37 | 50 |
38 mojo::Array<mojom::WsDisplayPtr> displays = GetAllDisplays(); | 51 std::vector<mojom::WsDisplayPtr> displays = GetAllDisplays(); |
39 display_manager_observers_.ForAllPtrs( | 52 display_manager_observers_.ForAllPtrs( |
40 [this, &displays](mojom::DisplayManagerObserver* observer) { | 53 [this, &displays](mojom::DisplayManagerObserver* observer) { |
41 observer->OnDisplaysChanged(displays.Clone().PassStorage()); | 54 observer->OnDisplaysChanged(CloneDisplays(displays)); |
42 }); | 55 }); |
43 } | 56 } |
44 | 57 |
45 void UserDisplayManager::AddDisplayManagerBinding( | 58 void UserDisplayManager::AddDisplayManagerBinding( |
46 mojo::InterfaceRequest<mojom::DisplayManager> request) { | 59 mojo::InterfaceRequest<mojom::DisplayManager> request) { |
47 display_manager_bindings_.AddBinding(this, std::move(request)); | 60 display_manager_bindings_.AddBinding(this, std::move(request)); |
48 } | 61 } |
49 | 62 |
50 void UserDisplayManager::OnDisplayUpdate(Display* display) { | 63 void UserDisplayManager::OnDisplayUpdate(Display* display) { |
51 if (!got_valid_frame_decorations_) | 64 if (!got_valid_frame_decorations_) |
52 return; | 65 return; |
53 | 66 |
54 mojo::Array<mojom::WsDisplayPtr> displays(1); | 67 std::vector<mojom::WsDisplayPtr> displays(1); |
55 displays[0] = GetWsDisplayPtr(*display); | 68 displays[0] = GetWsDisplayPtr(*display); |
56 | 69 |
57 display_manager_observers_.ForAllPtrs( | 70 display_manager_observers_.ForAllPtrs( |
58 [&displays](mojom::DisplayManagerObserver* observer) { | 71 [&displays](mojom::DisplayManagerObserver* observer) { |
59 observer->OnDisplaysChanged(displays.Clone().PassStorage()); | 72 observer->OnDisplaysChanged(CloneDisplays(displays)); |
60 }); | 73 }); |
61 } | 74 } |
62 | 75 |
63 void UserDisplayManager::OnWillDestroyDisplay(Display* display) { | 76 void UserDisplayManager::OnWillDestroyDisplay(Display* display) { |
64 if (!got_valid_frame_decorations_) | 77 if (!got_valid_frame_decorations_) |
65 return; | 78 return; |
66 | 79 |
67 display_manager_observers_.ForAllPtrs( | 80 display_manager_observers_.ForAllPtrs( |
68 [&display](mojom::DisplayManagerObserver* observer) { | 81 [&display](mojom::DisplayManagerObserver* observer) { |
69 observer->OnDisplayRemoved(display->GetId()); | 82 observer->OnDisplayRemoved(display->GetId()); |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
132 | 145 |
133 mojom::WsDisplayPtr UserDisplayManager::GetWsDisplayPtr( | 146 mojom::WsDisplayPtr UserDisplayManager::GetWsDisplayPtr( |
134 const Display& display) { | 147 const Display& display) { |
135 mojom::WsDisplayPtr ws_display = mojom::WsDisplay::New(); | 148 mojom::WsDisplayPtr ws_display = mojom::WsDisplay::New(); |
136 ws_display->display = display.ToDisplay(); | 149 ws_display->display = display.ToDisplay(); |
137 delegate_->GetFrameDecorationsForUser(user_id_, | 150 delegate_->GetFrameDecorationsForUser(user_id_, |
138 &ws_display->frame_decoration_values); | 151 &ws_display->frame_decoration_values); |
139 return ws_display; | 152 return ws_display; |
140 } | 153 } |
141 | 154 |
142 mojo::Array<mojom::WsDisplayPtr> UserDisplayManager::GetAllDisplays() { | 155 std::vector<mojom::WsDisplayPtr> UserDisplayManager::GetAllDisplays() { |
143 const auto& displays = display_manager_->displays(); | 156 const auto& displays = display_manager_->displays(); |
144 mojo::Array<mojom::WsDisplayPtr> display_ptrs(displays.size()); | 157 std::vector<mojom::WsDisplayPtr> display_ptrs; |
| 158 display_ptrs.reserve(displays.size()); |
145 | 159 |
146 size_t i = 0; | |
147 // TODO(sky): need ordering! | 160 // TODO(sky): need ordering! |
148 for (Display* display : displays) { | 161 for (Display* display : displays) { |
149 display_ptrs[i] = GetWsDisplayPtr(*display); | 162 display_ptrs.push_back(GetWsDisplayPtr(*display)); |
150 ++i; | |
151 } | 163 } |
152 | 164 |
153 return display_ptrs; | 165 return display_ptrs; |
154 } | 166 } |
155 | 167 |
156 void UserDisplayManager::CallOnDisplays( | 168 void UserDisplayManager::CallOnDisplays( |
157 mojom::DisplayManagerObserver* observer) { | 169 mojom::DisplayManagerObserver* observer) { |
158 // TODO(kylechar): Pass internal display id to clients here. | 170 // TODO(kylechar): Pass internal display id to clients here. |
159 observer->OnDisplays( | 171 observer->OnDisplays( |
160 GetAllDisplays().PassStorage(), | 172 GetAllDisplays(), |
161 display::ScreenManager::GetInstance()->GetPrimaryDisplayId(), | 173 display::ScreenManager::GetInstance()->GetPrimaryDisplayId(), |
162 display::kInvalidDisplayId); | 174 display::kInvalidDisplayId); |
163 } | 175 } |
164 | 176 |
165 } // namespace ws | 177 } // namespace ws |
166 } // namespace ui | 178 } // namespace ui |
OLD | NEW |