diff options
Diffstat (limited to 'third_party/libwebrtc/modules/desktop_capture/desktop_geometry.cc')
-rw-r--r-- | third_party/libwebrtc/modules/desktop_capture/desktop_geometry.cc | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/third_party/libwebrtc/modules/desktop_capture/desktop_geometry.cc b/third_party/libwebrtc/modules/desktop_capture/desktop_geometry.cc new file mode 100644 index 0000000000..e0a5d7af83 --- /dev/null +++ b/third_party/libwebrtc/modules/desktop_capture/desktop_geometry.cc @@ -0,0 +1,79 @@ +/* + * 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 "modules/desktop_capture/desktop_geometry.h" + +#include <algorithm> +#include <cmath> + +namespace webrtc { + +bool DesktopRect::Contains(const DesktopVector& point) const { + return point.x() >= left() && point.x() < right() && point.y() >= top() && + point.y() < bottom(); +} + +bool DesktopRect::ContainsRect(const DesktopRect& rect) const { + return rect.left() >= left() && rect.right() <= right() && + rect.top() >= top() && rect.bottom() <= bottom(); +} + +void DesktopRect::IntersectWith(const DesktopRect& rect) { + left_ = std::max(left(), rect.left()); + top_ = std::max(top(), rect.top()); + right_ = std::min(right(), rect.right()); + bottom_ = std::min(bottom(), rect.bottom()); + if (is_empty()) { + left_ = 0; + top_ = 0; + right_ = 0; + bottom_ = 0; + } +} + +void DesktopRect::UnionWith(const DesktopRect& rect) { + if (is_empty()) { + *this = rect; + return; + } + + if (rect.is_empty()) { + return; + } + + left_ = std::min(left(), rect.left()); + top_ = std::min(top(), rect.top()); + right_ = std::max(right(), rect.right()); + bottom_ = std::max(bottom(), rect.bottom()); +} + +void DesktopRect::Translate(int32_t dx, int32_t dy) { + left_ += dx; + top_ += dy; + right_ += dx; + bottom_ += dy; +} + +void DesktopRect::Extend(int32_t left_offset, + int32_t top_offset, + int32_t right_offset, + int32_t bottom_offset) { + left_ -= left_offset; + top_ -= top_offset; + right_ += right_offset; + bottom_ += bottom_offset; +} + +void DesktopRect::Scale(double horizontal, double vertical) { + right_ += static_cast<int>(std::round(width() * (horizontal - 1))); + bottom_ += static_cast<int>(std::round(height() * (vertical - 1))); +} + +} // namespace webrtc |