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

Side by Side Diff: mojo/services/public/cpp/view_manager/lib/view_manager_client_impl.cc

Issue 621903004: Adds View::visible() and IsDrawn (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: cleanup Created 6 years, 2 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 "mojo/services/public/cpp/view_manager/lib/view_manager_client_impl.h" 5 #include "mojo/services/public/cpp/view_manager/lib/view_manager_client_impl.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/command_line.h" 8 #include "base/command_line.h"
9 #include "base/message_loop/message_loop.h" 9 #include "base/message_loop/message_loop.h"
10 #include "base/stl_util.h" 10 #include "base/stl_util.h"
(...skipping 13 matching lines...) Expand all
24 namespace mojo { 24 namespace mojo {
25 25
26 Id MakeTransportId(ConnectionSpecificId connection_id, 26 Id MakeTransportId(ConnectionSpecificId connection_id,
27 ConnectionSpecificId local_id) { 27 ConnectionSpecificId local_id) {
28 return (connection_id << 16) | local_id; 28 return (connection_id << 16) | local_id;
29 } 29 }
30 30
31 // Helper called to construct a local view object from transport data. 31 // Helper called to construct a local view object from transport data.
32 View* AddViewToViewManager(ViewManagerClientImpl* client, 32 View* AddViewToViewManager(ViewManagerClientImpl* client,
33 View* parent, 33 View* parent,
34 Id view_id, 34 const ViewDataPtr& view_data) {
35 const gfx::Rect& bounds) {
36 // We don't use the ctor that takes a ViewManager here, since it will call 35 // We don't use the ctor that takes a ViewManager here, since it will call
37 // back to the service and attempt to create a new view. 36 // back to the service and attempt to create a new view.
38 View* view = ViewPrivate::LocalCreate(); 37 View* view = ViewPrivate::LocalCreate();
39 ViewPrivate private_view(view); 38 ViewPrivate private_view(view);
40 private_view.set_view_manager(client); 39 private_view.set_view_manager(client);
41 private_view.set_id(view_id); 40 private_view.set_id(view_data->view_id);
41 private_view.set_visible(view_data->visible);
42 private_view.set_drawn(view_data->drawn);
42 client->AddView(view); 43 client->AddView(view);
43 private_view.LocalSetBounds(gfx::Rect(), bounds); 44 private_view.LocalSetBounds(gfx::Rect(), view_data->bounds.To<gfx::Rect>());
44 if (parent) 45 if (parent)
45 ViewPrivate(parent).LocalAddChild(view); 46 ViewPrivate(parent).LocalAddChild(view);
46 return view; 47 return view;
47 } 48 }
48 49
49 View* BuildViewTree(ViewManagerClientImpl* client, 50 View* BuildViewTree(ViewManagerClientImpl* client,
50 const Array<ViewDataPtr>& views, 51 const Array<ViewDataPtr>& views,
51 View* initial_parent) { 52 View* initial_parent) {
52 std::vector<View*> parents; 53 std::vector<View*> parents;
53 View* root = NULL; 54 View* root = NULL;
54 View* last_view = NULL; 55 View* last_view = NULL;
55 if (initial_parent) 56 if (initial_parent)
56 parents.push_back(initial_parent); 57 parents.push_back(initial_parent);
57 for (size_t i = 0; i < views.size(); ++i) { 58 for (size_t i = 0; i < views.size(); ++i) {
58 if (last_view && views[i]->parent_id == last_view->id()) { 59 if (last_view && views[i]->parent_id == last_view->id()) {
59 parents.push_back(last_view); 60 parents.push_back(last_view);
60 } else if (!parents.empty()) { 61 } else if (!parents.empty()) {
61 while (parents.back()->id() != views[i]->parent_id) 62 while (parents.back()->id() != views[i]->parent_id)
62 parents.pop_back(); 63 parents.pop_back();
63 } 64 }
64 View* view = AddViewToViewManager( 65 View* view = AddViewToViewManager(
65 client, 66 client, !parents.empty() ? parents.back() : NULL, views[i]);
66 !parents.empty() ? parents.back() : NULL,
67 views[i]->view_id,
68 views[i]->bounds.To<gfx::Rect>());
69 if (!last_view) 67 if (!last_view)
70 root = view; 68 root = view;
71 last_view = view; 69 last_view = view;
72 } 70 }
73 return root; 71 return root;
74 } 72 }
75 73
76 // Responsible for removing a root from the ViewManager when that view is 74 // Responsible for removing a root from the ViewManager when that view is
77 // destroyed. 75 // destroyed.
78 class RootObserver : public ViewObserver { 76 class RootObserver : public ViewObserver {
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
269 connected_ = true; 267 connected_ = true;
270 connection_id_ = connection_id; 268 connection_id_ = connection_id;
271 creator_url_ = String::From(creator_url); 269 creator_url_ = String::From(creator_url);
272 } else { 270 } else {
273 DCHECK_EQ(connection_id_, connection_id); 271 DCHECK_EQ(connection_id_, connection_id);
274 DCHECK_EQ(creator_url_, creator_url); 272 DCHECK_EQ(creator_url_, creator_url);
275 } 273 }
276 274
277 // A new root must not already exist as a root or be contained by an existing 275 // A new root must not already exist as a root or be contained by an existing
278 // hierarchy visible to this view manager. 276 // hierarchy visible to this view manager.
279 View* root = AddViewToViewManager(this, NULL, root_data->view_id, 277 View* root = AddViewToViewManager(this, NULL, root_data);
280 root_data->bounds.To<gfx::Rect>());
281 roots_.push_back(root); 278 roots_.push_back(root);
282 root->AddObserver(new RootObserver(root)); 279 root->AddObserver(new RootObserver(root));
283 280
284 // BindToRequest() binds the lifetime of |exported_services| to the pipe. 281 // BindToRequest() binds the lifetime of |exported_services| to the pipe.
285 ServiceProviderImpl* exported_services = new ServiceProviderImpl; 282 ServiceProviderImpl* exported_services = new ServiceProviderImpl;
286 BindToRequest(exported_services, &service_provider); 283 BindToRequest(exported_services, &service_provider);
287 scoped_ptr<ServiceProvider> remote( 284 scoped_ptr<ServiceProvider> remote(
288 exported_services->CreateRemoteServiceProvider()); 285 exported_services->CreateRemoteServiceProvider());
289 delegate_->OnEmbed(this, root, exported_services, remote.Pass()); 286 delegate_->OnEmbed(this, root, exported_services, remote.Pass());
290 } 287 }
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
325 ViewPrivate(view).LocalReorder(relative_view, direction); 322 ViewPrivate(view).LocalReorder(relative_view, direction);
326 } 323 }
327 324
328 void ViewManagerClientImpl::OnViewDeleted(Id view_id) { 325 void ViewManagerClientImpl::OnViewDeleted(Id view_id) {
329 View* view = GetViewById(view_id); 326 View* view = GetViewById(view_id);
330 if (view) 327 if (view)
331 ViewPrivate(view).LocalDestroy(); 328 ViewPrivate(view).LocalDestroy();
332 } 329 }
333 330
334 void ViewManagerClientImpl::OnViewVisibilityChanged(Id view_id, bool visible) { 331 void ViewManagerClientImpl::OnViewVisibilityChanged(Id view_id, bool visible) {
335 // TODO(sky): implement me. 332 // TODO(sky): there is a race condition here. If this client and another
336 NOTIMPLEMENTED(); 333 // client change the visibility at the same time the wrong value may be set.
334 // Deal with this some how.
335 View* view = GetViewById(view_id);
336 if (view)
337 view->SetVisible(visible);
337 } 338 }
338 339
339 void ViewManagerClientImpl::OnViewDrawnStateChanged(Id view_id, bool drawn) { 340 void ViewManagerClientImpl::OnViewDrawnStateChanged(Id view_id, bool drawn) {
340 // TODO(sky): implement me. 341 View* view = GetViewById(view_id);
341 NOTIMPLEMENTED(); 342 if (view)
343 ViewPrivate(view).LocalSetDrawn(drawn);
342 } 344 }
343 345
344 void ViewManagerClientImpl::OnViewInputEvent( 346 void ViewManagerClientImpl::OnViewInputEvent(
345 Id view_id, 347 Id view_id,
346 EventPtr event, 348 EventPtr event,
347 const Callback<void()>& ack_callback) { 349 const Callback<void()>& ack_callback) {
348 View* view = GetViewById(view_id); 350 View* view = GetViewById(view_id);
349 if (view) { 351 if (view) {
350 FOR_EACH_OBSERVER(ViewObserver, 352 FOR_EACH_OBSERVER(ViewObserver,
351 *ViewPrivate(view).observers(), 353 *ViewPrivate(view).observers(),
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
417 base::Unretained(this)); 419 base::Unretained(this));
418 } 420 }
419 421
420 base::Callback<void(ErrorCode)> 422 base::Callback<void(ErrorCode)>
421 ViewManagerClientImpl::ActionCompletedCallbackWithErrorCode() { 423 ViewManagerClientImpl::ActionCompletedCallbackWithErrorCode() {
422 return base::Bind(&ViewManagerClientImpl::OnActionCompletedWithErrorCode, 424 return base::Bind(&ViewManagerClientImpl::OnActionCompletedWithErrorCode,
423 base::Unretained(this)); 425 base::Unretained(this));
424 } 426 }
425 427
426 } // namespace mojo 428 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/services/public/cpp/view_manager/lib/view.cc ('k') | mojo/services/public/cpp/view_manager/lib/view_private.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698