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

Unified Diff: mojo/services/view_manager/node.cc

Issue 507563002: Removes usage of aura::Window from Node (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: review Created 6 years, 4 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 side-by-side diff with in-line comments
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 »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: mojo/services/view_manager/node.cc
diff --git a/mojo/services/view_manager/node.cc b/mojo/services/view_manager/node.cc
index 2d3659acec2911bd970d7ddc052969dd780b351d..f1185539a132009d4eb7572cf228912090741737 100644
--- a/mojo/services/view_manager/node.cc
+++ b/mojo/services/view_manager/node.cc
@@ -5,184 +5,128 @@
#include "mojo/services/view_manager/node.h"
#include "mojo/services/view_manager/node_delegate.h"
-#include "ui/aura/window_property.h"
-#include "ui/base/cursor/cursor.h"
-#include "ui/base/hit_test.h"
-#include "ui/compositor/layer.h"
-#include "ui/gfx/canvas.h"
-#include "ui/gfx/image/image_skia.h"
-#include "ui/gfx/native_widget_types.h"
-
-DECLARE_WINDOW_PROPERTY_TYPE(mojo::service::Node*);
namespace mojo {
namespace service {
-DEFINE_WINDOW_PROPERTY_KEY(Node*, kNodeKey, NULL);
-
Node::Node(NodeDelegate* delegate, const NodeId& id)
: delegate_(delegate),
id_(id),
- window_(this) {
+ parent_(NULL),
+ visible_(true) {
DCHECK(delegate); // Must provide a delegate.
- window_.set_owned_by_parent(false);
- window_.AddObserver(this);
- window_.SetProperty(kNodeKey, this);
- window_.Init(aura::WINDOW_LAYER_TEXTURED);
-
- // TODO(sky): this likely needs to be false and add a visibility API.
- window_.Show();
}
Node::~Node() {
- // This is implicitly done during deletion of the window, but we do it here so
- // that we're in a known state.
- if (window_.parent())
- window_.parent()->RemoveChild(&window_);
+ while (!children_.empty())
+ children_.front()->parent()->Remove(children_.front());
+
+ if (parent_)
+ parent_->Remove(this);
delegate_->OnNodeDestroyed(this);
}
-// static
-Node* Node::NodeForWindow(aura::Window* window) {
- return window->GetProperty(kNodeKey);
-}
+void Node::Add(Node* child) {
+ // We assume validation checks happened already.
+ DCHECK(child);
+ DCHECK(child != this);
+ DCHECK(!child->Contains(this));
+ if (child->parent() == this) {
+ if (children_.size() == 1)
+ return; // Already in the right position.
+ Reorder(child, children_.back(), ORDER_DIRECTION_ABOVE);
+ return;
+ }
-const Node* Node::GetParent() const {
- if (!window_.parent())
- return NULL;
- return window_.parent()->GetProperty(kNodeKey);
-}
+ const Node* old_parent = child->parent();
+ if (child->parent())
+ child->parent()->RemoveImpl(child);
-void Node::Add(Node* child) {
- window_.AddChild(&child->window_);
+ child->parent_ = this;
+ children_.push_back(child);
+ child->delegate_->OnNodeHierarchyChanged(child, this, old_parent);
}
void Node::Remove(Node* child) {
- window_.RemoveChild(&child->window_);
+ // We assume validation checks happened else where.
+ DCHECK(child);
+ DCHECK(child != this);
+ DCHECK(child->parent() == this);
+
+ RemoveImpl(child);
+ child->delegate_->OnNodeHierarchyChanged(child, NULL, this);
}
void Node::Reorder(Node* child, Node* relative, OrderDirection direction) {
- if (direction == ORDER_DIRECTION_ABOVE)
- window_.StackChildAbove(child->window(), relative->window());
- else if (direction == ORDER_DIRECTION_BELOW)
- window_.StackChildBelow(child->window(), relative->window());
+ // We assume validation checks happened else where.
+ DCHECK(child);
+ DCHECK(child->parent() == this);
+ DCHECK_GT(children_.size(), 1u);
+ children_.erase(std::find(children_.begin(), children_.end(), child));
+ Nodes::iterator i = std::find(children_.begin(), children_.end(), relative);
+ if (direction == ORDER_DIRECTION_ABOVE) {
+ DCHECK(i != children_.end());
+ children_.insert(++i, child);
+ } else if (direction == ORDER_DIRECTION_BELOW) {
+ DCHECK(i != children_.end());
+ children_.insert(i, child);
+ }
+}
+
+void Node::SetBounds(const gfx::Rect& bounds) {
+ if (bounds_ == bounds)
+ return;
+
+ const gfx::Rect old_bounds = bounds_;
+ bounds_ = bounds;
+ delegate_->OnNodeBoundsChanged(this, old_bounds, bounds);
}
const Node* Node::GetRoot() const {
- const aura::Window* window = &window_;
- while (window && window->parent())
- window = window->parent();
- return window->GetProperty(kNodeKey);
+ const Node* node = this;
+ while (node && node->parent())
+ node = node->parent();
+ return node;
}
std::vector<const Node*> Node::GetChildren() const {
std::vector<const Node*> children;
- children.reserve(window_.children().size());
- for (size_t i = 0; i < window_.children().size(); ++i)
- children.push_back(window_.children()[i]->GetProperty(kNodeKey));
+ children.reserve(children_.size());
+ for (size_t i = 0; i < children_.size(); ++i)
+ children.push_back(children_[i]);
return children;
}
std::vector<Node*> Node::GetChildren() {
- std::vector<Node*> children;
- children.reserve(window_.children().size());
- for (size_t i = 0; i < window_.children().size(); ++i)
- children.push_back(window_.children()[i]->GetProperty(kNodeKey));
- return children;
+ // TODO(sky): rename to children() and fix return type.
+ return children_;
}
bool Node::Contains(const Node* node) const {
- return node && window_.Contains(&(node->window_));
-}
-
-bool Node::IsVisible() const {
- return window_.TargetVisibility();
+ for (const Node* parent = node; parent; parent = parent->parent_) {
+ if (parent == this)
+ return true;
+ }
+ return false;
}
void Node::SetVisible(bool value) {
- if (value)
- window_.Show();
- else
- window_.Hide();
-}
-
-void Node::SetBitmap(const SkBitmap& bitmap) {
- bitmap_ = bitmap;
- window_.SchedulePaintInRect(gfx::Rect(window_.bounds().size()));
-}
-
-void Node::OnWindowHierarchyChanged(
- const aura::WindowObserver::HierarchyChangeParams& params) {
- if (params.target != &window_ || params.receiver != &window_)
+ if (visible_ == value)
return;
- const Node* new_parent = params.new_parent ?
- params.new_parent->GetProperty(kNodeKey) : NULL;
- const Node* old_parent = params.old_parent ?
- params.old_parent->GetProperty(kNodeKey) : NULL;
- // This check is needed because even the root Node's aura::Window has a
- // parent, but the Node itself has no parent (so it's possible for us to
- // receive this notification from aura when no logical Node hierarchy change
- // has actually ocurred).
- if (new_parent != old_parent)
- delegate_->OnNodeHierarchyChanged(this, new_parent, old_parent);
-}
-
-gfx::Size Node::GetMinimumSize() const {
- return gfx::Size();
-}
-gfx::Size Node::GetMaximumSize() const {
- return gfx::Size();
+ visible_ = value;
+ // TODO(sky): notification, including repaint.
}
-void Node::OnBoundsChanged(const gfx::Rect& old_bounds,
- const gfx::Rect& new_bounds) {
- delegate_->OnNodeBoundsChanged(this, old_bounds, new_bounds);
-}
-
-gfx::NativeCursor Node::GetCursor(const gfx::Point& point) {
- return gfx::kNullCursor;
-}
-
-int Node::GetNonClientComponent(const gfx::Point& point) const {
- return HTCAPTION;
-}
-
-bool Node::ShouldDescendIntoChildForEventHandling(
- aura::Window* child,
- const gfx::Point& location) {
- return true;
-}
-
-bool Node::CanFocus() {
- return true;
-}
-
-void Node::OnCaptureLost() {
-}
-
-void Node::OnPaint(gfx::Canvas* canvas) {
- canvas->DrawImageInt(gfx::ImageSkia::CreateFrom1xBitmap(bitmap_), 0, 0);
-}
-
-void Node::OnDeviceScaleFactorChanged(float device_scale_factor) {
-}
-
-void Node::OnWindowDestroying(aura::Window* window) {
-}
-
-void Node::OnWindowDestroyed(aura::Window* window) {
-}
-
-void Node::OnWindowTargetVisibilityChanged(bool visible) {
-}
-
-bool Node::HasHitTestMask() const {
- return false;
+void Node::SetBitmap(const SkBitmap& bitmap) {
+ bitmap_ = bitmap;
+ delegate_->OnNodeBitmapChanged(this);
}
-void Node::GetHitTestMask(gfx::Path* mask) const {
+void Node::RemoveImpl(Node* node) {
+ node->parent_ = NULL;
+ children_.erase(std::find(children_.begin(), children_.end(), node));
}
} // namespace service
« 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