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/root_window_observer.h"
     13 #include "ui/gfx/display.h"
     14 #include "ui/gfx/native_widget_types.h"
     15 #include "ui/gfx/point.h"
     16 #include "ui/gfx/size.h"
     17 
     18 namespace aura {
     19 class RootWindow;
     20 class RootWindowTransformer;
     21 class Window;
     22 }
     23 
     24 namespace ui {
     25 class Reflector;
     26 }
     27 
     28 namespace ash {
     29 namespace test{
     30 class MirrorWindowTestApi;
     31 }
     32 
     33 namespace internal {
     34 class DisplayInfo;
     35 class CursorWindowDelegate;
     36 
     37 // An object that copies the content of the primary root window to a
     38 // mirror window. This also draws a mouse cursor as the mouse cursor
     39 // is typically drawn by the window system.
     40 class ASH_EXPORT MirrorWindowController : public aura::RootWindowObserver {
     41  public:
     42   MirrorWindowController();
     43   virtual ~MirrorWindowController();
     44 
     45   // Updates the root window's bounds using |display_info|.
     46   // Creates the new root window if one doesn't exist.
     47   void UpdateWindow(const DisplayInfo& display_info);
     48 
     49   // Same as above, but using existing display info
     50   // for the mirrored display.
     51   void UpdateWindow();
     52 
     53   // Close the mirror window.
     54   void Close();
     55 
     56   // Updates the mirrored cursor location,shape and
     57   // visibility.
     58   void UpdateCursorLocation();
     59   void SetMirroredCursor(gfx::NativeCursor cursor);
     60   void SetMirroredCursorVisibility(bool visible);
     61 
     62   // aura::RootWindowObserver overrides:
     63   virtual void OnRootWindowHostResized(const aura::RootWindow* root) OVERRIDE;
     64 
     65  private:
     66   friend class test::MirrorWindowTestApi;
     67 
     68   // Creates a RootWindowTransformer for current display
     69   // configuration.
     70   scoped_ptr<aura::RootWindowTransformer> CreateRootWindowTransformer() const;
     71 
     72   int current_cursor_type_;
     73   gfx::Display::Rotation current_cursor_rotation_;
     74   aura::Window* cursor_window_;  // owned by root window.
     75   scoped_ptr<aura::RootWindow> root_window_;
     76   scoped_ptr<CursorWindowDelegate> cursor_window_delegate_;
     77   gfx::Point hot_point_;
     78   gfx::Size mirror_window_host_size_;
     79   scoped_refptr<ui::Reflector> reflector_;
     80 
     81   DISALLOW_COPY_AND_ASSIGN(MirrorWindowController);
     82 };
     83 
     84 }  // namespace internal
     85 }  // namespace ash
     86 
     87 #endif  // ASH_DISPLAY_MIRROR_WINDOW_CONTROLLER_H_
     88