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