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 16namespace aura { 17class Window; 18} 19 20namespace ui { 21class Reflector; 22} 23 24namespace ash { 25class AshWindowTreeHost; 26class DisplayInfo; 27class RootWindowTransformer; 28 29namespace test{ 30class 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. 36class 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