| /* |
| * 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 |