cursor_window_controller.h revision 5c02ac1a9c1b504631c0a3d2b6e737b5d738bae1
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
12namespace ash {
13namespace test {
14class MirrorWindowTestApi;
15}
16
17class 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.
24class 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