Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(246)

Side by Side Diff: components/view_manager/public/cpp/lib/view_tree_client_impl.cc

Issue 1314953002: Rename ViewManagerService,ViewManagerClient -> ViewTree,ViewTreeClient (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: . Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "components/view_manager/public/cpp/lib/view_manager_client_impl.h" 5 #include "components/view_manager/public/cpp/lib/view_tree_client_impl.h"
6 6
7 #include "components/view_manager/public/cpp/lib/view_private.h" 7 #include "components/view_manager/public/cpp/lib/view_private.h"
8 #include "components/view_manager/public/cpp/util.h" 8 #include "components/view_manager/public/cpp/util.h"
9 #include "components/view_manager/public/cpp/view_manager_delegate.h" 9 #include "components/view_manager/public/cpp/view_manager_delegate.h"
10 #include "components/view_manager/public/cpp/view_observer.h" 10 #include "components/view_manager/public/cpp/view_observer.h"
11 #include "mojo/application/public/cpp/application_impl.h" 11 #include "mojo/application/public/cpp/application_impl.h"
12 #include "mojo/application/public/cpp/connect.h" 12 #include "mojo/application/public/cpp/connect.h"
13 #include "mojo/application/public/cpp/service_provider_impl.h" 13 #include "mojo/application/public/cpp/service_provider_impl.h"
14 #include "mojo/application/public/interfaces/service_provider.mojom.h" 14 #include "mojo/application/public/interfaces/service_provider.mojom.h"
15 15
16 namespace mojo { 16 namespace mojo {
17 17
18 Id MakeTransportId(ConnectionSpecificId connection_id, 18 Id MakeTransportId(ConnectionSpecificId connection_id,
19 ConnectionSpecificId local_id) { 19 ConnectionSpecificId local_id) {
20 return (connection_id << 16) | local_id; 20 return (connection_id << 16) | local_id;
21 } 21 }
22 22
23 // Helper called to construct a local view object from transport data. 23 // Helper called to construct a local view object from transport data.
24 View* AddViewToViewManager(ViewManagerClientImpl* client, 24 View* AddViewToViewManager(ViewTreeClientImpl* client,
25 View* parent, 25 View* parent,
26 const ViewDataPtr& view_data) { 26 const ViewDataPtr& view_data) {
27 // We don't use the ctor that takes a ViewManager here, since it will call 27 // We don't use the ctor that takes a ViewManager here, since it will call
28 // back to the service and attempt to create a new view. 28 // back to the service and attempt to create a new view.
29 View* view = ViewPrivate::LocalCreate(); 29 View* view = ViewPrivate::LocalCreate();
30 ViewPrivate private_view(view); 30 ViewPrivate private_view(view);
31 private_view.set_view_manager(client); 31 private_view.set_view_manager(client);
32 private_view.set_id(view_data->view_id); 32 private_view.set_id(view_data->view_id);
33 private_view.set_visible(view_data->visible); 33 private_view.set_visible(view_data->visible);
34 private_view.set_drawn(view_data->drawn); 34 private_view.set_drawn(view_data->drawn);
35 private_view.LocalSetViewportMetrics(ViewportMetrics(), 35 private_view.LocalSetViewportMetrics(ViewportMetrics(),
36 *view_data->viewport_metrics); 36 *view_data->viewport_metrics);
37 private_view.set_properties( 37 private_view.set_properties(
38 view_data->properties.To<std::map<std::string, std::vector<uint8_t>>>()); 38 view_data->properties.To<std::map<std::string, std::vector<uint8_t>>>());
39 client->AddView(view); 39 client->AddView(view);
40 private_view.LocalSetBounds(Rect(), *view_data->bounds); 40 private_view.LocalSetBounds(Rect(), *view_data->bounds);
41 if (parent) 41 if (parent)
42 ViewPrivate(parent).LocalAddChild(view); 42 ViewPrivate(parent).LocalAddChild(view);
43 return view; 43 return view;
44 } 44 }
45 45
46 View* BuildViewTree(ViewManagerClientImpl* client, 46 View* BuildViewTree(ViewTreeClientImpl* client,
47 const Array<ViewDataPtr>& views, 47 const Array<ViewDataPtr>& views,
48 View* initial_parent) { 48 View* initial_parent) {
49 std::vector<View*> parents; 49 std::vector<View*> parents;
50 View* root = NULL; 50 View* root = NULL;
51 View* last_view = NULL; 51 View* last_view = NULL;
52 if (initial_parent) 52 if (initial_parent)
53 parents.push_back(initial_parent); 53 parents.push_back(initial_parent);
54 for (size_t i = 0; i < views.size(); ++i) { 54 for (size_t i = 0; i < views.size(); ++i) {
55 if (last_view && views[i]->parent_id == last_view->id()) { 55 if (last_view && views[i]->parent_id == last_view->id()) {
56 parents.push_back(last_view); 56 parents.push_back(last_view);
57 } else if (!parents.empty()) { 57 } else if (!parents.empty()) {
58 while (parents.back()->id() != views[i]->parent_id) 58 while (parents.back()->id() != views[i]->parent_id)
59 parents.pop_back(); 59 parents.pop_back();
60 } 60 }
61 View* view = AddViewToViewManager( 61 View* view = AddViewToViewManager(
62 client, !parents.empty() ? parents.back() : NULL, views[i]); 62 client, !parents.empty() ? parents.back() : NULL, views[i]);
63 if (!last_view) 63 if (!last_view)
64 root = view; 64 root = view;
65 last_view = view; 65 last_view = view;
66 } 66 }
67 return root; 67 return root;
68 } 68 }
69 69
70 ViewManager* ViewManager::Create( 70 ViewManager* ViewManager::Create(
71 ViewManagerDelegate* delegate, 71 ViewManagerDelegate* delegate,
72 InterfaceRequest<ViewManagerClient> request) { 72 InterfaceRequest<ViewTreeClient> request) {
73 return new ViewManagerClientImpl(delegate, request.Pass()); 73 return new ViewTreeClientImpl(delegate, request.Pass());
74 } 74 }
75 75
76 ViewManagerClientImpl::ViewManagerClientImpl( 76 ViewTreeClientImpl::ViewTreeClientImpl(
77 ViewManagerDelegate* delegate, 77 ViewManagerDelegate* delegate,
78 InterfaceRequest<ViewManagerClient> request) 78 InterfaceRequest<ViewTreeClient> request)
79 : connection_id_(0), 79 : connection_id_(0),
80 next_id_(1), 80 next_id_(1),
81 delegate_(delegate), 81 delegate_(delegate),
82 root_(nullptr), 82 root_(nullptr),
83 capture_view_(nullptr), 83 capture_view_(nullptr),
84 focused_view_(nullptr), 84 focused_view_(nullptr),
85 activated_view_(nullptr), 85 activated_view_(nullptr),
86 binding_(this, request.Pass()), 86 binding_(this, request.Pass()),
87 is_embed_root_(false), 87 is_embed_root_(false),
88 in_destructor_(false) { 88 in_destructor_(false) {
89 } 89 }
90 90
91 ViewManagerClientImpl::~ViewManagerClientImpl() { 91 ViewTreeClientImpl::~ViewTreeClientImpl() {
92 in_destructor_ = true; 92 in_destructor_ = true;
93 93
94 std::vector<View*> non_owned; 94 std::vector<View*> non_owned;
95 while (!views_.empty()) { 95 while (!views_.empty()) {
96 IdToViewMap::iterator it = views_.begin(); 96 IdToViewMap::iterator it = views_.begin();
97 if (OwnsView(it->second->id())) { 97 if (OwnsView(it->second->id())) {
98 it->second->Destroy(); 98 it->second->Destroy();
99 } else { 99 } else {
100 non_owned.push_back(it->second); 100 non_owned.push_back(it->second);
101 views_.erase(it); 101 views_.erase(it);
102 } 102 }
103 } 103 }
104 104
105 // Delete the non-owned views last. In the typical case these are roots. The 105 // Delete the non-owned views last. In the typical case these are roots. The
106 // exception is the window manager and embed roots, which may know about 106 // exception is the window manager and embed roots, which may know about
107 // other random views that it doesn't own. 107 // other random views that it doesn't own.
108 // NOTE: we manually delete as we're a friend. 108 // NOTE: we manually delete as we're a friend.
109 for (size_t i = 0; i < non_owned.size(); ++i) 109 for (size_t i = 0; i < non_owned.size(); ++i)
110 delete non_owned[i]; 110 delete non_owned[i];
111 111
112 delegate_->OnViewManagerDestroyed(this); 112 delegate_->OnViewManagerDestroyed(this);
113 } 113 }
114 114
115 void ViewManagerClientImpl::DestroyView(Id view_id) { 115 void ViewTreeClientImpl::DestroyView(Id view_id) {
116 DCHECK(service_); 116 DCHECK(tree_);
117 service_->DeleteView(view_id, ActionCompletedCallback()); 117 tree_->DeleteView(view_id, ActionCompletedCallback());
118 } 118 }
119 119
120 void ViewManagerClientImpl::AddChild(Id child_id, Id parent_id) { 120 void ViewTreeClientImpl::AddChild(Id child_id, Id parent_id) {
121 DCHECK(service_); 121 DCHECK(tree_);
122 service_->AddView(parent_id, child_id, ActionCompletedCallback()); 122 tree_->AddView(parent_id, child_id, ActionCompletedCallback());
123 } 123 }
124 124
125 void ViewManagerClientImpl::RemoveChild(Id child_id, Id parent_id) { 125 void ViewTreeClientImpl::RemoveChild(Id child_id, Id parent_id) {
126 DCHECK(service_); 126 DCHECK(tree_);
127 service_->RemoveViewFromParent(child_id, ActionCompletedCallback()); 127 tree_->RemoveViewFromParent(child_id, ActionCompletedCallback());
128 } 128 }
129 129
130 void ViewManagerClientImpl::Reorder( 130 void ViewTreeClientImpl::Reorder(
131 Id view_id, 131 Id view_id,
132 Id relative_view_id, 132 Id relative_view_id,
133 OrderDirection direction) { 133 OrderDirection direction) {
134 DCHECK(service_); 134 DCHECK(tree_);
135 service_->ReorderView(view_id, relative_view_id, direction, 135 tree_->ReorderView(view_id, relative_view_id, direction,
136 ActionCompletedCallback()); 136 ActionCompletedCallback());
137 } 137 }
138 138
139 bool ViewManagerClientImpl::OwnsView(Id id) const { 139 bool ViewTreeClientImpl::OwnsView(Id id) const {
140 return HiWord(id) == connection_id_; 140 return HiWord(id) == connection_id_;
141 } 141 }
142 142
143 void ViewManagerClientImpl::SetBounds(Id view_id, const Rect& bounds) { 143 void ViewTreeClientImpl::SetBounds(Id view_id, const Rect& bounds) {
144 DCHECK(service_); 144 DCHECK(tree_);
145 service_->SetViewBounds(view_id, bounds.Clone(), ActionCompletedCallback()); 145 tree_->SetViewBounds(view_id, bounds.Clone(), ActionCompletedCallback());
146 } 146 }
147 147
148 void ViewManagerClientImpl::SetSurfaceId(Id view_id, SurfaceIdPtr surface_id) { 148 void ViewTreeClientImpl::SetSurfaceId(Id view_id, SurfaceIdPtr surface_id) {
149 DCHECK(service_); 149 DCHECK(tree_);
150 if (surface_id.is_null()) 150 if (surface_id.is_null())
151 return; 151 return;
152 service_->SetViewSurfaceId( 152 tree_->SetViewSurfaceId(
153 view_id, surface_id.Pass(), ActionCompletedCallback()); 153 view_id, surface_id.Pass(), ActionCompletedCallback());
154 } 154 }
155 155
156 void ViewManagerClientImpl::SetFocus(Id view_id) { 156 void ViewTreeClientImpl::SetFocus(Id view_id) {
157 // In order for us to get here we had to have exposed a view, which implies we 157 // In order for us to get here we had to have exposed a view, which implies we
158 // got a connection. 158 // got a connection.
159 DCHECK(service_); 159 DCHECK(tree_);
160 service_->SetFocus(view_id, ActionCompletedCallback()); 160 tree_->SetFocus(view_id, ActionCompletedCallback());
161 } 161 }
162 162
163 void ViewManagerClientImpl::SetVisible(Id view_id, bool visible) { 163 void ViewTreeClientImpl::SetVisible(Id view_id, bool visible) {
164 DCHECK(service_); 164 DCHECK(tree_);
165 service_->SetViewVisibility(view_id, visible, ActionCompletedCallback()); 165 tree_->SetViewVisibility(view_id, visible, ActionCompletedCallback());
166 } 166 }
167 167
168 void ViewManagerClientImpl::SetProperty( 168 void ViewTreeClientImpl::SetProperty(
169 Id view_id, 169 Id view_id,
170 const std::string& name, 170 const std::string& name,
171 const std::vector<uint8_t>& data) { 171 const std::vector<uint8_t>& data) {
172 DCHECK(service_); 172 DCHECK(tree_);
173 service_->SetViewProperty(view_id, 173 tree_->SetViewProperty(view_id,
174 String(name), 174 String(name),
175 Array<uint8_t>::From(data), 175 Array<uint8_t>::From(data),
176 ActionCompletedCallback()); 176 ActionCompletedCallback());
177 } 177 }
178 178
179 void ViewManagerClientImpl::SetViewTextInputState(Id view_id, 179 void ViewTreeClientImpl::SetViewTextInputState(Id view_id,
180 TextInputStatePtr state) { 180 TextInputStatePtr state) {
181 DCHECK(service_); 181 DCHECK(tree_);
182 service_->SetViewTextInputState(view_id, state.Pass()); 182 tree_->SetViewTextInputState(view_id, state.Pass());
183 } 183 }
184 184
185 void ViewManagerClientImpl::SetImeVisibility(Id view_id, 185 void ViewTreeClientImpl::SetImeVisibility(Id view_id,
186 bool visible, 186 bool visible,
187 TextInputStatePtr state) { 187 TextInputStatePtr state) {
188 DCHECK(service_); 188 DCHECK(tree_);
189 service_->SetImeVisibility(view_id, visible, state.Pass()); 189 tree_->SetImeVisibility(view_id, visible, state.Pass());
190 } 190 }
191 191
192 void ViewManagerClientImpl::Embed(Id view_id, ViewManagerClientPtr client) { 192 void ViewTreeClientImpl::Embed(Id view_id, ViewTreeClientPtr client) {
193 DCHECK(service_); 193 DCHECK(tree_);
194 service_->Embed(view_id, client.Pass(), ActionCompletedCallback()); 194 tree_->Embed(view_id, client.Pass(), ActionCompletedCallback());
195 } 195 }
196 196
197 void ViewManagerClientImpl::EmbedAllowingReembed(mojo::URLRequestPtr request, 197 void ViewTreeClientImpl::EmbedAllowingReembed(mojo::URLRequestPtr request,
198 Id view_id) { 198 Id view_id) {
199 DCHECK(service_); 199 DCHECK(tree_);
200 service_->EmbedAllowingReembed(view_id, request.Pass(), 200 tree_->EmbedAllowingReembed(view_id, request.Pass(),
201 ActionCompletedCallback()); 201 ActionCompletedCallback());
202 } 202 }
203 203
204 void ViewManagerClientImpl::AddView(View* view) { 204 void ViewTreeClientImpl::AddView(View* view) {
205 DCHECK(views_.find(view->id()) == views_.end()); 205 DCHECK(views_.find(view->id()) == views_.end());
206 views_[view->id()] = view; 206 views_[view->id()] = view;
207 } 207 }
208 208
209 void ViewManagerClientImpl::RemoveView(Id view_id) { 209 void ViewTreeClientImpl::RemoveView(Id view_id) {
210 if (focused_view_ && focused_view_->id() == view_id) 210 if (focused_view_ && focused_view_->id() == view_id)
211 OnViewFocused(0); 211 OnViewFocused(0);
212 212
213 IdToViewMap::iterator it = views_.find(view_id); 213 IdToViewMap::iterator it = views_.find(view_id);
214 if (it != views_.end()) 214 if (it != views_.end())
215 views_.erase(it); 215 views_.erase(it);
216 } 216 }
217 217
218 void ViewManagerClientImpl::OnRootDestroyed(View* root) { 218 void ViewTreeClientImpl::OnRootDestroyed(View* root) {
219 DCHECK_EQ(root, root_); 219 DCHECK_EQ(root, root_);
220 root_ = nullptr; 220 root_ = nullptr;
221 221
222 // When the root is gone we can't do anything useful. 222 // When the root is gone we can't do anything useful.
223 if (!in_destructor_) 223 if (!in_destructor_)
224 delete this; 224 delete this;
225 } 225 }
226 226
227 //////////////////////////////////////////////////////////////////////////////// 227 ////////////////////////////////////////////////////////////////////////////////
228 // ViewManagerClientImpl, ViewManager implementation: 228 // ViewTreeClientImpl, ViewManager implementation:
229 229
230 Id ViewManagerClientImpl::CreateViewOnServer() { 230 Id ViewTreeClientImpl::CreateViewOnServer() {
231 DCHECK(service_); 231 DCHECK(tree_);
232 const Id view_id = MakeTransportId(connection_id_, ++next_id_); 232 const Id view_id = MakeTransportId(connection_id_, ++next_id_);
233 service_->CreateView(view_id, [this](ErrorCode code) { 233 tree_->CreateView(view_id, [this](ErrorCode code) {
234 OnActionCompleted(code == ERROR_CODE_NONE); 234 OnActionCompleted(code == ERROR_CODE_NONE);
235 }); 235 });
236 return view_id; 236 return view_id;
237 } 237 }
238 238
239 View* ViewManagerClientImpl::GetRoot() { 239 View* ViewTreeClientImpl::GetRoot() {
240 return root_; 240 return root_;
241 } 241 }
242 242
243 View* ViewManagerClientImpl::GetViewById(Id id) { 243 View* ViewTreeClientImpl::GetViewById(Id id) {
244 IdToViewMap::const_iterator it = views_.find(id); 244 IdToViewMap::const_iterator it = views_.find(id);
245 return it != views_.end() ? it->second : NULL; 245 return it != views_.end() ? it->second : NULL;
246 } 246 }
247 247
248 View* ViewManagerClientImpl::GetFocusedView() { 248 View* ViewTreeClientImpl::GetFocusedView() {
249 return focused_view_; 249 return focused_view_;
250 } 250 }
251 251
252 View* ViewManagerClientImpl::CreateView() { 252 View* ViewTreeClientImpl::CreateView() {
253 View* view = new View(this, CreateViewOnServer()); 253 View* view = new View(this, CreateViewOnServer());
254 AddView(view); 254 AddView(view);
255 return view; 255 return view;
256 } 256 }
257 257
258 void ViewManagerClientImpl::SetEmbedRoot() { 258 void ViewTreeClientImpl::SetEmbedRoot() {
259 // TODO(sky): this isn't right. The server may ignore the call. 259 // TODO(sky): this isn't right. The server may ignore the call.
260 is_embed_root_ = true; 260 is_embed_root_ = true;
261 service_->SetEmbedRoot(); 261 tree_->SetEmbedRoot();
262 } 262 }
263 263
264 //////////////////////////////////////////////////////////////////////////////// 264 ////////////////////////////////////////////////////////////////////////////////
265 // ViewManagerClientImpl, ViewManagerClient implementation: 265 // ViewTreeClientImpl, ViewTreeClient implementation:
266 266
267 void ViewManagerClientImpl::OnEmbed(ConnectionSpecificId connection_id, 267 void ViewTreeClientImpl::OnEmbed(ConnectionSpecificId connection_id,
268 ViewDataPtr root_data, 268 ViewDataPtr root_data,
269 ViewManagerServicePtr view_manager_service, 269 ViewTreePtr tree,
270 Id focused_view_id) { 270 Id focused_view_id) {
271 if (view_manager_service) { 271 if (tree) {
272 DCHECK(!service_); 272 DCHECK(!tree_);
273 service_ = view_manager_service.Pass(); 273 tree_ = tree.Pass();
274 service_.set_connection_error_handler([this]() { delete this; }); 274 tree_.set_connection_error_handler([this]() { delete this; });
275 } 275 }
276 connection_id_ = connection_id; 276 connection_id_ = connection_id;
277 277
278 DCHECK(!root_); 278 DCHECK(!root_);
279 root_ = AddViewToViewManager(this, nullptr, root_data); 279 root_ = AddViewToViewManager(this, nullptr, root_data);
280 280
281 focused_view_ = GetViewById(focused_view_id); 281 focused_view_ = GetViewById(focused_view_id);
282 282
283 delegate_->OnEmbed(root_); 283 delegate_->OnEmbed(root_);
284 } 284 }
285 285
286 void ViewManagerClientImpl::OnEmbedForDescendant( 286 void ViewTreeClientImpl::OnEmbedForDescendant(
287 Id view_id, 287 Id view_id,
288 mojo::URLRequestPtr request, 288 mojo::URLRequestPtr request,
289 const OnEmbedForDescendantCallback& callback) { 289 const OnEmbedForDescendantCallback& callback) {
290 View* view = GetViewById(view_id); 290 View* view = GetViewById(view_id);
291 ViewManagerClientPtr client; 291 ViewTreeClientPtr client;
292 if (view) 292 if (view)
293 delegate_->OnEmbedForDescendant(view, request.Pass(), &client); 293 delegate_->OnEmbedForDescendant(view, request.Pass(), &client);
294 callback.Run(client.Pass()); 294 callback.Run(client.Pass());
295 } 295 }
296 296
297 void ViewManagerClientImpl::OnEmbeddedAppDisconnected(Id view_id) { 297 void ViewTreeClientImpl::OnEmbeddedAppDisconnected(Id view_id) {
298 View* view = GetViewById(view_id); 298 View* view = GetViewById(view_id);
299 if (view) { 299 if (view) {
300 FOR_EACH_OBSERVER(ViewObserver, *ViewPrivate(view).observers(), 300 FOR_EACH_OBSERVER(ViewObserver, *ViewPrivate(view).observers(),
301 OnViewEmbeddedAppDisconnected(view)); 301 OnViewEmbeddedAppDisconnected(view));
302 } 302 }
303 } 303 }
304 304
305 void ViewManagerClientImpl::OnUnembed() { 305 void ViewTreeClientImpl::OnUnembed() {
306 delegate_->OnUnembed(); 306 delegate_->OnUnembed();
307 // This will send out the various notifications. 307 // This will send out the various notifications.
308 delete this; 308 delete this;
309 } 309 }
310 310
311 void ViewManagerClientImpl::OnViewBoundsChanged(Id view_id, 311 void ViewTreeClientImpl::OnViewBoundsChanged(Id view_id,
312 RectPtr old_bounds, 312 RectPtr old_bounds,
313 RectPtr new_bounds) { 313 RectPtr new_bounds) {
314 View* view = GetViewById(view_id); 314 View* view = GetViewById(view_id);
315 ViewPrivate(view).LocalSetBounds(*old_bounds, *new_bounds); 315 ViewPrivate(view).LocalSetBounds(*old_bounds, *new_bounds);
316 } 316 }
317 317
318 namespace { 318 namespace {
319 319
320 void SetViewportMetricsOnDecendants(View* root, 320 void SetViewportMetricsOnDecendants(View* root,
321 const ViewportMetrics& old_metrics, 321 const ViewportMetrics& old_metrics,
322 const ViewportMetrics& new_metrics) { 322 const ViewportMetrics& new_metrics) {
323 ViewPrivate(root).LocalSetViewportMetrics(old_metrics, new_metrics); 323 ViewPrivate(root).LocalSetViewportMetrics(old_metrics, new_metrics);
324 const View::Children& children = root->children(); 324 const View::Children& children = root->children();
325 for (size_t i = 0; i < children.size(); ++i) 325 for (size_t i = 0; i < children.size(); ++i)
326 SetViewportMetricsOnDecendants(children[i], old_metrics, new_metrics); 326 SetViewportMetricsOnDecendants(children[i], old_metrics, new_metrics);
327 } 327 }
328 } 328 }
329 329
330 void ViewManagerClientImpl::OnViewViewportMetricsChanged( 330 void ViewTreeClientImpl::OnViewViewportMetricsChanged(
331 ViewportMetricsPtr old_metrics, 331 ViewportMetricsPtr old_metrics,
332 ViewportMetricsPtr new_metrics) { 332 ViewportMetricsPtr new_metrics) {
333 View* view = GetRoot(); 333 View* view = GetRoot();
334 if (view) 334 if (view)
335 SetViewportMetricsOnDecendants(view, *old_metrics, *new_metrics); 335 SetViewportMetricsOnDecendants(view, *old_metrics, *new_metrics);
336 } 336 }
337 337
338 void ViewManagerClientImpl::OnViewHierarchyChanged( 338 void ViewTreeClientImpl::OnViewHierarchyChanged(
339 Id view_id, 339 Id view_id,
340 Id new_parent_id, 340 Id new_parent_id,
341 Id old_parent_id, 341 Id old_parent_id,
342 mojo::Array<ViewDataPtr> views) { 342 mojo::Array<ViewDataPtr> views) {
343 View* initial_parent = views.size() ? 343 View* initial_parent = views.size() ?
344 GetViewById(views[0]->parent_id) : NULL; 344 GetViewById(views[0]->parent_id) : NULL;
345 345
346 const bool was_view_known = GetViewById(view_id) != nullptr; 346 const bool was_view_known = GetViewById(view_id) != nullptr;
347 347
348 BuildViewTree(this, views, initial_parent); 348 BuildViewTree(this, views, initial_parent);
349 349
350 // If the view was not known, then BuildViewTree() will have created it and 350 // If the view was not known, then BuildViewTree() will have created it and
351 // parented the view. 351 // parented the view.
352 if (!was_view_known) 352 if (!was_view_known)
353 return; 353 return;
354 354
355 View* new_parent = GetViewById(new_parent_id); 355 View* new_parent = GetViewById(new_parent_id);
356 View* old_parent = GetViewById(old_parent_id); 356 View* old_parent = GetViewById(old_parent_id);
357 View* view = GetViewById(view_id); 357 View* view = GetViewById(view_id);
358 if (new_parent) 358 if (new_parent)
359 ViewPrivate(new_parent).LocalAddChild(view); 359 ViewPrivate(new_parent).LocalAddChild(view);
360 else 360 else
361 ViewPrivate(old_parent).LocalRemoveChild(view); 361 ViewPrivate(old_parent).LocalRemoveChild(view);
362 } 362 }
363 363
364 void ViewManagerClientImpl::OnViewReordered(Id view_id, 364 void ViewTreeClientImpl::OnViewReordered(Id view_id,
365 Id relative_view_id, 365 Id relative_view_id,
366 OrderDirection direction) { 366 OrderDirection direction) {
367 View* view = GetViewById(view_id); 367 View* view = GetViewById(view_id);
368 View* relative_view = GetViewById(relative_view_id); 368 View* relative_view = GetViewById(relative_view_id);
369 if (view && relative_view) 369 if (view && relative_view)
370 ViewPrivate(view).LocalReorder(relative_view, direction); 370 ViewPrivate(view).LocalReorder(relative_view, direction);
371 } 371 }
372 372
373 void ViewManagerClientImpl::OnViewDeleted(Id view_id) { 373 void ViewTreeClientImpl::OnViewDeleted(Id view_id) {
374 View* view = GetViewById(view_id); 374 View* view = GetViewById(view_id);
375 if (view) 375 if (view)
376 ViewPrivate(view).LocalDestroy(); 376 ViewPrivate(view).LocalDestroy();
377 } 377 }
378 378
379 void ViewManagerClientImpl::OnViewVisibilityChanged(Id view_id, bool visible) { 379 void ViewTreeClientImpl::OnViewVisibilityChanged(Id view_id, bool visible) {
380 // TODO(sky): there is a race condition here. If this client and another 380 // TODO(sky): there is a race condition here. If this client and another
381 // client change the visibility at the same time the wrong value may be set. 381 // client change the visibility at the same time the wrong value may be set.
382 // Deal with this some how. 382 // Deal with this some how.
383 View* view = GetViewById(view_id); 383 View* view = GetViewById(view_id);
384 if (view) 384 if (view)
385 ViewPrivate(view).LocalSetVisible(visible); 385 ViewPrivate(view).LocalSetVisible(visible);
386 } 386 }
387 387
388 void ViewManagerClientImpl::OnViewDrawnStateChanged(Id view_id, bool drawn) { 388 void ViewTreeClientImpl::OnViewDrawnStateChanged(Id view_id, bool drawn) {
389 View* view = GetViewById(view_id); 389 View* view = GetViewById(view_id);
390 if (view) 390 if (view)
391 ViewPrivate(view).LocalSetDrawn(drawn); 391 ViewPrivate(view).LocalSetDrawn(drawn);
392 } 392 }
393 393
394 void ViewManagerClientImpl::OnViewSharedPropertyChanged( 394 void ViewTreeClientImpl::OnViewSharedPropertyChanged(
395 Id view_id, 395 Id view_id,
396 const String& name, 396 const String& name,
397 Array<uint8_t> new_data) { 397 Array<uint8_t> new_data) {
398 View* view = GetViewById(view_id); 398 View* view = GetViewById(view_id);
399 if (view) { 399 if (view) {
400 std::vector<uint8_t> data; 400 std::vector<uint8_t> data;
401 std::vector<uint8_t>* data_ptr = NULL; 401 std::vector<uint8_t>* data_ptr = NULL;
402 if (!new_data.is_null()) { 402 if (!new_data.is_null()) {
403 data = new_data.To<std::vector<uint8_t>>(); 403 data = new_data.To<std::vector<uint8_t>>();
404 data_ptr = &data; 404 data_ptr = &data;
405 } 405 }
406 406
407 view->SetSharedProperty(name, data_ptr); 407 view->SetSharedProperty(name, data_ptr);
408 } 408 }
409 } 409 }
410 410
411 void ViewManagerClientImpl::OnViewInputEvent( 411 void ViewTreeClientImpl::OnViewInputEvent(
412 Id view_id, 412 Id view_id,
413 EventPtr event, 413 EventPtr event,
414 const Callback<void()>& ack_callback) { 414 const Callback<void()>& ack_callback) {
415 View* view = GetViewById(view_id); 415 View* view = GetViewById(view_id);
416 if (view) { 416 if (view) {
417 FOR_EACH_OBSERVER(ViewObserver, 417 FOR_EACH_OBSERVER(ViewObserver,
418 *ViewPrivate(view).observers(), 418 *ViewPrivate(view).observers(),
419 OnViewInputEvent(view, event)); 419 OnViewInputEvent(view, event));
420 } 420 }
421 ack_callback.Run(); 421 ack_callback.Run();
422 } 422 }
423 423
424 void ViewManagerClientImpl::OnViewFocused(Id focused_view_id) { 424 void ViewTreeClientImpl::OnViewFocused(Id focused_view_id) {
425 View* focused = GetViewById(focused_view_id); 425 View* focused = GetViewById(focused_view_id);
426 View* blurred = focused_view_; 426 View* blurred = focused_view_;
427 if (blurred) { 427 if (blurred) {
428 FOR_EACH_OBSERVER(ViewObserver, *ViewPrivate(blurred).observers(), 428 FOR_EACH_OBSERVER(ViewObserver, *ViewPrivate(blurred).observers(),
429 OnViewFocusChanged(focused, blurred)); 429 OnViewFocusChanged(focused, blurred));
430 } 430 }
431 focused_view_ = focused; 431 focused_view_ = focused;
432 if (focused) { 432 if (focused) {
433 FOR_EACH_OBSERVER(ViewObserver, *ViewPrivate(focused).observers(), 433 FOR_EACH_OBSERVER(ViewObserver, *ViewPrivate(focused).observers(),
434 OnViewFocusChanged(focused, blurred)); 434 OnViewFocusChanged(focused, blurred));
435 } 435 }
436 } 436 }
437 437
438 //////////////////////////////////////////////////////////////////////////////// 438 ////////////////////////////////////////////////////////////////////////////////
439 // ViewManagerClientImpl, private: 439 // ViewTreeClientImpl, private:
440 440
441 void ViewManagerClientImpl::OnActionCompleted(bool success) { 441 void ViewTreeClientImpl::OnActionCompleted(bool success) {
442 if (!change_acked_callback_.is_null()) 442 if (!change_acked_callback_.is_null())
443 change_acked_callback_.Run(); 443 change_acked_callback_.Run();
444 } 444 }
445 445
446 Callback<void(bool)> ViewManagerClientImpl::ActionCompletedCallback() { 446 Callback<void(bool)> ViewTreeClientImpl::ActionCompletedCallback() {
447 return [this](bool success) { OnActionCompleted(success); }; 447 return [this](bool success) { OnActionCompleted(success); };
448 } 448 }
449 449
450 } // namespace mojo 450 } // namespace mojo
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698