| /* | |
| * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. | |
| * | |
| * Use of this source code is governed by a BSD-style license | |
| * that can be found in the LICENSE file in the root of the source | |
| * tree. An additional intellectual property rights grant can be found | |
| * in the file PATENTS. All contributing project authors may | |
| * be found in the AUTHORS file in the root of the source tree. | |
| */ | |
| #ifndef MODULES_DESKTOP_CAPTURE_MOUSE_CURSOR_MONITOR_H_ | |
| #define MODULES_DESKTOP_CAPTURE_MOUSE_CURSOR_MONITOR_H_ | |
| #include <memory> | |
| #include "modules/desktop_capture/desktop_capture_types.h" | |
| #include "modules/desktop_capture/desktop_geometry.h" | |
| #include "rtc_base/system/rtc_export.h" | |
| namespace webrtc { | |
| class DesktopCaptureOptions; | |
| class DesktopFrame; | |
| class MouseCursor; | |
| // Captures mouse shape and position. | |
| class MouseCursorMonitor { | |
| public: | |
| // Deprecated: CursorState will not be provided. | |
| enum CursorState { | |
| // Cursor on top of the window including window decorations. | |
| INSIDE, | |
| // Cursor is outside of the window. | |
| OUTSIDE, | |
| }; | |
| enum Mode { | |
| // Capture only shape of the mouse cursor, but not position. | |
| SHAPE_ONLY, | |
| // Capture both, mouse cursor shape and position. | |
| SHAPE_AND_POSITION, | |
| }; | |
| // Callback interface used to pass current mouse cursor position and shape. | |
| class Callback { | |
| public: | |
| // Called in response to Capture() when the cursor shape has changed. Must | |
| // take ownership of `cursor`. | |
| virtual void OnMouseCursor(MouseCursor* cursor) = 0; | |
| // Called in response to Capture(). `position` indicates cursor position | |
| // relative to the `window` specified in the constructor. | |
| // Deprecated: use the following overload instead. | |
| virtual void OnMouseCursorPosition(CursorState /* state */, | |
| const DesktopVector& /* position */) {} | |
| // Called in response to Capture(). `position` indicates cursor absolute | |
| // position on the system in fullscreen coordinate, i.e. the top-left | |
| // monitor always starts from (0, 0). | |
| // The coordinates of the position is controlled by OS, but it's always | |
| // consistent with DesktopFrame.rect().top_left(). | |
| // TODO(zijiehe): Ensure all implementations return the absolute position. | |
| // TODO(zijiehe): Current this overload works correctly only when capturing | |
| // mouse cursor against fullscreen. | |
| virtual void OnMouseCursorPosition(const DesktopVector& /* position */) {} | |
| protected: | |
| virtual ~Callback() {} | |
| }; | |
| virtual ~MouseCursorMonitor() {} | |
| // Creates a capturer that notifies of mouse cursor events while the cursor is | |
| // over the specified window. | |
| // | |
| // Deprecated: use Create() function. | |
| static MouseCursorMonitor* CreateForWindow( | |
| const DesktopCaptureOptions& options, | |
| WindowId window); | |
| // Creates a capturer that monitors the mouse cursor shape and position over | |
| // the specified screen. | |
| // | |
| // Deprecated: use Create() function. | |
| static RTC_EXPORT MouseCursorMonitor* CreateForScreen( | |
| const DesktopCaptureOptions& options, | |
| ScreenId screen); | |
| // Creates a capturer that monitors the mouse cursor shape and position across | |
| // the entire desktop. The capturer ensures that the top-left monitor starts | |
| // from (0, 0). | |
| static RTC_EXPORT std::unique_ptr<MouseCursorMonitor> Create( | |
| const DesktopCaptureOptions& options); | |
| // Initializes the monitor with the `callback`, which must remain valid until | |
| // capturer is destroyed. | |
| virtual void Init(Callback* callback, Mode mode) = 0; | |
| // Captures current cursor shape and position (depending on the `mode` passed | |
| // to Init()). Calls Callback::OnMouseCursor() if cursor shape has | |
| // changed since the last call (or when Capture() is called for the first | |
| // time) and then Callback::OnMouseCursorPosition() if mode is set to | |
| // SHAPE_AND_POSITION. | |
| virtual void Capture() = 0; | |
| }; | |
| } // namespace webrtc | |
| #endif // MODULES_DESKTOP_CAPTURE_MOUSE_CURSOR_MONITOR_H_ |