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

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

Issue 258623005: First step at synchronizing client model changes with service. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 6 years, 7 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 | Annotate | Revision Log
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/view_tree_node.h" 5 #include "mojo/services/public/cpp/view_manager/view_tree_node.h"
6 6
7 #include "mojo/services/public/cpp/view_manager/lib/view_manager_private.h"
8 #include "mojo/services/public/cpp/view_manager/lib/view_manager_synchronizer.h"
7 #include "mojo/services/public/cpp/view_manager/lib/view_tree_node_private.h" 9 #include "mojo/services/public/cpp/view_manager/lib/view_tree_node_private.h"
8 #include "mojo/services/public/cpp/view_manager/view_tree_node_observer.h" 10 #include "mojo/services/public/cpp/view_manager/view_tree_node_observer.h"
9 11
10 namespace mojo { 12 namespace mojo {
11 namespace services { 13 namespace services {
12 namespace view_manager { 14 namespace view_manager {
13 15
14 void NotifyViewTreeChangeAtReceiver( 16 void NotifyViewTreeChangeAtReceiver(
15 ViewTreeNode* receiver, 17 ViewTreeNode* receiver,
16 const ViewTreeNodeObserver::TreeChangeParams& params) { 18 const ViewTreeNodeObserver::TreeChangeParams& params) {
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
81 std::find(children->begin(), children->end(), child); 83 std::find(children->begin(), children->end(), child);
82 if (it != children->end()) { 84 if (it != children->end()) {
83 children->erase(it); 85 children->erase(it);
84 ViewTreeNodePrivate(child).ClearParent(); 86 ViewTreeNodePrivate(child).ClearParent();
85 } 87 }
86 } 88 }
87 89
88 //////////////////////////////////////////////////////////////////////////////// 90 ////////////////////////////////////////////////////////////////////////////////
89 // ViewTreeNode, public: 91 // ViewTreeNode, public:
90 92
91 ViewTreeNode::ViewTreeNode() : owned_by_parent_(true), parent_(NULL) {} 93 ViewTreeNode::ViewTreeNode()
94 : manager_(NULL),
95 id_(-1),
96 owned_by_parent_(true),
97 parent_(NULL) {}
98
99 ViewTreeNode::ViewTreeNode(ViewManager* manager)
100 : manager_(manager),
101 id_(ViewManagerPrivate(manager).synchronizer()->CreateViewTreeNode()),
102 owned_by_parent_(true),
103 parent_(NULL) {}
92 104
93 ViewTreeNode::~ViewTreeNode() { 105 ViewTreeNode::~ViewTreeNode() {
94 while (!children_.empty()) { 106 while (!children_.empty()) {
95 ViewTreeNode* child = children_.front(); 107 ViewTreeNode* child = children_.front();
96 if (child->owned_by_parent_) { 108 if (child->owned_by_parent_) {
97 delete child; 109 delete child;
98 // Deleting the child also removes it from our child list. 110 // Deleting the child also removes it from our child list.
99 DCHECK(std::find(children_.begin(), children_.end(), child) == 111 DCHECK(std::find(children_.begin(), children_.end(), child) ==
100 children_.end()); 112 children_.end());
101 } else { 113 } else {
(...skipping 13 matching lines...) Expand all
115 void ViewTreeNode::RemoveObserver(ViewTreeNodeObserver* observer) { 127 void ViewTreeNode::RemoveObserver(ViewTreeNodeObserver* observer) {
116 observers_.RemoveObserver(observer); 128 observers_.RemoveObserver(observer);
117 } 129 }
118 130
119 void ViewTreeNode::AddChild(ViewTreeNode* child) { 131 void ViewTreeNode::AddChild(ViewTreeNode* child) {
120 ScopedTreeNotifier notifier(child, child->parent(), this); 132 ScopedTreeNotifier notifier(child, child->parent(), this);
121 if (child->parent()) 133 if (child->parent())
122 RemoveChildImpl(child, &child->parent_->children_); 134 RemoveChildImpl(child, &child->parent_->children_);
123 children_.push_back(child); 135 children_.push_back(child);
124 child->parent_ = this; 136 child->parent_ = this;
137 ViewManagerPrivate(manager_).synchronizer()->AddChild(child->id(), id_);
125 } 138 }
126 139
127 void ViewTreeNode::RemoveChild(ViewTreeNode* child) { 140 void ViewTreeNode::RemoveChild(ViewTreeNode* child) {
128 DCHECK_EQ(this, child->parent()); 141 DCHECK_EQ(this, child->parent());
129 ScopedTreeNotifier(child, this, NULL); 142 ScopedTreeNotifier(child, this, NULL);
130 RemoveChildImpl(child, &children_); 143 RemoveChildImpl(child, &children_);
144 ViewManagerPrivate(manager_).synchronizer()->RemoveChild(child->id(), id_);
131 } 145 }
132 146
133 bool ViewTreeNode::Contains(ViewTreeNode* child) const { 147 bool ViewTreeNode::Contains(ViewTreeNode* child) const {
134 for (ViewTreeNode* p = child->parent(); p; p = p->parent()) { 148 for (ViewTreeNode* p = child->parent(); p; p = p->parent()) {
135 if (p == this) 149 if (p == this)
136 return true; 150 return true;
137 } 151 }
138 return false; 152 return false;
139 } 153 }
140 154
141 } // namespace view_manager 155 } // namespace view_manager
142 } // namespace services 156 } // namespace services
143 } // namespace mojo 157 } // namespace mojo
144 158
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698