Index: ash/wm/workspace/desktop_background_fade_controller.h |
diff --git a/ash/wm/workspace/desktop_background_fade_controller.h b/ash/wm/workspace/desktop_background_fade_controller.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..3cc0137da6f53e7342ff836e7801c932d4db4d70 |
--- /dev/null |
+++ b/ash/wm/workspace/desktop_background_fade_controller.h |
@@ -0,0 +1,68 @@ |
+// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef ASH_WM_WORKSPACE_DESKTOP_BACKGROUND_FADE_CONTROLLER_H_ |
+#define ASH_WM_WORKSPACE_DESKTOP_BACKGROUND_FADE_CONTROLLER_H_ |
+ |
+#include "ash/ash_export.h" |
+#include "base/basictypes.h" |
+#include "base/memory/scoped_ptr.h" |
+#include "ui/compositor/layer_animation_observer.h" |
+ |
+namespace aura { |
+class Window; |
+} |
+ |
+namespace base { |
+class TimeDelta; |
+} |
+ |
+namespace ash { |
+namespace internal { |
+ |
+class ColoredWindowController; |
+ |
+// DesktopBackgroundFadeController handles fading in or out the desktop. It is |
+// used when maximizing or restoring a window. It is implemented as a colored |
+// layer whose opacity varies. This results in fading in or out all the windows |
+// the DesktopBackgroundFadeController is placed on top of. This is used |
+// instead of varying the opacity for two reasons: |
+// . The window showing background and the desktop workspace do not have a |
+// common parent that can be animated. This could be fixed, but wouldn't |
+// address the following. |
+// . When restoring the window is moved back to the desktop workspace. If we |
+// animated the opacity of the desktop workspace the cross fade would be |
+// effected. |
+class ASH_EXPORT DesktopBackgroundFadeController |
+ : public ui::ImplicitAnimationObserver { |
+ public: |
+ // Direction to fade. |
+ enum Direction { |
+ FADE_IN, |
+ FADE_OUT, |
+ }; |
+ |
+ // Creates a new DesktopBackgroundFadeController. |parent| is the Window to |
+// parent the newly created window to. The newly created window is stacked |
+// directly on top of |position_above|. The window animating the fade is |
+// destroyed as soon as the animation completes. |
+ DesktopBackgroundFadeController(aura::Window* parent, |
+ aura::Window* position_above, |
+ base::TimeDelta duration, |
+ Direction direction); |
+ virtual ~DesktopBackgroundFadeController(); |
+ |
+ private: |
+ // ImplicitAnimationObserver overrides: |
+ virtual void OnImplicitAnimationsCompleted() OVERRIDE; |
+ |
+ scoped_ptr<ColoredWindowController> window_controller_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(DesktopBackgroundFadeController); |
+}; |
+ |
+} // namespace internal |
+} // namespace ash |
+ |
+#endif // ASH_WM_WORKSPACE_DESKTOP_BACKGROUND_FADE_CONTROLLER_H_ |