| Index: services/view_manager/server_view.cc
|
| diff --git a/services/view_manager/server_view.cc b/services/view_manager/server_view.cc
|
| index 17742447952f6a3d0cf54f91904cc8248104c30a..d6272d5812578d40ad54cfb5a0230855df45f710 100644
|
| --- a/services/view_manager/server_view.cc
|
| +++ b/services/view_manager/server_view.cc
|
| @@ -8,6 +8,7 @@
|
|
|
| #include "base/strings/stringprintf.h"
|
| #include "services/view_manager/server_view_delegate.h"
|
| +#include "services/view_manager/server_view_observer.h"
|
|
|
| namespace view_manager {
|
|
|
| @@ -21,7 +22,8 @@ ServerView::ServerView(ServerViewDelegate* delegate, const ViewId& id)
|
| }
|
|
|
| ServerView::~ServerView() {
|
| - delegate_->OnWillDestroyView(this);
|
| + delegate_->PrepareToDestroyView(this);
|
| + FOR_EACH_OBSERVER(ServerViewObserver, observers_, OnWillDestroyView(this));
|
|
|
| while (!children_.empty())
|
| children_.front()->parent()->Remove(children_.front());
|
| @@ -29,7 +31,15 @@ ServerView::~ServerView() {
|
| if (parent_)
|
| parent_->Remove(this);
|
|
|
| - delegate_->OnViewDestroyed(this);
|
| + FOR_EACH_OBSERVER(ServerViewObserver, observers_, OnViewDestroyed(this));
|
| +}
|
| +
|
| +void ServerView::AddObserver(ServerViewObserver* observer) {
|
| + observers_.AddObserver(observer);
|
| +}
|
| +
|
| +void ServerView::RemoveObserver(ServerViewObserver* observer) {
|
| + observers_.RemoveObserver(observer);
|
| }
|
|
|
| void ServerView::Add(ServerView* child) {
|
| @@ -45,13 +55,17 @@ void ServerView::Add(ServerView* child) {
|
| }
|
|
|
| ServerView* old_parent = child->parent();
|
| - child->delegate_->OnWillChangeViewHierarchy(child, this, old_parent);
|
| + child->delegate_->PrepareToChangeViewHierarchy(child, this, old_parent);
|
| + FOR_EACH_OBSERVER(ServerViewObserver, child->observers_,
|
| + OnWillChangeViewHierarchy(child, this, old_parent));
|
| +
|
| if (child->parent())
|
| child->parent()->RemoveImpl(child);
|
|
|
| child->parent_ = this;
|
| children_.push_back(child);
|
| - child->delegate_->OnViewHierarchyChanged(child, this, old_parent);
|
| + FOR_EACH_OBSERVER(ServerViewObserver, child->observers_,
|
| + OnViewHierarchyChanged(child, this, old_parent));
|
| }
|
|
|
| void ServerView::Remove(ServerView* child) {
|
| @@ -60,9 +74,12 @@ void ServerView::Remove(ServerView* child) {
|
| DCHECK(child != this);
|
| DCHECK(child->parent() == this);
|
|
|
| - child->delegate_->OnWillChangeViewHierarchy(child, NULL, this);
|
| + child->delegate_->PrepareToChangeViewHierarchy(child, NULL, this);
|
| + FOR_EACH_OBSERVER(ServerViewObserver, child->observers_,
|
| + OnWillChangeViewHierarchy(child, nullptr, this));
|
| RemoveImpl(child);
|
| - child->delegate_->OnViewHierarchyChanged(child, NULL, this);
|
| + FOR_EACH_OBSERVER(ServerViewObserver, child->observers_,
|
| + OnViewHierarchyChanged(child, nullptr, this));
|
| }
|
|
|
| void ServerView::Reorder(ServerView* child,
|
| @@ -81,7 +98,8 @@ void ServerView::Reorder(ServerView* child,
|
| DCHECK(i != children_.end());
|
| children_.insert(i, child);
|
| }
|
| - delegate_->OnViewReordered(this, relative, direction);
|
| + FOR_EACH_OBSERVER(ServerViewObserver, observers_,
|
| + OnViewReordered(this, relative, direction));
|
| }
|
|
|
| void ServerView::SetBounds(const gfx::Rect& bounds) {
|
| @@ -90,7 +108,8 @@ void ServerView::SetBounds(const gfx::Rect& bounds) {
|
|
|
| const gfx::Rect old_bounds = bounds_;
|
| bounds_ = bounds;
|
| - delegate_->OnViewBoundsChanged(this, old_bounds, bounds);
|
| + FOR_EACH_OBSERVER(ServerViewObserver, observers_,
|
| + OnViewBoundsChanged(this, old_bounds, bounds));
|
| }
|
|
|
| const ServerView* ServerView::GetRoot() const {
|
| @@ -125,7 +144,9 @@ void ServerView::SetVisible(bool value) {
|
| if (visible_ == value)
|
| return;
|
|
|
| - delegate_->OnWillChangeViewVisibility(this);
|
| + delegate_->PrepareToChangeViewVisibility(this);
|
| + FOR_EACH_OBSERVER(ServerViewObserver, observers_,
|
| + OnWillChangeViewVisibility(this));
|
| visible_ = value;
|
| }
|
|
|
| @@ -162,7 +183,8 @@ void ServerView::SetProperty(const std::string& name,
|
| properties_.erase(it);
|
| }
|
|
|
| - delegate_->OnViewSharedPropertyChanged(this, name, value);
|
| + FOR_EACH_OBSERVER(ServerViewObserver, observers_,
|
| + OnViewSharedPropertyChanged(this, name, value));
|
| }
|
|
|
| bool ServerView::IsDrawn(const ServerView* root) const {
|
| @@ -176,7 +198,7 @@ bool ServerView::IsDrawn(const ServerView* root) const {
|
|
|
| void ServerView::SetSurfaceId(cc::SurfaceId surface_id) {
|
| surface_id_ = surface_id;
|
| - delegate_->OnViewSurfaceIdChanged(this);
|
| + delegate_->OnScheduleViewPaint(this);
|
| }
|
|
|
| #if !defined(NDEBUG)
|
|
|