blob: 2dd793179b544cba99a5c6343286976973e69e23 [file] [log] [blame]
sergeyu@chromium.org2767b532013-10-16 02:42:38 +00001/*
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
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020011#ifndef MODULES_DESKTOP_CAPTURE_MOUSE_CURSOR_H_
12#define MODULES_DESKTOP_CAPTURE_MOUSE_CURSOR_H_
sergeyu@chromium.org2767b532013-10-16 02:42:38 +000013
kwiberg2bb3afa2016-03-16 15:58:08 -070014#include <memory>
15
Yves Gerey3e707812018-11-28 16:47:49 +010016#include "modules/desktop_capture/desktop_frame.h"
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020017#include "modules/desktop_capture/desktop_geometry.h"
Mirko Bonadei66e76792019-04-02 11:33:59 +020018#include "rtc_base/system/rtc_export.h"
sergeyu@chromium.org2767b532013-10-16 02:42:38 +000019
20namespace webrtc {
21
Mirko Bonadei66e76792019-04-02 11:33:59 +020022class RTC_EXPORT MouseCursor {
sergeyu@chromium.org2767b532013-10-16 02:42:38 +000023 public:
sergeyu@chromium.org8ae72562013-12-18 02:18:01 +000024 MouseCursor();
25
Artem Titovcec43432021-07-28 23:35:39 +020026 // Takes ownership of `image`. `hotspot` must be within `image` boundaries.
sergeyu@chromium.org2767b532013-10-16 02:42:38 +000027 MouseCursor(DesktopFrame* image, const DesktopVector& hotspot);
sergeyu@chromium.org8ae72562013-12-18 02:18:01 +000028
sergeyu@chromium.org2767b532013-10-16 02:42:38 +000029 ~MouseCursor();
30
Byoungchan Lee604fd2f2022-01-21 09:49:39 +090031 MouseCursor(const MouseCursor&) = delete;
32 MouseCursor& operator=(const MouseCursor&) = delete;
33
sergeyu@chromium.org2df89c02013-10-17 19:47:18 +000034 static MouseCursor* CopyOf(const MouseCursor& cursor);
35
sergeyu@chromium.org8ae72562013-12-18 02:18:01 +000036 void set_image(DesktopFrame* image) { image_.reset(image); }
37 const DesktopFrame* image() const { return image_.get(); }
38
Yves Gerey665174f2018-06-19 15:03:05 +020039 void set_hotspot(const DesktopVector& hotspot) { hotspot_ = hotspot; }
sergeyu@chromium.org2df89c02013-10-17 19:47:18 +000040 const DesktopVector& hotspot() const { return hotspot_; }
sergeyu@chromium.org2767b532013-10-16 02:42:38 +000041
42 private:
kwiberg2bb3afa2016-03-16 15:58:08 -070043 std::unique_ptr<DesktopFrame> image_;
sergeyu@chromium.org2767b532013-10-16 02:42:38 +000044 DesktopVector hotspot_;
sergeyu@chromium.org2767b532013-10-16 02:42:38 +000045};
46
47} // namespace webrtc
48
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020049#endif // MODULES_DESKTOP_CAPTURE_MOUSE_CURSOR_H_