15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef ASH_WM_WORKSPACE_PHANTOM_WINDOW_CONTROLLER_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define ASH_WM_WORKSPACE_PHANTOM_WINDOW_CONTROLLER_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/ash_export.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/rect.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace aura {
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Window;
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace views {
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Widget;
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ash {
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// PhantomWindowController is responsible for showing a phantom representation
245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// of a window. It's used to show a preview of how snapping or docking a window
255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// will affect the window's bounds.
265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class ASH_EXPORT PhantomWindowController {
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  explicit PhantomWindowController(aura::Window* window);
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Hides the phantom window without any animation.
315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual ~PhantomWindowController();
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
33010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Shows the phantom window and animates shrinking it to |bounds_in_screen|.
343551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  void Show(const gfx::Rect& bounds_in_screen);
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  friend class PhantomWindowControllerTest;
385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
393551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // Creates, shows and returns a phantom widget at |bounds|
403551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // with kShellWindowId_ShelfContainer in |root_window| as a parent.
415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  scoped_ptr<views::Widget> CreatePhantomWidget(
425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      aura::Window* root_window,
435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const gfx::Rect& bounds_in_screen);
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
45010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Window that the phantom window is stacked above.
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  aura::Window* window_;
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Target bounds (including the shadows if any) of the animation in screen
495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // coordinates.
505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  gfx::Rect target_bounds_in_screen_;
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
52010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Phantom representation of the window.
53010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  scoped_ptr<views::Widget> phantom_widget_;
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(PhantomWindowController);
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace ash
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // ASH_WM_WORKSPACE_PHANTOM_WINDOW_CONTROLLER_H_
61