Home | History | Annotate | Download | only in display
      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 ASH_DISPLAY_OUTPUT_CONFIGURATOR_ANIMATION_H_
      6 #define ASH_DISPLAY_OUTPUT_CONFIGURATOR_ANIMATION_H_
      7 
      8 #include <map>
      9 
     10 #include "ash/ash_export.h"
     11 #include "base/callback.h"
     12 #include "base/timer/timer.h"
     13 #include "chromeos/display/output_configurator.h"
     14 
     15 namespace aura {
     16 class RootWindow;
     17 class Window;
     18 }  // namespace aura
     19 
     20 namespace ui {
     21 class Layer;
     22 }  // namespace ui
     23 
     24 namespace ash {
     25 namespace internal {
     26 
     27 // OutputConfiguratorAnimation provides the visual effects for
     28 // chromeos::OutputConfigurator, such like fade-out/in during changing
     29 // the display mode.
     30 class ASH_EXPORT OutputConfiguratorAnimation
     31     : public chromeos::OutputConfigurator::Observer {
     32  public:
     33   OutputConfiguratorAnimation();
     34   virtual ~OutputConfiguratorAnimation();
     35 
     36   // Starts the fade-out animation for the all root windows.  It will
     37   // call |callback| once all of the animations have finished.
     38   void StartFadeOutAnimation(base::Closure callback);
     39 
     40   // Starts the animation to clear the fade-out animation effect
     41   // for the all root windows.
     42   void StartFadeInAnimation();
     43 
     44  protected:
     45   // chromeos::OutputConfigurator::Observer overrides:
     46   virtual void OnDisplayModeChanged(
     47       const std::vector<chromeos::OutputConfigurator::OutputSnapshot>& outputs)
     48       OVERRIDE;
     49   virtual void OnDisplayModeChangeFailed(
     50       chromeos::OutputState failed_new_state) OVERRIDE;
     51 
     52  private:
     53   // Clears all hiding layers.  Note that in case that this method is called
     54   // during an animation, the method call will cancel all of the animations
     55   // and *not* call the registered callback.
     56   void ClearHidingLayers();
     57 
     58   std::map<aura::Window*, ui::Layer*> hiding_layers_;
     59   scoped_ptr<base::OneShotTimer<OutputConfiguratorAnimation> > timer_;
     60 
     61   DISALLOW_COPY_AND_ASSIGN(OutputConfiguratorAnimation);
     62 };
     63 
     64 }  // namespace internal
     65 }  // namespace ash
     66 
     67 #endif  // ASH_DISPLAY_OUTPUT_CONFIGURATION_CONTROLLER_H_
     68