| Index: cc/base/simple_enclosed_region.h
|
| diff --git a/cc/base/simple_enclosed_region.h b/cc/base/simple_enclosed_region.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..28bec4c1575aa0f2298f2b5558afe181e61af33d
|
| --- /dev/null
|
| +++ b/cc/base/simple_enclosed_region.h
|
| @@ -0,0 +1,122 @@
|
| +// Copyright (c) 2014 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_BASE_SIMPLE_ENCLOSED_REGION_H_
|
| +#define CC_BASE_SIMPLE_ENCLOSED_REGION_H_
|
| +
|
| +#include <string>
|
| +
|
| +#include "cc/base/cc_export.h"
|
| +#include "ui/gfx/rect.h"
|
| +
|
| +namespace cc {
|
| +
|
| +class Region;
|
| +
|
| +// A constant-sized approximation of a Region. The SimpleEnclosedRegion may
|
| +// exclude points in its approximation (may have false negatives) but will never
|
| +// include a point that would not be in the actual Region (no false positives).
|
| +class CC_EXPORT SimpleEnclosedRegion {
|
| + public:
|
| + SimpleEnclosedRegion() : rect_() {}
|
| + SimpleEnclosedRegion(const SimpleEnclosedRegion& region)
|
| + : rect_(region.rect_) {}
|
| + explicit SimpleEnclosedRegion(const gfx::Rect& rect) : rect_(rect) {}
|
| + SimpleEnclosedRegion(int x, int y, int w, int h) : rect_(x, y, w, h) {}
|
| + SimpleEnclosedRegion(int w, int h) : rect_(w, h) {}
|
| + explicit SimpleEnclosedRegion(const Region& region);
|
| + ~SimpleEnclosedRegion();
|
| +
|
| + const SimpleEnclosedRegion& operator=(const gfx::Rect& rect) {
|
| + rect_ = rect;
|
| + return *this;
|
| + }
|
| + const SimpleEnclosedRegion& operator=(const SimpleEnclosedRegion& region) {
|
| + rect_ = region.rect_;
|
| + return *this;
|
| + }
|
| +
|
| + bool IsEmpty() const { return rect_.IsEmpty(); }
|
| + void Clear() { rect_ = gfx::Rect(); }
|
| + size_t GetRegionComplexity() const { return rect_.IsEmpty() ? 0 : 1; }
|
| +
|
| + bool Contains(const gfx::Point& point) const { return rect_.Contains(point); }
|
| + bool Contains(const gfx::Rect& rect) const { return rect_.Contains(rect); }
|
| + bool Contains(const SimpleEnclosedRegion& region) const {
|
| + return rect_.Contains(region.rect_);
|
| + }
|
| +
|
| + bool Intersects(const gfx::Rect& rect) const {
|
| + return rect_.Intersects(rect);
|
| + }
|
| + bool Intersects(const SimpleEnclosedRegion& region) const {
|
| + return rect_.Intersects(region.rect_);
|
| + }
|
| +
|
| + void Subtract(const gfx::Rect& sub_rect);
|
| + void Subtract(const SimpleEnclosedRegion& sub_region) {
|
| + Subtract(sub_region.rect_);
|
| + }
|
| + void Union(const gfx::Rect& new_rect);
|
| + void Union(const SimpleEnclosedRegion& new_region) {
|
| + Union(new_region.rect_);
|
| + }
|
| + void Intersect(const gfx::Rect& in_rect) { return rect_.Intersect(in_rect); }
|
| + void Intersect(const SimpleEnclosedRegion& in_region) {
|
| + Intersect(in_region.rect_);
|
| + }
|
| +
|
| + bool Equals(const SimpleEnclosedRegion& other) const {
|
| + bool both_empty = rect_.IsEmpty() && other.rect_.IsEmpty();
|
| + return both_empty || rect_ == other.rect_;
|
| + }
|
| +
|
| + gfx::Rect bounds() const { return rect_; }
|
| +
|
| + // The value of |i| must be less than GetRegionComplexity().
|
| + gfx::Rect GetRect(size_t i) const;
|
| +
|
| + std::string ToString() const { return rect_.ToString(); }
|
| +
|
| + private:
|
| + gfx::Rect rect_;
|
| +};
|
| +
|
| +inline bool operator==(const SimpleEnclosedRegion& a,
|
| + const SimpleEnclosedRegion& b) {
|
| + return a.Equals(b);
|
| +}
|
| +
|
| +inline bool operator!=(const SimpleEnclosedRegion& a,
|
| + const SimpleEnclosedRegion& b) {
|
| + return !(a == b);
|
| +}
|
| +
|
| +inline SimpleEnclosedRegion SubtractSimpleEnclosedRegions(
|
| + const SimpleEnclosedRegion& a,
|
| + const SimpleEnclosedRegion& b) {
|
| + SimpleEnclosedRegion result = a;
|
| + result.Subtract(b);
|
| + return result;
|
| +}
|
| +
|
| +inline SimpleEnclosedRegion IntersectSimpleEnclosedRegions(
|
| + const SimpleEnclosedRegion& a,
|
| + const SimpleEnclosedRegion& b) {
|
| + SimpleEnclosedRegion result = a;
|
| + result.Intersect(b);
|
| + return result;
|
| +}
|
| +
|
| +inline SimpleEnclosedRegion UnionSimpleEnclosedRegions(
|
| + const SimpleEnclosedRegion& a,
|
| + const SimpleEnclosedRegion& b) {
|
| + SimpleEnclosedRegion result = a;
|
| + result.Union(b);
|
| + return result;
|
| +}
|
| +
|
| +} // namespace cc
|
| +
|
| +#endif // CC_BASE_SIMPLE_ENCLOSED_REGION_H_
|
|
|