| // Copyright 2013 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_OVERVIEW_WINDOW_SELECTOR_ITEM_H_ |
| #define ASH_WM_OVERVIEW_WINDOW_SELECTOR_ITEM_H_ |
| |
| #include "base/compiler_specific.h" |
| #include "ui/gfx/rect.h" |
| |
| namespace aura { |
| class Window; |
| } |
| |
| namespace ash { |
| |
| // This class represents an item in overview mode. An item can have one or more |
| // windows, of which only one can be activated by keyboard (i.e. alt+tab) but |
| // any can be selected with a pointer (touch or mouse). |
| class WindowSelectorItem { |
| public: |
| WindowSelectorItem(); |
| virtual ~WindowSelectorItem(); |
| |
| // Returns the root window on which this item is shown. |
| virtual aura::Window* GetRootWindow() = 0; |
| |
| // Returns the targeted window given the event |target| window. |
| // Returns NULL if no Window in this item was selected. |
| virtual aura::Window* TargetedWindow(const aura::Window* target) = 0; |
| |
| // Restores |window| on exiting window overview rather than returning it |
| // to its previous state. |
| virtual void RestoreWindowOnExit(aura::Window* window) = 0; |
| |
| // Returns the |window| to activate on selecting of this item. |
| virtual aura::Window* SelectionWindow() = 0; |
| |
| // Removes |window| from this item. Check empty() after calling this to see |
| // if the entire item is now empty. |
| virtual void RemoveWindow(const aura::Window* window) = 0; |
| |
| // Returns true if this item has no more selectable windows (i.e. after |
| // calling RemoveWindow for the last contained window). |
| virtual bool empty() const = 0; |
| |
| // Dispatched before beginning window overview. This will do any necessary |
| // one time actions such as restoring minimized windows. |
| virtual void PrepareForOverview() = 0; |
| |
| // Sets the bounds of this window selector item to |target_bounds| in the |
| // |root_window| root window. |
| void SetBounds(aura::Window* root_window, |
| const gfx::Rect& target_bounds); |
| |
| // Recomputes the positions for the windows in this selection item. This is |
| // dispatched when the bounds of a window change. |
| void RecomputeWindowTransforms(); |
| |
| const gfx::Rect& bounds() { return bounds_; } |
| const gfx::Rect& target_bounds() { return target_bounds_; } |
| |
| protected: |
| // Sets the bounds of this selector item to |target_bounds| in |root_window|. |
| // If |animate| the windows are animated from their current location. |
| virtual void SetItemBounds(aura::Window* root_window, |
| const gfx::Rect& target_bounds, |
| bool animate) = 0; |
| |
| // Sets the bounds used by the selector item's windows. |
| void set_bounds(const gfx::Rect& bounds) { bounds_ = bounds; } |
| |
| private: |
| // The root window this item is being displayed on. |
| aura::Window* root_window_; |
| |
| // The target bounds this selector item is fit within. |
| gfx::Rect target_bounds_; |
| |
| // The actual bounds of the window(s) for this item. The aspect ratio of |
| // window(s) are maintained so they may not fill the target_bounds_. |
| gfx::Rect bounds_; |
| |
| // True if running SetItemBounds. This prevents recursive calls resulting from |
| // the bounds update when calling views::corewm::RecreateWindowLayers to copy |
| // a window layer for display on another monitor. |
| bool in_bounds_update_; |
| |
| DISALLOW_COPY_AND_ASSIGN(WindowSelectorItem); |
| }; |
| |
| } // namespace ash |
| |
| #endif // ASH_WM_OVERVIEW_WINDOW_SELECTOR_ITEM_H_ |