1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef UI_WM_CORE_VISIBILITY_CONTROLLER_H_ 6 #define UI_WM_CORE_VISIBILITY_CONTROLLER_H_ 7 8 #include "base/compiler_specific.h" 9 #include "base/logging.h" 10 #include "ui/aura/client/visibility_client.h" 11 #include "ui/wm/wm_export.h" 12 13 namespace wm { 14 15 class WM_EXPORT VisibilityController 16 : public aura::client::VisibilityClient { 17 public: 18 VisibilityController(); 19 virtual ~VisibilityController(); 20 21 protected: 22 // Subclasses override if they want to call a different implementation of 23 // this function. 24 // TODO(beng): potentially replace by an actual window animator class in 25 // window_animations.h. 26 virtual bool CallAnimateOnChildWindowVisibilityChanged(aura::Window* window, 27 bool visible); 28 29 private: 30 // Overridden from aura::client::VisibilityClient: 31 virtual void UpdateLayerVisibility(aura::Window* window, 32 bool visible) OVERRIDE; 33 34 DISALLOW_COPY_AND_ASSIGN(VisibilityController); 35 }; 36 37 // Suspends the animations for visibility changes during the lifetime of an 38 // instance of this class. 39 // 40 // Example: 41 // 42 // void ViewName::UnanimatedAction() { 43 // SuspendChildWindowVisibilityAnimations suspend(parent); 44 // // Perform unanimated action here. 45 // // ... 46 // // When the method finishes, visibility animations will return to their 47 // // previous state. 48 // } 49 // 50 class WM_EXPORT SuspendChildWindowVisibilityAnimations { 51 public: 52 // Suspend visibility animations of child windows. 53 explicit SuspendChildWindowVisibilityAnimations(aura::Window* window); 54 55 // Restore visibility animations to their original state. 56 ~SuspendChildWindowVisibilityAnimations(); 57 58 private: 59 // The window to manage. 60 aura::Window* window_; 61 62 // Whether the visibility animations on child windows were originally enabled. 63 const bool original_enabled_; 64 65 DISALLOW_COPY_AND_ASSIGN(SuspendChildWindowVisibilityAnimations); 66 }; 67 68 // Tells |window| to animate visibility changes to its children. 69 void WM_EXPORT SetChildWindowVisibilityChangesAnimated( 70 aura::Window* window); 71 72 } // namespace wm 73 74 #endif // UI_WM_CORE_VISIBILITY_CONTROLLER_H_ 75