| Index: ash/wm/window_selector.h
|
| diff --git a/ash/wm/window_selector.h b/ash/wm/window_selector.h
|
| index 900787db4054262b3cb937a08270b3772c5fd444..92ed607eabc029d671b1ab5384a128e77978de2a 100644
|
| --- a/ash/wm/window_selector.h
|
| +++ b/ash/wm/window_selector.h
|
| @@ -8,6 +8,8 @@
|
| #include <vector>
|
|
|
| #include "base/compiler_specific.h"
|
| +#include "base/memory/scoped_ptr.h"
|
| +#include "base/memory/scoped_vector.h"
|
| #include "ui/aura/window_observer.h"
|
| #include "ui/base/events/event_handler.h"
|
| #include "ui/gfx/transform.h"
|
| @@ -16,21 +18,49 @@ namespace aura {
|
| class RootWindow;
|
| }
|
|
|
| +namespace ui {
|
| +class LocatedEvent;
|
| +}
|
| +
|
| +namespace views {
|
| +class Widget;
|
| +}
|
| +
|
| namespace ash {
|
|
|
| class WindowSelectorDelegate;
|
| +class WindowSelectorWindow;
|
|
|
| // The WindowSelector shows a grid of all of your windows and allows selecting
|
| -// a window by clicking or tapping on it.
|
| +// a window by clicking or tapping on it (OVERVIEW mode) or by alt-tabbing to
|
| +// it (CYCLE mode).
|
| class WindowSelector : public ui::EventHandler,
|
| public aura::WindowObserver {
|
| public:
|
| + enum Direction {
|
| + FORWARD,
|
| + BACKWARD
|
| + };
|
| + enum Mode {
|
| + CYCLE,
|
| + OVERVIEW
|
| + };
|
| +
|
| typedef std::vector<aura::Window*> WindowList;
|
|
|
| WindowSelector(const WindowList& windows,
|
| + Mode mode,
|
| WindowSelectorDelegate* delegate);
|
| virtual ~WindowSelector();
|
|
|
| + // Step to the next window in |direction|.
|
| + void Step(Direction direction);
|
| +
|
| + // Select the current window.
|
| + void SelectWindow();
|
| +
|
| + Mode mode() { return mode_; }
|
| +
|
| // ui::EventHandler:
|
| virtual void OnEvent(ui::Event* event) OVERRIDE;
|
| virtual void OnMouseEvent(ui::MouseEvent* event) OVERRIDE;
|
| @@ -40,37 +70,48 @@ class WindowSelector : public ui::EventHandler,
|
| virtual void OnWindowDestroyed(aura::Window* window) OVERRIDE;
|
|
|
| private:
|
| - struct WindowDetails {
|
| - WindowDetails() : window(NULL), minimized(false) {}
|
| -
|
| - bool operator==(const aura::Window* other_window) const {
|
| - return window == other_window;
|
| - }
|
| + // Returns the target of |event| or NULL if the event is not targeted at
|
| + // any of the windows in the selector.
|
| + WindowSelectorWindow* GetEventTarget(ui::LocatedEvent* event);
|
|
|
| - // A weak pointer to the window.
|
| - aura::Window* window;
|
| + // Handles a selection event for |target|.
|
| + void HandleSelectionEvent(WindowSelectorWindow* target);
|
|
|
| - // If true, the window was minimized and this should be restored if the
|
| - // window was not selected.
|
| - bool minimized;
|
| + // Position all of the windows based on the current selection mode.
|
| + void PositionWindows();
|
| + // Position all of the windows from |root_window| on |root_window|.
|
| + void PositionWindowsFromRoot(aura::RootWindow* root_window);
|
| + // Position all of the |windows| to fit on the |root_window|.
|
| + void PositionWindowsOnRoot(aura::RootWindow* root_window,
|
| + const std::vector<WindowSelectorWindow*>& windows);
|
|
|
| - // The original transform of the window before entering overview mode.
|
| - gfx::Transform original_transform;
|
| - };
|
| + void InitializeSelectionWidget();
|
|
|
| - void HandleSelectionEvent(ui::Event* event);
|
| - void PositionWindows();
|
| - void PositionWindowsOnRoot(aura::RootWindow* root_window);
|
| + // Updates the selection widget's location to the currently selected window.
|
| + // If |animate| the transition to the new location is animated.
|
| + void UpdateSelectionLocation(bool animate);
|
|
|
| - void SelectWindow(aura::Window*);
|
| + // The collection of windows in the overview wrapped by a helper class which
|
| + // restores their state and helps transform them to other root windows.
|
| + ScopedVector<WindowSelectorWindow> windows_;
|
|
|
| - // List of weak pointers of windows to select from.
|
| - std::vector<WindowDetails> windows_;
|
| + // The window selection mode.
|
| + Mode mode_;
|
|
|
| // Weak pointer to the selector delegate which will be called when a
|
| // selection is made.
|
| WindowSelectorDelegate* delegate_;
|
|
|
| + // Index of the currently selected window if the mode is CYCLE.
|
| + size_t selected_window_;
|
| +
|
| + // Widget indicating which window is currently selected.
|
| + scoped_ptr<views::Widget> selection_widget_;
|
| +
|
| + // In CYCLE mode, the root window in which selection is taking place.
|
| + // NULL otherwise.
|
| + aura::RootWindow* selection_root_;
|
| +
|
| DISALLOW_COPY_AND_ASSIGN(WindowSelector);
|
| };
|
|
|
|
|