15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#ifndef UI_WM_CORE_VISIBILITY_CONTROLLER_H_
6a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#define UI_WM_CORE_VISIBILITY_CONTROLLER_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/aura/client/visibility_client.h"
110529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "ui/wm/wm_export.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)namespace wm {
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
150529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochclass WM_EXPORT VisibilityController
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    : public aura::client::VisibilityClient {
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  VisibilityController();
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~VisibilityController();
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected:
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Subclasses override if they want to call a different implementation of
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // this function.
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // TODO(beng): potentially replace by an actual window animator class in
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  //             window_animations.h.
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual bool CallAnimateOnChildWindowVisibilityChanged(aura::Window* window,
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                                         bool visible);
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Overridden from aura::client::VisibilityClient:
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void UpdateLayerVisibility(aura::Window* window,
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                     bool visible) OVERRIDE;
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(VisibilityController);
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Suspends the animations for visibility changes during the lifetime of an
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// instance of this class.
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Example:
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// void ViewName::UnanimatedAction() {
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//   SuspendChildWindowVisibilityAnimations suspend(parent);
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//   // Perform unanimated action here.
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//   // ...
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//   // When the method finishes, visibility animations will return to their
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//   // previous state.
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// }
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
500529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochclass WM_EXPORT SuspendChildWindowVisibilityAnimations {
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Suspend visibility animations of child windows.
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  explicit SuspendChildWindowVisibilityAnimations(aura::Window* window);
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Restore visibility animations to their original state.
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ~SuspendChildWindowVisibilityAnimations();
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The window to manage.
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  aura::Window* window_;
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Whether the visibility animations on child windows were originally enabled.
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const bool original_enabled_;
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(SuspendChildWindowVisibilityAnimations);
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tells |window| to animate visibility changes to its children.
690529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochvoid WM_EXPORT SetChildWindowVisibilityChangesAnimated(
70a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    aura::Window* window);
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
72a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}  // namespace wm
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
74a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif  // UI_WM_CORE_VISIBILITY_CONTROLLER_H_
75