This change adds one temporary use_desktop_relative_cursor_position_ flag in DesktopAndCursorComposer. It's automatically set according to the consturctor used. When the flag is true, DesktopAndCursorComposer uses the newly added MouseCursorMonitor::Callback::OnCursorPosition(), which is the absolute position of the cursor in the full desktop coordinate, and DesktopCapturer::IsOccluded() to decide whether the mouse cursor should be drawn on the DesktopFrame. When the flag is false, the behavior of DesktopAndCursorComposer is unchanged. This flag will be removed together with the deprecated constructor of DesktopAndCursorComposer. Currently the new DesktopAndCursorComposer constructor is not used, so no behavior change is expected. Bug: webrtc:7950 Change-Id: I7235e32fa325a21c4a2594613764a9f81d76dfbc Reviewed-on: https://chromium-review.googlesource.com/641075 Commit-Queue: Zijie He <zijiehe@chromium.org> Reviewed-by: Jamie Walch <jamiewalch@chromium.org> Cr-Commit-Position: refs/heads/master@{#19592}
62 lines
1.8 KiB
C++
62 lines
1.8 KiB
C++
/*
|
|
* 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.
|
|
*/
|
|
|
|
#include "webrtc/modules/desktop_capture/shared_desktop_frame.h"
|
|
|
|
#include <memory>
|
|
#include <utility>
|
|
|
|
#include "webrtc/rtc_base/constructormagic.h"
|
|
#include "webrtc/rtc_base/ptr_util.h"
|
|
|
|
namespace webrtc {
|
|
|
|
SharedDesktopFrame::~SharedDesktopFrame() {}
|
|
|
|
// static
|
|
std::unique_ptr<SharedDesktopFrame> SharedDesktopFrame::Wrap(
|
|
std::unique_ptr<DesktopFrame> desktop_frame) {
|
|
return std::unique_ptr<SharedDesktopFrame>(
|
|
new SharedDesktopFrame(new Core(std::move(desktop_frame))));
|
|
}
|
|
|
|
SharedDesktopFrame* SharedDesktopFrame::Wrap(DesktopFrame* desktop_frame) {
|
|
return Wrap(std::unique_ptr<DesktopFrame>(desktop_frame)).release();
|
|
}
|
|
|
|
DesktopFrame* SharedDesktopFrame::GetUnderlyingFrame() {
|
|
return core_->get();
|
|
}
|
|
|
|
bool SharedDesktopFrame::ShareFrameWith(const SharedDesktopFrame& other) const {
|
|
return core_->get() == other.core_->get();
|
|
}
|
|
|
|
std::unique_ptr<SharedDesktopFrame> SharedDesktopFrame::Share() {
|
|
std::unique_ptr<SharedDesktopFrame> result(new SharedDesktopFrame(core_));
|
|
result->CopyFrameInfoFrom(*this);
|
|
return result;
|
|
}
|
|
|
|
bool SharedDesktopFrame::IsShared() {
|
|
return !core_->HasOneRef();
|
|
}
|
|
|
|
SharedDesktopFrame::SharedDesktopFrame(rtc::scoped_refptr<Core> core)
|
|
: DesktopFrame((*core)->size(),
|
|
(*core)->stride(),
|
|
(*core)->data(),
|
|
(*core)->shared_memory()),
|
|
core_(core) {
|
|
CopyFrameInfoFrom(*(core_->get()));
|
|
}
|
|
|
|
} // namespace webrtc
|