14e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 24e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 34e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// found in the LICENSE file. 44e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 54e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#ifndef UI_V2_PUBLIC_VIEW_OBSERVER_H_ 64e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#define UI_V2_PUBLIC_VIEW_OBSERVER_H_ 74e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 84e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "ui/v2/public/v2_export.h" 94e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)namespace gfx { 114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class Rect; 124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)namespace v2 { 154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class View; 174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Observe View disposition changes. -ing methods are called before the change 194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// is committed, -ed methods are called after. 204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class V2_EXPORT ViewObserver { 214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) public: 224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Whether a notification is being sent before or after some property has 234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // changed. 244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) enum DispositionChangePhase { 254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) DISPOSITION_CHANGING, 264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) DISPOSITION_CHANGED 274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) }; 284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Tree. 304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) struct TreeChangeParams { 314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) TreeChangeParams(); 324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) View* target; 334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) View* old_parent; 344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) View* new_parent; 354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) View* receiver; 364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) DispositionChangePhase phase; 374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) }; 384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Called when a node is added or removed. Notifications are sent to the 404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // following hierarchies in this order: 414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // 1. |target|. 424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // 2. |target|'s child hierarchy. 434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // 3. |target|'s parent hierarchy in its |old_parent| 444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // (only for Changing notifications). 454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // 3. |target|'s parent hierarchy in its |new_parent|. 464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // (only for Changed notifications). 474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // This sequence is performed via the OnTreeChange notification below before 484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // and after the change is committed. 494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) virtual void OnViewTreeChange(const TreeChangeParams& params) {} 504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Disposition. 524e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) virtual void OnViewDestroy(View* view, DispositionChangePhase phase) {} 534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) virtual void OnViewBoundsChanged(View* view, 544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const gfx::Rect& old_bounds, 554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const gfx::Rect& new_bounds) {} 564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) virtual void OnViewVisibilityChange(View* view, 574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) DispositionChangePhase phase) {} 584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 594e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) protected: 604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) virtual ~ViewObserver() {} 614e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}; 624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} // namespace v2 644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif // UI_V2_PUBLIC_VIEW_OBSERVER_H_ 66