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