• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 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_DISPLAY_MIRROR_WINDOW_CONTROLLER_H_
6 #define ASH_DISPLAY_MIRROR_WINDOW_CONTROLLER_H_
7 
8 #include "ash/ash_export.h"
9 #include "base/compiler_specific.h"
10 #include "base/memory/ref_counted.h"
11 #include "base/memory/scoped_ptr.h"
12 #include "ui/aura/window_tree_host_observer.h"
13 #include "ui/gfx/native_widget_types.h"
14 #include "ui/gfx/size.h"
15 
16 namespace aura {
17 class Window;
18 }
19 
20 namespace ui {
21 class Reflector;
22 }
23 
24 namespace ash {
25 class AshWindowTreeHost;
26 class DisplayInfo;
27 class RootWindowTransformer;
28 
29 namespace test{
30 class MirrorWindowTestApi;
31 }
32 
33 // An object that copies the content of the primary root window to a
34 // mirror window. This also draws a mouse cursor as the mouse cursor
35 // is typically drawn by the window system.
36 class ASH_EXPORT MirrorWindowController : public aura::WindowTreeHostObserver {
37  public:
38   MirrorWindowController();
39   virtual ~MirrorWindowController();
40 
41   // Updates the root window's bounds using |display_info|.
42   // Creates the new root window if one doesn't exist.
43   void UpdateWindow(const DisplayInfo& display_info);
44 
45   // Same as above, but using existing display info
46   // for the mirrored display.
47   void UpdateWindow();
48 
49   // Close the mirror window.
50   void Close();
51 
52   // aura::WindowTreeHostObserver overrides:
53   virtual void OnHostResized(const aura::WindowTreeHost* host) OVERRIDE;
54 
55   // Return the root window used to mirror the content. NULL if the
56   // display is not mirrored by the compositor path.
57   aura::Window* GetWindow();
58 
59  private:
60   friend class test::MirrorWindowTestApi;
61 
62   // Creates a RootWindowTransformer for current display
63   // configuration.
64   scoped_ptr<RootWindowTransformer> CreateRootWindowTransformer() const;
65 
66   scoped_ptr<AshWindowTreeHost> ash_host_;
67   gfx::Size mirror_window_host_size_;
68   scoped_refptr<ui::Reflector> reflector_;
69 
70   DISALLOW_COPY_AND_ASSIGN(MirrorWindowController);
71 };
72 
73 }  // namespace ash
74 
75 #endif  // ASH_DISPLAY_MIRROR_WINDOW_CONTROLLER_H_
76