| Index: cc/region.cc
|
| diff --git a/cc/region.cc b/cc/region.cc
|
| index 7a5e83cd60fbce38d8f627c82f90fc06ce9e2cae..1b0ca7c9f1a5f1d422af4467122f3cf1c809e819 100644
|
| --- a/cc/region.cc
|
| +++ b/cc/region.cc
|
| @@ -18,72 +18,162 @@ Region::Region() {
|
| }
|
|
|
| Region::Region(const Region& region)
|
| +#ifdef USE_ANDROID_REGION
|
| + : droidregion_(region.droidregion_) {
|
| +#else
|
| : skregion_(region.skregion_) {
|
| +#endif
|
| }
|
|
|
| Region::Region(gfx::Rect rect)
|
| +#ifdef USE_ANDROID_REGION
|
| + : droidregion_(ToSkIRect(rect)) {
|
| +#else
|
| : skregion_(ToSkIRect(rect)) {
|
| +#endif
|
| }
|
|
|
| Region::~Region() {
|
| }
|
|
|
| const Region& Region::operator=(gfx::Rect rect) {
|
| +#ifdef USE_ANDROID_REGION
|
| + droidregion_.set(ToSkIRect(rect));
|
| +#else
|
| skregion_ = SkRegion(ToSkIRect(rect));
|
| +#endif
|
| return *this;
|
| }
|
|
|
| const Region& Region::operator=(const Region& region) {
|
| +#ifdef USE_ANDROID_REGION
|
| + droidregion_ = region.droidregion_;
|
| +#else
|
| skregion_ = region.skregion_;
|
| +#endif
|
| return *this;
|
| }
|
|
|
| bool Region::IsEmpty() const {
|
| +#ifdef USE_ANDROID_REGION
|
| + return droidregion_.isEmpty();
|
| +#else
|
| return skregion_.isEmpty();
|
| +#endif
|
| }
|
|
|
| bool Region::Contains(gfx::Point point) const {
|
| +#ifdef USE_ANDROID_REGION
|
| + return !droidregion_.intersect(ToSkIRect(gfx::Rect(point, gfx::Size(1, 1)))).isEmpty();
|
| +#else
|
| return skregion_.contains(point.x(), point.y());
|
| +#endif
|
| }
|
|
|
| bool Region::Contains(gfx::Rect rect) const {
|
| +#ifdef USE_ANDROID_REGION
|
| + if (rect.IsEmpty())
|
| + return false;
|
| + android::Region result = droidregion_.intersect(ToSkIRect(rect));
|
| + return result.isRect() && result.bounds() == ToSkIRect(rect);
|
| +#else
|
| return skregion_.contains(ToSkIRect(rect));
|
| +#endif
|
| }
|
|
|
| bool Region::Contains(const Region& region) const {
|
| +#ifdef USE_ANDROID_REGION
|
| + if (region.IsEmpty())
|
| + return false;
|
| + android::Region result = region.droidregion_.subtract(droidregion_);
|
| + return result.isEmpty();
|
| +#else
|
| return skregion_.contains(region.skregion_);
|
| +#endif
|
| }
|
|
|
| bool Region::Intersects(gfx::Rect rect) const {
|
| +#ifdef USE_ANDROID_REGION
|
| + return !droidregion_.intersect(ToSkIRect(rect)).isEmpty();
|
| +#else
|
| return skregion_.intersects(ToSkIRect(rect));
|
| +#endif
|
| }
|
|
|
| bool Region::Intersects(const Region& region) const {
|
| +#ifdef USE_ANDROID_REGION
|
| + return !droidregion_.intersect(region.droidregion_).isEmpty();
|
| +#else
|
| return skregion_.intersects(region.skregion_);
|
| +#endif
|
| }
|
|
|
| void Region::Subtract(gfx::Rect rect) {
|
| +#ifdef USE_ANDROID_REGION
|
| + droidregion_.subtractSelf(ToSkIRect(rect));
|
| +#else
|
| skregion_.op(ToSkIRect(rect), SkRegion::kDifference_Op);
|
| +#endif
|
| }
|
|
|
| void Region::Subtract(const Region& region) {
|
| +#ifdef USE_ANDROID_REGION
|
| + droidregion_.subtractSelf(region.droidregion_);
|
| +#else
|
| skregion_.op(region.skregion_, SkRegion::kDifference_Op);
|
| +#endif
|
| }
|
|
|
| void Region::Union(gfx::Rect rect) {
|
| +#ifdef USE_ANDROID_REGION
|
| + droidregion_.orSelf(ToSkIRect(rect));
|
| +#else
|
| skregion_.op(ToSkIRect(rect), SkRegion::kUnion_Op);
|
| +#endif
|
| }
|
|
|
| void Region::Union(const Region& region) {
|
| +#ifdef USE_ANDROID_REGION
|
| + droidregion_.orSelf(region.droidregion_);
|
| +#else
|
| skregion_.op(region.skregion_, SkRegion::kUnion_Op);
|
| +#endif
|
| }
|
|
|
| void Region::Intersect(gfx::Rect rect) {
|
| +#ifdef USE_ANDROID_REGION
|
| + droidregion_.andSelf(ToSkIRect(rect));
|
| +#else
|
| skregion_.op(ToSkIRect(rect), SkRegion::kIntersect_Op);
|
| +#endif
|
| }
|
|
|
| void Region::Intersect(const Region& region) {
|
| +#ifdef USE_ANDROID_REGION
|
| + droidregion_.andSelf(region.droidregion_);
|
| +#else
|
| skregion_.op(region.skregion_, SkRegion::kIntersect_Op);
|
| +#endif
|
| +}
|
| +
|
| +bool Region::Equals(const Region& other) const {
|
| +#ifdef USE_ANDROID_REGION
|
| + if (droidregion_.bounds() != other.droidregion_.bounds())
|
| + return false;
|
| + android::Region::const_iterator it_me = droidregion_.begin();
|
| + android::Region::const_iterator it_them = other.droidregion_.begin();
|
| + for (; it_me != droidregion_.end() && it_them != droidregion_.end(); ++it_me, ++it_them) {
|
| + if (*it_me != *it_them)
|
| + return false;
|
| + }
|
| + if (it_me != droidregion_.end())
|
| + return false;
|
| + if (it_them != other.droidregion_.end())
|
| + return false;
|
| + return true;
|
| +#else
|
| + return skregion_ == other.skregion_;
|
| +#endif
|
| }
|
|
|
| std::string Region::ToString() const {
|
| @@ -91,16 +181,29 @@ std::string Region::ToString() const {
|
| return gfx::Rect().ToString();
|
|
|
| std::string result;
|
| +#ifdef USE_ANDROID_REGION
|
| + for (android::Region::const_iterator it = droidregion_.begin(); it != droidregion_.end(); ++it) {
|
| +#else
|
| for (Iterator it(*this); it.has_rect(); it.next()) {
|
| +#endif
|
| if (!result.empty())
|
| result += " | ";
|
| +#ifdef USE_ANDROID_REGION
|
| + result += gfx::Rect(it->x(), it->y(), it->width(), it->height()).ToString();
|
| +#else
|
| result += it.rect().ToString();
|
| +#endif
|
| }
|
| return result;
|
| }
|
|
|
| Region::Iterator::Iterator(const Region& region)
|
| +#ifdef USE_ANDROID_REGION
|
| + : droidregion_(region.droidregion_),
|
| + it_(droidregion_.begin()) {
|
| +#else
|
| : it_(region.skregion_) {
|
| +#endif
|
| }
|
|
|
| Region::Iterator::~Iterator() {
|
|
|