Home | History | Annotate | Download | only in corewm
      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_VIEWS_COREWM_VISIBILITY_CONTROLLER_H_
      6 #define UI_VIEWS_COREWM_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/views/views_export.h"
     12 
     13 namespace views {
     14 namespace corewm {
     15 
     16 class VIEWS_EXPORT VisibilityController
     17     : public aura::client::VisibilityClient {
     18  public:
     19   VisibilityController();
     20   virtual ~VisibilityController();
     21 
     22  protected:
     23   // Subclasses override if they want to call a different implementation of
     24   // this function.
     25   // TODO(beng): potentially replace by an actual window animator class in
     26   //             window_animations.h.
     27   virtual bool CallAnimateOnChildWindowVisibilityChanged(aura::Window* window,
     28                                                          bool visible);
     29 
     30  private:
     31   // Overridden from aura::client::VisibilityClient:
     32   virtual void UpdateLayerVisibility(aura::Window* window,
     33                                      bool visible) OVERRIDE;
     34 
     35   DISALLOW_COPY_AND_ASSIGN(VisibilityController);
     36 };
     37 
     38 // Suspends the animations for visibility changes during the lifetime of an
     39 // instance of this class.
     40 //
     41 // Example:
     42 //
     43 // void ViewName::UnanimatedAction() {
     44 //   SuspendChildWindowVisibilityAnimations suspend(parent);
     45 //   // Perform unanimated action here.
     46 //   // ...
     47 //   // When the method finishes, visibility animations will return to their
     48 //   // previous state.
     49 // }
     50 //
     51 class VIEWS_EXPORT SuspendChildWindowVisibilityAnimations {
     52  public:
     53   // Suspend visibility animations of child windows.
     54   explicit SuspendChildWindowVisibilityAnimations(aura::Window* window);
     55 
     56   // Restore visibility animations to their original state.
     57   ~SuspendChildWindowVisibilityAnimations();
     58 
     59  private:
     60   // The window to manage.
     61   aura::Window* window_;
     62 
     63   // Whether the visibility animations on child windows were originally enabled.
     64   const bool original_enabled_;
     65 
     66   DISALLOW_COPY_AND_ASSIGN(SuspendChildWindowVisibilityAnimations);
     67 };
     68 
     69 // Tells |window| to animate visibility changes to its children.
     70 void VIEWS_EXPORT SetChildWindowVisibilityChangesAnimated(aura::Window* window);
     71 
     72 }  // namespace corewm
     73 }  // namespace views
     74 
     75 #endif  // UI_VIEWS_COREWM_VISIBILITY_CONTROLLER_H_
     76