Home | History | Annotate | Download | only in workspace
      1 // Copyright (c) 2012 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_WORKSPACE_PHANTOM_WINDOW_CONTROLLER_H_
      6 #define ASH_WM_WORKSPACE_PHANTOM_WINDOW_CONTROLLER_H_
      7 
      8 #include "ash/ash_export.h"
      9 #include "base/basictypes.h"
     10 #include "base/memory/scoped_ptr.h"
     11 #include "ui/gfx/rect.h"
     12 
     13 namespace aura {
     14 class Window;
     15 }
     16 
     17 namespace views {
     18 class Widget;
     19 }
     20 
     21 namespace ash {
     22 
     23 // PhantomWindowController is responsible for showing a phantom representation
     24 // of a window. It's used to show a preview of how snapping or docking a window
     25 // will affect the window's bounds.
     26 class ASH_EXPORT PhantomWindowController {
     27  public:
     28   explicit PhantomWindowController(aura::Window* window);
     29 
     30   // Hides the phantom window without any animation.
     31   virtual ~PhantomWindowController();
     32 
     33   // Shows the phantom window and animates shrinking it to |bounds_in_screen|.
     34   void Show(const gfx::Rect& bounds_in_screen);
     35 
     36  private:
     37   friend class PhantomWindowControllerTest;
     38 
     39   // Creates, shows and returns a phantom widget at |bounds|
     40   // with kShellWindowId_ShelfContainer in |root_window| as a parent.
     41   scoped_ptr<views::Widget> CreatePhantomWidget(
     42       aura::Window* root_window,
     43       const gfx::Rect& bounds_in_screen);
     44 
     45   // Window that the phantom window is stacked above.
     46   aura::Window* window_;
     47 
     48   // Target bounds (including the shadows if any) of the animation in screen
     49   // coordinates.
     50   gfx::Rect target_bounds_in_screen_;
     51 
     52   // Phantom representation of the window.
     53   scoped_ptr<views::Widget> phantom_widget_;
     54 
     55   DISALLOW_COPY_AND_ASSIGN(PhantomWindowController);
     56 };
     57 
     58 }  // namespace ash
     59 
     60 #endif  // ASH_WM_WORKSPACE_PHANTOM_WINDOW_CONTROLLER_H_
     61