Add contains() test to Region
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 31 Jan 2012 23:36:06 +0000 (23:36 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 31 Jan 2012 23:36:06 +0000 (23:36 +0000)
https://bugs.webkit.org/show_bug.cgi?id=72294

Patch by Dana Jansens <danakj@chromium.org> on 2012-01-31
Reviewed by Anders Carlsson.

* platform/graphics/Region.cpp:
(WebCore::Region::contains):
(WebCore):
* platform/graphics/Region.h:
(Region):
(Shape):
(WebCore::operator==):
(WebCore):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@106408 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/platform/graphics/Region.cpp
Source/WebCore/platform/graphics/Region.h

index 637c9f41ead1bf616bc9c223e74121dda118690f..dadc119bcd8c176fc20fbbc97b7c99dbab20d841 100644 (file)
@@ -1,3 +1,19 @@
+2012-01-31  Dana Jansens  <danakj@chromium.org>
+
+        Add contains() test to Region
+        https://bugs.webkit.org/show_bug.cgi?id=72294
+
+        Reviewed by Anders Carlsson.
+
+        * platform/graphics/Region.cpp:
+        (WebCore::Region::contains):
+        (WebCore):
+        * platform/graphics/Region.h:
+        (Region):
+        (Shape):
+        (WebCore::operator==):
+        (WebCore):
+
 2012-01-31  Sami Kyostila  <skyostil@chromium.org>
 
         [chromium] Compositor debug borders are not scaled correctly
index 5427c6c91d2160eb77e82787ab09aef421d66127..73e6ddcf5d1472367c8990f607162359e8aab646 100644 (file)
@@ -65,6 +65,11 @@ Vector<IntRect> Region::rects() const
     return rects;
 }
 
+bool Region::contains(const Region& region) const
+{
+    return WebCore::intersect(region, *this) == region;
+}
+
 Region::Shape::Shape()
 {
 }
index b5359bbe39c025c3e2c5e55b39fa4a5757d7975f..9170af4f065d08771aa7ba285028fe81e5d95066 100644 (file)
@@ -47,6 +47,9 @@ public:
 
     void translate(const IntSize&);
 
+    // Returns true if the query region is a subset of this region.
+    bool contains(const Region&) const;
+
 #ifndef NDEBUG
     void dump() const;
 #endif
@@ -104,13 +107,18 @@ private:
 
         bool canCoalesce(SegmentIterator begin, SegmentIterator end);
 
-        // FIXME: These vectors should have inline sizes. Figure out a good optimal value.
-        Vector<int> m_segments;
-        Vector<Span> m_spans;        
+        Vector<int, 32> m_segments;
+        Vector<Span, 16> m_spans;
+
+        friend bool operator==(const Shape&, const Shape&);
     };
 
     IntRect m_bounds;
     Shape m_shape;
+
+    friend bool operator==(const Region&, const Region&);
+    friend bool operator==(const Shape&, const Shape&);
+    friend bool operator==(const Span&, const Span&);
 };
 
 static inline Region intersect(const Region& a, const Region& b)
@@ -137,6 +145,21 @@ static inline Region translate(const Region& region, const IntSize& offset)
     return result;
 }
 
+inline bool operator==(const Region& a, const Region& b)
+{
+    return a.m_bounds == b.m_bounds && a.m_shape == b.m_shape;
+}
+
+inline bool operator==(const Region::Shape& a, const Region::Shape& b)
+{
+    return a.m_spans == b.m_spans && a.m_segments == b.m_segments;
+}
+
+inline bool operator==(const Region::Span& a, const Region::Span& b)
+{
+    return a.y == b.y && a.segmentIndex == b.segmentIndex;
+}
+
 } // namespace WebCore
 
 #endif // Region_h