| Index: cc/stubs/Region.h
|
| diff --git a/cc/stubs/Region.h b/cc/stubs/Region.h
|
| index 130e3e6dfe279307a6d2c4765359e3d99eeb8870..9f886ac41d2b9ed32d6a5bea701f61a0a0c53f77 100644
|
| --- a/cc/stubs/Region.h
|
| +++ b/cc/stubs/Region.h
|
| @@ -5,12 +5,12 @@
|
| #ifndef CC_STUBS_REGION_H_
|
| #define CC_STUBS_REGION_H_
|
|
|
| -#include "IntRect.h"
|
| #if INSIDE_WEBKIT_BUILD
|
| #include "Source/WebCore/platform/graphics/Region.h"
|
| #else
|
| #include "third_party/WebKit/Source/WebCore/platform/graphics/Region.h"
|
| #endif
|
| +#include "base/logging.h"
|
| #include "ui/gfx/rect.h"
|
|
|
| namespace cc {
|
| @@ -19,16 +19,6 @@ class Region : public WebCore::Region {
|
| public:
|
| Region() { }
|
|
|
| - Region(const IntRect& rect)
|
| - : WebCore::Region(rect)
|
| - {
|
| - }
|
| -
|
| - Region(const WebCore::IntRect& rect)
|
| - : WebCore::Region(rect)
|
| - {
|
| - }
|
| -
|
| Region(const WebCore::Region& region)
|
| : WebCore::Region(region)
|
| {
|
| @@ -41,31 +31,67 @@ public:
|
|
|
| bool IsEmpty() const { return isEmpty(); }
|
|
|
| - bool Contains(const gfx::Point& point) const { return contains(cc::IntPoint(point)); }
|
| - bool Contains(const gfx::Rect& rect) const { return contains(cc::IntRect(rect)); }
|
| - void Subtract(const gfx::Rect& rect) { subtract(cc::IntRect(rect)); }
|
| + bool Contains(const gfx::Point& point) const { return contains(WebCore::IntPoint(point.x(), point.y())); }
|
| + bool Contains(const gfx::Rect& rect) const { return contains(WebCore::IntRect(rect.x(), rect.y(), rect.width(), rect.height())); }
|
| + void Subtract(const gfx::Rect& rect) { subtract(WebCore::IntRect(rect.x(), rect.y(), rect.width(), rect.height())); }
|
| void Subtract(const Region& region) { subtract(region); }
|
| - void Union(const gfx::Rect& rect) { unite(cc::IntRect(rect)); }
|
| + void Union(const gfx::Rect& rect) { unite(WebCore::IntRect(rect.x(), rect.y(), rect.width(), rect.height())); }
|
| void Union(const Region& region) { unite(region); }
|
| - void Intersect(const gfx::Rect& rect) { intersect(cc::IntRect(rect)); }
|
| + void Intersect(const gfx::Rect& rect) { intersect(WebCore::IntRect(rect.x(), rect.y(), rect.width(), rect.height())); }
|
| void Intersect(const Region& region) { intersect(region); }
|
|
|
| - gfx::Rect bounds() const { return cc::IntRect(WebCore::Region::bounds()); }
|
| + gfx::Rect bounds() const
|
| + {
|
| + WebCore::IntRect bounds = WebCore::Region::bounds();
|
| + return gfx::Rect(bounds.x(), bounds.y(), bounds.width(), bounds.height());
|
| + }
|
| +
|
| + class Iterator {
|
| + public:
|
| + Iterator(const Region& region);
|
| + ~Iterator();
|
| +
|
| + gfx::Rect rect() const {
|
| + DCHECK(has_rect());
|
| + if (!has_rect())
|
| + return gfx::Rect();
|
| + return gfx::Rect(m_rects[m_pos].x(), m_rects[m_pos].y(), m_rects[m_pos].width(), m_rects[m_pos].height());
|
| + }
|
| +
|
| + void next() { ++m_pos; }
|
| + bool has_rect() const { return m_pos < m_rects.size(); }
|
| +
|
| + // It is expensive to construct the iterator just to get this size. Only
|
| + // do this for testing.
|
| + size_t size() const { return m_rects.size(); }
|
| + private:
|
| + size_t m_pos;
|
| + Vector<WebCore::IntRect> m_rects;
|
| + };
|
|
|
| private:
|
| bool isEmpty() const { return WebCore::Region::isEmpty(); }
|
| - bool contains(const IntPoint& point) const { return WebCore::Region::contains(point); }
|
| - bool contains(const IntRect& rect) const { return WebCore::Region::contains(rect); }
|
| - void subtract(const IntRect& rect) { return WebCore::Region::subtract(rect); }
|
| + bool contains(const WebCore::IntPoint& point) const { return WebCore::Region::contains(point); }
|
| + bool contains(const WebCore::IntRect& rect) const { return WebCore::Region::contains(rect); }
|
| + void subtract(const WebCore::IntRect& rect) { return WebCore::Region::subtract(rect); }
|
| void subtract(const Region& region) { return WebCore::Region::subtract(region); }
|
| - void unite(const IntRect& rect) { return WebCore::Region::unite(rect); }
|
| + void unite(const WebCore::IntRect& rect) { return WebCore::Region::unite(rect); }
|
| void unite(const Region& region) { return WebCore::Region::unite(region); }
|
| - void intersect(const IntRect& rect) { return WebCore::Region::intersect(rect); }
|
| + void intersect(const WebCore::IntRect& rect) { return WebCore::Region::intersect(rect); }
|
| void intersect(const Region& region) { return WebCore::Region::intersect(region); }
|
| + Vector<WebCore::IntRect> rects() const { return WebCore::Region::rects(); }
|
| };
|
|
|
| -inline Region subtract(const Region& region, const gfx::Rect& rect) { return WebCore::intersect(region, cc::IntRect(rect)); }
|
| -inline Region intersect(const Region& region, const gfx::Rect& rect) { return WebCore::intersect(region, cc::IntRect(rect)); }
|
| +inline Region subtract(const Region& region, const gfx::Rect& rect) { return WebCore::intersect(region, WebCore::IntRect(rect.x(), rect.y(), rect.width(), rect.height())); }
|
| +inline Region intersect(const Region& region, const gfx::Rect& rect) { return WebCore::intersect(region, WebCore::IntRect(rect.x(), rect.y(), rect.width(), rect.height())); }
|
| +
|
| +inline Region::Iterator::Iterator(const Region& region)
|
| + : m_pos(0)
|
| + , m_rects(region.rects())
|
| +{
|
| +}
|
| +
|
| +inline Region::Iterator::~Iterator() { }
|
|
|
| }
|
|
|
|
|