Home | History | Annotate | Download | only in overview
      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