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