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

Side by Side Diff: mojo/services/view_manager/node.cc

Issue 513923004: More viewmanager renaming: (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: sim30 Created 6 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
« no previous file with comments | « mojo/services/view_manager/node.h ('k') | mojo/services/view_manager/node_delegate.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "mojo/services/view_manager/node.h"
6
7 #include "mojo/services/view_manager/node_delegate.h"
8
9 namespace mojo {
10 namespace service {
11
12 Node::Node(NodeDelegate* delegate, const NodeId& id)
13 : delegate_(delegate),
14 id_(id),
15 parent_(NULL),
16 visible_(true) {
17 DCHECK(delegate); // Must provide a delegate.
18 }
19
20 Node::~Node() {
21 while (!children_.empty())
22 children_.front()->parent()->Remove(children_.front());
23
24 if (parent_)
25 parent_->Remove(this);
26
27 delegate_->OnNodeDestroyed(this);
28 }
29
30 void Node::Add(Node* child) {
31 // We assume validation checks happened already.
32 DCHECK(child);
33 DCHECK(child != this);
34 DCHECK(!child->Contains(this));
35 if (child->parent() == this) {
36 if (children_.size() == 1)
37 return; // Already in the right position.
38 Reorder(child, children_.back(), ORDER_DIRECTION_ABOVE);
39 return;
40 }
41
42 const Node* old_parent = child->parent();
43 if (child->parent())
44 child->parent()->RemoveImpl(child);
45
46 child->parent_ = this;
47 children_.push_back(child);
48 child->delegate_->OnNodeHierarchyChanged(child, this, old_parent);
49 }
50
51 void Node::Remove(Node* child) {
52 // We assume validation checks happened else where.
53 DCHECK(child);
54 DCHECK(child != this);
55 DCHECK(child->parent() == this);
56
57 RemoveImpl(child);
58 child->delegate_->OnNodeHierarchyChanged(child, NULL, this);
59 }
60
61 void Node::Reorder(Node* child, Node* relative, OrderDirection direction) {
62 // We assume validation checks happened else where.
63 DCHECK(child);
64 DCHECK(child->parent() == this);
65 DCHECK_GT(children_.size(), 1u);
66 children_.erase(std::find(children_.begin(), children_.end(), child));
67 Nodes::iterator i = std::find(children_.begin(), children_.end(), relative);
68 if (direction == ORDER_DIRECTION_ABOVE) {
69 DCHECK(i != children_.end());
70 children_.insert(++i, child);
71 } else if (direction == ORDER_DIRECTION_BELOW) {
72 DCHECK(i != children_.end());
73 children_.insert(i, child);
74 }
75 }
76
77 void Node::SetBounds(const gfx::Rect& bounds) {
78 if (bounds_ == bounds)
79 return;
80
81 const gfx::Rect old_bounds = bounds_;
82 bounds_ = bounds;
83 delegate_->OnNodeBoundsChanged(this, old_bounds, bounds);
84 }
85
86 const Node* Node::GetRoot() const {
87 const Node* node = this;
88 while (node && node->parent())
89 node = node->parent();
90 return node;
91 }
92
93 std::vector<const Node*> Node::GetChildren() const {
94 std::vector<const Node*> children;
95 children.reserve(children_.size());
96 for (size_t i = 0; i < children_.size(); ++i)
97 children.push_back(children_[i]);
98 return children;
99 }
100
101 std::vector<Node*> Node::GetChildren() {
102 // TODO(sky): rename to children() and fix return type.
103 return children_;
104 }
105
106 bool Node::Contains(const Node* node) const {
107 for (const Node* parent = node; parent; parent = parent->parent_) {
108 if (parent == this)
109 return true;
110 }
111 return false;
112 }
113
114 void Node::SetVisible(bool value) {
115 if (visible_ == value)
116 return;
117
118 visible_ = value;
119 // TODO(sky): notification, including repaint.
120 }
121
122 void Node::SetBitmap(const SkBitmap& bitmap) {
123 bitmap_ = bitmap;
124 delegate_->OnNodeBitmapChanged(this);
125 }
126
127 void Node::RemoveImpl(Node* node) {
128 node->parent_ = NULL;
129 children_.erase(std::find(children_.begin(), children_.end(), node));
130 }
131
132 } // namespace service
133 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/services/view_manager/node.h ('k') | mojo/services/view_manager/node_delegate.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698