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 13namespace wm { 14 15class 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// 50class 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. 69void WM_EXPORT SetChildWindowVisibilityChangesAnimated( 70 aura::Window* window); 71 72} // namespace wm 73 74#endif // UI_WM_CORE_VISIBILITY_CONTROLLER_H_ 75