• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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