Index: cc/region.cc |
diff --git a/cc/region.cc b/cc/region.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..7a5e83cd60fbce38d8f627c82f90fc06ce9e2cae |
--- /dev/null |
+++ b/cc/region.cc |
@@ -0,0 +1,109 @@ |
+// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "config.h" |
+ |
+#include "cc/region.h" |
+ |
+namespace cc { |
+ |
+// TODO(danakj) Use method from ui/gfx/skia_utils.h when it exists. |
+static inline SkIRect ToSkIRect(gfx::Rect rect) |
+{ |
+ return SkIRect::MakeXYWH(rect.x(), rect.y(), rect.width(), rect.height()); |
+} |
+ |
+Region::Region() { |
+} |
+ |
+Region::Region(const Region& region) |
+ : skregion_(region.skregion_) { |
+} |
+ |
+Region::Region(gfx::Rect rect) |
+ : skregion_(ToSkIRect(rect)) { |
+} |
+ |
+Region::~Region() { |
+} |
+ |
+const Region& Region::operator=(gfx::Rect rect) { |
+ skregion_ = SkRegion(ToSkIRect(rect)); |
+ return *this; |
+} |
+ |
+const Region& Region::operator=(const Region& region) { |
+ skregion_ = region.skregion_; |
+ return *this; |
+} |
+ |
+bool Region::IsEmpty() const { |
+ return skregion_.isEmpty(); |
+} |
+ |
+bool Region::Contains(gfx::Point point) const { |
+ return skregion_.contains(point.x(), point.y()); |
+} |
+ |
+bool Region::Contains(gfx::Rect rect) const { |
+ return skregion_.contains(ToSkIRect(rect)); |
+} |
+ |
+bool Region::Contains(const Region& region) const { |
+ return skregion_.contains(region.skregion_); |
+} |
+ |
+bool Region::Intersects(gfx::Rect rect) const { |
+ return skregion_.intersects(ToSkIRect(rect)); |
+} |
+ |
+bool Region::Intersects(const Region& region) const { |
+ return skregion_.intersects(region.skregion_); |
+} |
+ |
+void Region::Subtract(gfx::Rect rect) { |
+ skregion_.op(ToSkIRect(rect), SkRegion::kDifference_Op); |
+} |
+ |
+void Region::Subtract(const Region& region) { |
+ skregion_.op(region.skregion_, SkRegion::kDifference_Op); |
+} |
+ |
+void Region::Union(gfx::Rect rect) { |
+ skregion_.op(ToSkIRect(rect), SkRegion::kUnion_Op); |
+} |
+ |
+void Region::Union(const Region& region) { |
+ skregion_.op(region.skregion_, SkRegion::kUnion_Op); |
+} |
+ |
+void Region::Intersect(gfx::Rect rect) { |
+ skregion_.op(ToSkIRect(rect), SkRegion::kIntersect_Op); |
+} |
+ |
+void Region::Intersect(const Region& region) { |
+ skregion_.op(region.skregion_, SkRegion::kIntersect_Op); |
+} |
+ |
+std::string Region::ToString() const { |
+ if (IsEmpty()) |
+ return gfx::Rect().ToString(); |
+ |
+ std::string result; |
+ for (Iterator it(*this); it.has_rect(); it.next()) { |
+ if (!result.empty()) |
+ result += " | "; |
+ result += it.rect().ToString(); |
+ } |
+ return result; |
+} |
+ |
+Region::Iterator::Iterator(const Region& region) |
+ : it_(region.skregion_) { |
+} |
+ |
+Region::Iterator::~Iterator() { |
+} |
+ |
+} // namespace cc |