mouse_cursor.h (2115B)
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 MODULES_DESKTOP_CAPTURE_MOUSE_CURSOR_H_ 12 #define MODULES_DESKTOP_CAPTURE_MOUSE_CURSOR_H_ 13 14 #include <memory> 15 16 #include "modules/desktop_capture/desktop_frame.h" 17 #include "modules/desktop_capture/desktop_geometry.h" 18 #include "rtc_base/system/rtc_export.h" 19 20 namespace webrtc { 21 22 class RTC_EXPORT MouseCursor { 23 public: 24 MouseCursor(); 25 26 // `hotspot` must be within `image` boundaries. 27 MouseCursor(std::unique_ptr<DesktopFrame> image, 28 const DesktopVector& hotspot); 29 30 // Deprecated. Use the overload above instead. 31 // TODO(yuweih): Remove this. 32 // Takes ownership of `image`. `hotspot` must be within `image` boundaries. 33 MouseCursor(DesktopFrame* image, const DesktopVector& hotspot); 34 35 ~MouseCursor(); 36 37 MouseCursor(const MouseCursor&) = delete; 38 MouseCursor& operator=(const MouseCursor&) = delete; 39 40 static MouseCursor* CopyOf(const MouseCursor& cursor); 41 42 void set_image(std::unique_ptr<DesktopFrame> image) { 43 image_ = std::move(image); 44 } 45 46 // Deprecated. Use the overload above instead. 47 // TODO(yuweih): Remove this. 48 // Takes ownership of `image`. 49 void set_image(DesktopFrame* image) { image_.reset(image); } 50 const DesktopFrame* image() const { return image_.get(); } 51 52 // Extracts and takes ownership of the underlying cursor image. This is 53 // useful, e.g., to share the cursor image using SharedDesktopFrame. 54 std::unique_ptr<DesktopFrame> TakeImage(); 55 56 void set_hotspot(const DesktopVector& hotspot) { hotspot_ = hotspot; } 57 const DesktopVector& hotspot() const { return hotspot_; } 58 59 private: 60 std::unique_ptr<DesktopFrame> image_; 61 DesktopVector hotspot_; 62 }; 63 64 } // namespace webrtc 65 66 #endif // MODULES_DESKTOP_CAPTURE_MOUSE_CURSOR_H_