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) |