Home | History | Annotate | Download | only in display
      1 // Copyright 2014 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_CURSOR_WINDOW_CONTROLLER_H_
      6 #define ASH_DISPLAY_CURSOR_WINDOW_CONTROLLER_H_
      7 
      8 #include "ui/aura/window.h"
      9 #include "ui/base/cursor/cursor.h"
     10 #include "ui/gfx/display.h"
     11 
     12 namespace ash {
     13 namespace test {
     14 class MirrorWindowTestApi;
     15 }
     16 
     17 class CursorWindowDelegate;
     18 
     19 // Draws a mouse cursor on a given container window.
     20 // When cursor compositing is disabled, CursorWindowController is responsible
     21 // to scale and rotate the mouse cursor bitmap to match settings of the
     22 // primary display.
     23 // When cursor compositing is enabled, just draw the cursor as-is.
     24 class CursorWindowController {
     25  public:
     26   CursorWindowController();
     27   ~CursorWindowController();
     28 
     29   bool is_cursor_compositing_enabled() const {
     30     return is_cursor_compositing_enabled_;
     31   }
     32 
     33   // Sets cursor compositing mode on/off.
     34   void SetCursorCompositingEnabled(bool enabled);
     35 
     36   // Updates the container window for the cursor window controller.
     37   void UpdateContainer();
     38 
     39   // Sets the display on which to draw cursor.
     40   // Only applicable when cursor compositing is enabled.
     41   void SetDisplay(const gfx::Display& display);
     42 
     43   // Sets cursor location, shape, set and visibility.
     44   void UpdateLocation();
     45   void SetCursor(gfx::NativeCursor cursor);
     46   void SetCursorSet(ui::CursorSetType);
     47   void SetVisibility(bool visible);
     48 
     49  private:
     50   friend class test::MirrorWindowTestApi;
     51 
     52   // Sets the container window for the cursor window controller.
     53   // Closes the cursor window if |container| is NULL.
     54   void SetContainer(aura::Window* container);
     55 
     56   // Sets the bounds of the container in screen coordinates.
     57   void SetBoundsInScreen(const gfx::Rect& bounds);
     58 
     59   // Updates cursor image based on current cursor state.
     60   void UpdateCursorImage();
     61 
     62   bool is_cursor_compositing_enabled_;
     63   aura::Window* container_;
     64 
     65   // The bounds of the container in screen coordinates.
     66   gfx::Rect bounds_in_screen_;
     67 
     68   // The native_type of the cursor, see definitions in cursor.h
     69   int cursor_type_;
     70 
     71   ui::CursorSetType cursor_set_;
     72   gfx::Display::Rotation cursor_rotation_;
     73   gfx::Point hot_point_;
     74 
     75   // The display on which the cursor is drawn.
     76   // For mirroring mode, the display is always the primary display.
     77   gfx::Display display_;
     78 
     79   scoped_ptr<aura::Window> cursor_window_;
     80   scoped_ptr<CursorWindowDelegate> delegate_;
     81 
     82   DISALLOW_COPY_AND_ASSIGN(CursorWindowController);
     83 };
     84 
     85 }  // namespace ash
     86 
     87 #endif  // ASH_DISPLAY_CURSOR_WINDOW_CONTROLLER_H_
     88