Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / ash / display / mirror_window_controller.h
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   ~MirrorWindowController() override;
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   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_