Chromium Code Reviews| Index: cc/region.cc |
| diff --git a/cc/region.cc b/cc/region.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..0575e638a1c3b087fb4c76c690f67e105377ffa5 |
| --- /dev/null |
| +++ b/cc/region.cc |
| @@ -0,0 +1,91 @@ |
| +// 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(const 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() { |
| +} |
| + |
| +void Region::operator=(const Region& region) { |
| + skregion_ = region.skregion_; |
| +} |
| + |
| +bool Region::IsEmpty() const { |
| + return skregion_.isEmpty(); |
| +} |
| + |
| +bool Region::Contains(const gfx::Point& point) const { |
| + return skregion_.contains(point.x(), point.y()); |
| +} |
| + |
| +bool Region::Contains(const gfx::Rect& rect) const { |
| + return skregion_.contains(ToSkIRect(rect)); |
| +} |
| + |
| +void Region::Subtract(const 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(const 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(const 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()) { |
|
enne (OOO)
2012/11/05 21:15:21
Is there any ordering constraint on the rects in r
danakj
2012/11/05 21:18:26
My expectation is that that regardless of the orde
|
| + if (!result.empty()) |
| + result += " | "; |
| + result += it.rect().ToString(); |
| + } |
| + return result; |
| +} |
| + |
| +Region::Iterator::Iterator(const Region& region) |
| + : it_(region.skregion_) { |
| +} |
| + |
| +Region::Iterator::~Iterator() { |
| +} |
| + |
| +} // namespace cc |