Home | History | Annotate | Download | only in display
      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