1 // Copyright 2013 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_WM_OVERVIEW_WINDOW_SELECTOR_ITEM_H_ 6 #define ASH_WM_OVERVIEW_WINDOW_SELECTOR_ITEM_H_ 7 8 #include "base/compiler_specific.h" 9 #include "ui/gfx/rect.h" 10 11 namespace aura { 12 class Window; 13 } 14 15 namespace ash { 16 17 // This class represents an item in overview mode. An item can have one or more 18 // windows, of which only one can be activated by keyboard (i.e. alt+tab) but 19 // any can be selected with a pointer (touch or mouse). 20 class WindowSelectorItem { 21 public: 22 WindowSelectorItem(); 23 virtual ~WindowSelectorItem(); 24 25 // Returns the root window on which this item is shown. 26 virtual aura::Window* GetRootWindow() = 0; 27 28 // Returns true if the window selector item has |window| as a selectable 29 // window. 30 virtual bool HasSelectableWindow(const aura::Window* window) = 0; 31 32 // Returns the targeted window given the event |target| window. 33 // Returns NULL if no Window in this item was selected. 34 virtual aura::Window* TargetedWindow(const aura::Window* target) = 0; 35 36 // Restores |window| on exiting window overview rather than returning it 37 // to its previous state. 38 virtual void RestoreWindowOnExit(aura::Window* window) = 0; 39 40 // Returns the |window| to activate on selecting of this item. 41 virtual aura::Window* SelectionWindow() = 0; 42 43 // Removes |window| from this item. Check empty() after calling this to see 44 // if the entire item is now empty. 45 virtual void RemoveWindow(const aura::Window* window) = 0; 46 47 // Returns true if this item has no more selectable windows (i.e. after 48 // calling RemoveWindow for the last contained window). 49 virtual bool empty() const = 0; 50 51 // Dispatched before beginning window overview. This will do any necessary 52 // one time actions such as restoring minimized windows. 53 virtual void PrepareForOverview() = 0; 54 55 // Sets the bounds of this window selector item to |target_bounds| in the 56 // |root_window| root window. 57 void SetBounds(aura::Window* root_window, 58 const gfx::Rect& target_bounds); 59 60 // Recomputes the positions for the windows in this selection item. This is 61 // dispatched when the bounds of a window change. 62 void RecomputeWindowTransforms(); 63 64 const gfx::Rect& bounds() { return bounds_; } 65 const gfx::Rect& target_bounds() { return target_bounds_; } 66 67 protected: 68 // Sets the bounds of this selector item to |target_bounds| in |root_window|. 69 // If |animate| the windows are animated from their current location. 70 virtual void SetItemBounds(aura::Window* root_window, 71 const gfx::Rect& target_bounds, 72 bool animate) = 0; 73 74 // Sets the bounds used by the selector item's windows. 75 void set_bounds(const gfx::Rect& bounds) { bounds_ = bounds; } 76 77 private: 78 // The root window this item is being displayed on. 79 aura::Window* root_window_; 80 81 // The target bounds this selector item is fit within. 82 gfx::Rect target_bounds_; 83 84 // The actual bounds of the window(s) for this item. The aspect ratio of 85 // window(s) are maintained so they may not fill the target_bounds_. 86 gfx::Rect bounds_; 87 88 // True if running SetItemBounds. This prevents recursive calls resulting from 89 // the bounds update when calling views::corewm::RecreateWindowLayers to copy 90 // a window layer for display on another monitor. 91 bool in_bounds_update_; 92 93 DISALLOW_COPY_AND_ASSIGN(WindowSelectorItem); 94 }; 95 96 } // namespace ash 97 98 #endif // ASH_WM_OVERVIEW_WINDOW_SELECTOR_ITEM_H_ 99