Index: ash/wm/workspace/workspace_manager2.h |
diff --git a/ash/wm/workspace/workspace_manager2.h b/ash/wm/workspace/workspace_manager2.h |
index 1cd1b0c13070b5a75b2a75906ef251421c1686b0..a280e986ccc408f67a6f9bce11c5cfabcce0f455 100644 |
--- a/ash/wm/workspace/workspace_manager2.h |
+++ b/ash/wm/workspace/workspace_manager2.h |
@@ -23,6 +23,10 @@ namespace aura { |
class Window; |
} |
+namespace base { |
+class TimeDelta; |
+} |
+ |
namespace gfx { |
class Point; |
class Rect; |
@@ -35,6 +39,7 @@ class Layer; |
namespace ash { |
namespace internal { |
+class DesktopBackgroundFadeController; |
class ShelfLayoutManager; |
class WorkspaceLayoutManager2; |
class WorkspaceManagerTest2; |
@@ -77,20 +82,27 @@ class ASH_EXPORT WorkspaceManager2 |
friend class WorkspaceLayoutManager2; |
friend class WorkspaceManager2Test; |
- class LayoutManager; |
+ class LayoutManagerImpl; |
typedef std::vector<Workspace2*> Workspaces; |
- // Describes which, if any, of the workspaces should animate. NEW is the |
- // workspace that is becoming active, and OLD the workspace that was active. |
- enum AnimateType { |
- ANIMATE_NONE, |
- |
- // Animates only the new workspace in. |
- ANIMATE_NEW, |
- |
- // Animates both the old and new workspaces. |
- ANIMATE_OLD_AND_NEW, |
+ // Reason for the workspace switch. Used to determine the characterstics of |
+ // the animation. |
+ enum SwitchReason { |
+ SWITCH_WINDOW_MADE_ACTIVE, |
+ SWITCH_WINDOW_REMOVED, |
+ SWITCH_VISIBILITY_CHANGED, |
+ SWITCH_MINIMIZED, |
+ SWITCH_MAXIMIZED_OR_RESTORED, |
+ SWITCH_TRACKED_BY_WORKSPACE_CHANGED, |
+ |
+ // Switch as the result of DoInitialAnimation(). This isn't a real switch, |
+ // rather we run the animations as if a switch occurred. |
+ SWITCH_INITIAL, |
+ |
+ // Edge case. See comment in OnWorkspaceWindowShowStateChanged(). Don't |
+ // make other types randomly use this! |
+ SWITCH_OTHER, |
}; |
// Updates the visibility and whether any windows overlap the shelf. |
@@ -100,7 +112,9 @@ class ASH_EXPORT WorkspaceManager2 |
Workspace2* FindBy(aura::Window* window) const; |
// Sets the active workspace. |
- void SetActiveWorkspace(Workspace2* workspace, AnimateType animate_type); |
+ void SetActiveWorkspace(Workspace2* workspace, |
+ SwitchReason reason, |
+ base::TimeDelta duration); |
// Returns the bounds of the work area. |
gfx::Rect GetWorkAreaBounds() const; |
@@ -121,14 +135,14 @@ class ASH_EXPORT WorkspaceManager2 |
// |pending_workspaces_|. |
void MoveWorkspaceToPendingOrDelete(Workspace2* workspace, |
aura::Window* stack_beneath, |
- AnimateType animate_type); |
+ SwitchReason reason); |
// Moves the children of |window| to the desktop. This excludes certain |
// windows. If |stack_beneath| is non-NULL the windows are stacked beneath it. |
void MoveChildrenToDesktop(aura::Window* window, aura::Window* stack_beneath); |
// Selects the next workspace. |
- void SelectNextWorkspace(AnimateType animate_type); |
+ void SelectNextWorkspace(SwitchReason reason); |
// Schedules |workspace| for deletion when it no longer contains any layers. |
// See comments above |to_delete_| as to why we do this. |
@@ -141,6 +155,27 @@ class ASH_EXPORT WorkspaceManager2 |
// Sets |unminimizing_workspace_| to |workspace|. |
void SetUnminimizingWorkspace(Workspace2* workspace); |
+ // Fades the desktop. This is only used when maximizing or restoring a |
+ // window. The actual fade is handled by |
+ // DesktopBackgroundFadeController. |window| is used when restoring and |
+ // indicates the window to stack the DesktopBackgroundFadeController's window |
+ // above. |
+ void FadeDesktop(aura::Window* window, base::TimeDelta duration); |
+ |
+ // Shows or hides the desktop Window |window|. |
+ void ShowOrHideDesktopBackground(aura::Window* window, |
+ SwitchReason reason, |
+ base::TimeDelta duration, |
+ bool show) const; |
+ |
+ // Shows/hides |workspace| animating as necessary. |
+ void ShowWorkspace(Workspace2* workspace, |
+ Workspace2* last_active, |
+ SwitchReason reason) const; |
+ void HideWorkspace(Workspace2* workspace, |
+ SwitchReason reason, |
+ bool is_unminimizing_maximized_window) const; |
+ |
// These methods are forwarded from the LayoutManager installed on the |
// Workspace's window. |
void OnWindowAddedToWorkspace(Workspace2* workspace, aura::Window* child); |
@@ -203,8 +238,11 @@ class ASH_EXPORT WorkspaceManager2 |
// animation). |
bool app_terminating_; |
- // If non-empty this is the amount of time animating the desktop in/out. |
- base::TimeDelta switch_duration_; |
+ scoped_ptr<DesktopBackgroundFadeController> desktop_fade_controller_; |
+ |
+ // Set to true while in the process of creating a |
+ // DesktopBackgroundFadeController. |
+ bool creating_fade_; |
DISALLOW_COPY_AND_ASSIGN(WorkspaceManager2); |
}; |