| /* | |
| * 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> | |
| 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_ += width() * (horizontal - 1); | |
| bottom_ += height() * (vertical - 1); | |
| } | |
| } // namespace webrtc |