• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *  Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
3  *
4  *  Use of this source code is governed by a BSD-style license
5  *  that can be found in the LICENSE file in the root of the source
6  *  tree. An additional intellectual property rights grant can be found
7  *  in the file PATENTS.  All contributing project authors may
8  *  be found in the AUTHORS file in the root of the source tree.
9  */
10 
11 #ifndef WEBRTC_MODULES_DESKTOP_CAPTURE_MOUSE_CURSOR_MONITOR_H_
12 #define WEBRTC_MODULES_DESKTOP_CAPTURE_MOUSE_CURSOR_MONITOR_H_
13 
14 #include "webrtc/modules/desktop_capture/desktop_capture_types.h"
15 #include "webrtc/modules/desktop_capture/desktop_geometry.h"
16 #include "webrtc/typedefs.h"
17 
18 namespace webrtc {
19 
20 class DesktopCaptureOptions;
21 class DesktopFrame;
22 class MouseCursor;
23 
24 // Captures mouse shape and position.
25 class MouseCursorMonitor {
26  public:
27   enum CursorState {
28     // Cursor on top of the window including window decorations.
29     INSIDE,
30 
31     // Cursor is outside of the window.
32     OUTSIDE,
33   };
34 
35   enum Mode {
36     // Capture only shape of the mouse cursor, but not position.
37     SHAPE_ONLY,
38 
39     // Capture both, mouse cursor shape and position.
40     SHAPE_AND_POSITION,
41   };
42 
43   // Callback interface used to pass current mouse cursor position and shape.
44   class Callback {
45    public:
46     // Called in response to Capture() when the cursor shape has changed. Must
47     // take ownership of |cursor|.
48     virtual void OnMouseCursor(MouseCursor* cursor) = 0;
49 
50     // Called in response to Capture(). |position| indicates cursor position
51     // relative to the |window| specified in the constructor.
52     virtual void OnMouseCursorPosition(CursorState state,
53                                        const DesktopVector& position) = 0;
54 
55    protected:
~Callback()56     virtual ~Callback() {}
57   };
58 
~MouseCursorMonitor()59   virtual ~MouseCursorMonitor() {}
60 
61   // Creates a capturer that notifies of mouse cursor events while the cursor is
62   // over the specified window.
63   static MouseCursorMonitor* CreateForWindow(
64       const DesktopCaptureOptions& options,
65       WindowId window);
66 
67   // Creates a capturer that monitors the mouse cursor shape and position across
68   // the entire desktop.
69   //
70   // TODO(sergeyu): Provide a way to select a specific screen.
71   static MouseCursorMonitor* CreateForScreen(
72       const DesktopCaptureOptions& options,
73       ScreenId screen);
74 
75   // Initializes the monitor with the |callback|, which must remain valid until
76   // capturer is destroyed.
77   virtual void Init(Callback* callback, Mode mode) = 0;
78 
79   // Captures current cursor shape and position (depending on the |mode| passed
80   // to Init()). Calls Callback::OnMouseCursor() if cursor shape has
81   // changed since the last call (or when Capture() is called for the first
82   // time) and then Callback::OnMouseCursorPosition() if mode is set to
83   // SHAPE_AND_POSITION.
84   virtual void Capture() = 0;
85 };
86 
87 }  // namespace webrtc
88 
89 #endif  // WEBRTC_MODULES_DESKTOP_CAPTURE_MOUSE_CURSOR_MONITOR_H_
90 
91