Index: mojo/services/public/cpp/view_manager/lib/view_manager_synchronizer.cc |
diff --git a/mojo/services/public/cpp/view_manager/lib/view_manager_synchronizer.cc b/mojo/services/public/cpp/view_manager/lib/view_manager_synchronizer.cc |
index 8eea829d0dffffc6c39c4aa397b199f5e429dcc3..76a6b52f9f190419c6438144f3372b0afd399cc5 100644 |
--- a/mojo/services/public/cpp/view_manager/lib/view_manager_synchronizer.cc |
+++ b/mojo/services/public/cpp/view_manager/lib/view_manager_synchronizer.cc |
@@ -99,7 +99,9 @@ class ViewManagerTransaction { |
// parent.) |
TYPE_HIERARCHY, |
// View replacement. |
- TYPE_SET_ACTIVE_VIEW |
+ TYPE_SET_ACTIVE_VIEW, |
+ // Node bounds. |
+ TYPE_SET_BOUNDS |
}; |
ViewManagerTransaction(TransactionType transaction_type, |
@@ -305,6 +307,32 @@ class SetActiveViewTransaction : public ViewManagerTransaction { |
DISALLOW_COPY_AND_ASSIGN(SetActiveViewTransaction); |
}; |
+class SetBoundsTransaction : public ViewManagerTransaction { |
+ public: |
+ SetBoundsTransaction(TransportNodeId node_id, |
+ const gfx::Rect& bounds, |
+ ViewManagerSynchronizer* synchronizer) |
+ : ViewManagerTransaction(TYPE_SET_BOUNDS, synchronizer), |
+ node_id_(node_id), |
+ bounds_(bounds) {} |
+ virtual ~SetBoundsTransaction() {} |
+ |
+ private: |
+ // Overridden from ViewManagerTransaction: |
+ virtual void DoCommit() OVERRIDE { |
+ AllocationScope scope; |
+ service()->SetNodeBounds(node_id_, bounds_, ActionCompletedCallback()); |
+ } |
+ virtual void DoActionCompleted(bool success) OVERRIDE { |
+ // TODO(beng): recovery? |
+ } |
+ |
+ const TransportNodeId node_id_; |
+ const gfx::Rect bounds_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(SetBoundsTransaction); |
+}; |
+ |
ViewManagerSynchronizer::ViewManagerSynchronizer(ViewManager* view_manager) |
: view_manager_(view_manager), |
connected_(false), |
@@ -399,6 +427,14 @@ void ViewManagerSynchronizer::SetActiveView(TransportNodeId node_id, |
Sync(); |
} |
+void ViewManagerSynchronizer::SetBounds(TransportNodeId node_id, |
+ const gfx::Rect& bounds) { |
+ DCHECK(connected_); |
+ pending_transactions_.push_back( |
+ new SetBoundsTransaction(node_id, bounds, this)); |
+ Sync(); |
+} |
+ |
//////////////////////////////////////////////////////////////////////////////// |
// ViewManagerSynchronizer, IViewManagerClient implementation: |
@@ -423,6 +459,13 @@ void ViewManagerSynchronizer::OnServerChangeIdAdvanced( |
next_server_change_id_ = next_server_change_id; |
} |
+void ViewManagerSynchronizer::OnNodeBoundsChanged(uint32 node_id, |
+ const Rect& old_bounds, |
+ const Rect& new_bounds) { |
+ ViewTreeNode* node = view_manager_->GetNodeById(node_id); |
+ ViewTreeNodePrivate(node).LocalSetBounds(old_bounds, new_bounds); |
+} |
+ |
void ViewManagerSynchronizer::OnNodeHierarchyChanged( |
uint32_t node_id, |
uint32_t new_parent_id, |