Index: ui/aura_shell/workspace/workspace.h |
diff --git a/ui/aura_shell/workspace/workspace.h b/ui/aura_shell/workspace/workspace.h |
index 136c88bc24ee9dfef4a62e3ef880edaa081e94cf..d04060edd6db5165201c8b56e6f954c94e4aa9fa 100644 |
--- a/ui/aura_shell/workspace/workspace.h |
+++ b/ui/aura_shell/workspace/workspace.h |
@@ -32,6 +32,12 @@ class AURA_SHELL_EXPORT Workspace { |
explicit Workspace(WorkspaceManager* manager); |
virtual ~Workspace(); |
+ // Specifies the direction to shift windows in |ShiftWindows()|. |
+ enum ShiftDirection { |
+ SHIFT_TO_RIGHT, |
+ SHIFT_TO_LEFT |
+ }; |
+ |
// Returns true if this workspace has no windows. |
bool is_empty() const { return windows_.empty(); } |
@@ -49,23 +55,48 @@ class AURA_SHELL_EXPORT Workspace { |
// failed. |
bool AddWindowAfter(aura::Window* window, aura::Window* after); |
- // Removes the |window| from this workspace. |
+ // Removes |window| from this workspace. |
void RemoveWindow(aura::Window* window); |
- // Return true if this workspace has the |window|. |
+ // Return true if this workspace has |window|. |
bool Contains(aura::Window* window) const; |
+ // Returns a window to rotate to based on |position|. |
+ aura::Window* FindRotateWindowForLocation(const gfx::Point& position); |
+ |
+ // Rotates the windows by removing |source| and inserting it to the |
+ // position that |target| was in. It re-layouts windows except for |source|. |
+ void RotateWindows(aura::Window* source, aura::Window* target); |
+ |
+ // Shift the windows in the workspace by inserting |window| until it |
+ // reaches |until|. If |direction| is |SHIFT_TO_RIGHT|, |insert| is |
+ // inserted at the position of |target| or at the beginning if |
+ // |target| is NULL. If |direction| is |SHIFT_TO_LEFT|, |insert| is |
+ // inserted after the position of |target|, or at the end if |
+ // |target| is NULL. It returns the window that is overflowed by |
+ // shifting, or NULL if shifting stopped at |until|. |
+ aura::Window* ShiftWindows(aura::Window* insert, |
+ aura::Window* until, |
+ aura::Window* target, |
+ ShiftDirection direction); |
+ |
// Activates this workspace. |
void Activate(); |
- // Layout windows. Moving animation is applied to all windows except |
- // for the window specified by |no_animation|. |
- void Layout(aura::Window* no_animation); |
+ // Layout windows. The workspace doesn't set bounds on |ignore| if it's |
+ // given. It still uses |ignore| window's bounds to calculate |
+ // bounds for other windows. Moving animation is applied to all |
+ // windows except for the window specified by |no_animation| and |ignore|. |
+ void Layout(aura::Window* ignore, aura::Window* no_animation); |
private: |
FRIEND_TEST_ALL_PREFIXES(WorkspaceTest, WorkspaceBasic); |
+ FRIEND_TEST_ALL_PREFIXES(WorkspaceTest, RotateWindows); |
+ FRIEND_TEST_ALL_PREFIXES(WorkspaceTest, ShiftWindowsSingle); |
+ FRIEND_TEST_ALL_PREFIXES(WorkspaceTest, ShiftWindowsMultiple); |
+ FRIEND_TEST_ALL_PREFIXES(WorkspaceManagerTest, RotateWindows); |
- // Returns the index in layout order of the |window| in this workspace. |
+ // Returns the index in layout order of |window| in this workspace. |
int GetIndexOf(aura::Window* window) const; |
// Returns true if the given |window| can be added to this workspace. |
@@ -77,6 +108,14 @@ class AURA_SHELL_EXPORT Workspace { |
const gfx::Point& origin, |
bool animate); |
+ // Returns the sum of all window's width. |
+ int GetTotalWindowsWidth() const; |
+ |
+ // Test only: Changes how may windows workspace can have. |
+ // Returns the current value so that it can be reverted back to |
+ // original value. |
+ static size_t SetMaxWindowsCount(size_t max); |
+ |
WorkspaceManager* workspace_manager_; |
gfx::Rect bounds_; |