| // 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. |
| |
| #ifndef CC_REGION_H_ |
| #define CC_REGION_H_ |
| |
| #include <string> |
| |
| #include "base/logging.h" |
| #include "cc/cc_export.h" |
| #include "third_party/skia/include/core/SkRegion.h" |
| #include "ui/gfx/rect.h" |
| #include "ui/gfx/skia_util.h" |
| |
| namespace cc { |
| |
| class CC_EXPORT Region { |
| public: |
| Region(); |
| Region(const Region& region); |
| Region(gfx::Rect rect); |
| ~Region(); |
| |
| const Region& operator=(gfx::Rect rect); |
| const Region& operator=(const Region& region); |
| |
| void Swap(Region& region); |
| void Clear(); |
| bool IsEmpty() const; |
| |
| bool Contains(gfx::Point point) const; |
| bool Contains(gfx::Rect rect) const; |
| bool Contains(const Region& region) const; |
| |
| bool Intersects(gfx::Rect rect) const; |
| bool Intersects(const Region& region) const; |
| |
| void Subtract(gfx::Rect rect); |
| void Subtract(const Region& region); |
| void Union(gfx::Rect rect); |
| void Union(const Region& region); |
| void Intersect(gfx::Rect rect); |
| void Intersect(const Region& region); |
| |
| bool Equals(const Region& other) const { |
| return skregion_ == other.skregion_; |
| } |
| |
| gfx::Rect bounds() const { |
| return gfx::SkIRectToRect(skregion_.getBounds()); |
| } |
| |
| std::string ToString() const; |
| |
| class CC_EXPORT Iterator { |
| public: |
| Iterator(); |
| Iterator(const Region& region); |
| ~Iterator(); |
| |
| gfx::Rect rect() const { |
| return gfx::SkIRectToRect(it_.rect()); |
| } |
| |
| void next() { |
| it_.next(); |
| } |
| |
| bool has_rect() const { |
| return !it_.done(); |
| } |
| |
| private: |
| SkRegion::Iterator it_; |
| }; |
| |
| private: |
| SkRegion skregion_; |
| }; |
| |
| inline bool operator==(const Region& a, const Region& b) { |
| return a.Equals(b); |
| } |
| |
| inline bool operator!=(const Region& a, const Region& b) { |
| return !(a == b); |
| } |
| |
| inline Region SubtractRegions(const Region& a, const Region& b) { |
| Region result = a; |
| result.Subtract(b); |
| return result; |
| } |
| |
| inline Region SubtractRegions(const Region& a, gfx::Rect b) { |
| Region result = a; |
| result.Subtract(b); |
| return result; |
| } |
| |
| inline Region IntersectRegions(const Region& a, const Region& b) { |
| Region result = a; |
| result.Intersect(b); |
| return result; |
| } |
| |
| inline Region IntersectRegions(const Region& a, gfx::Rect b) { |
| Region result = a; |
| result.Intersect(b); |
| return result; |
| } |
| |
| inline Region UnionRegions(const Region& a, const Region& b) { |
| Region result = a; |
| result.Union(b); |
| return result; |
| } |
| |
| inline Region UnionRegions(const Region& a, gfx::Rect b) { |
| Region result = a; |
| result.Union(b); |
| return result; |
| } |
| |
| } // namespace cc |
| |
| #endif // CC_REGION_H_ |