Add contains() test to Region
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 7 Feb 2012 02:55:24 +0000 (02:55 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 7 Feb 2012 02:55:24 +0000 (02:55 +0000)
https://bugs.webkit.org/show_bug.cgi?id=72294

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

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

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

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

index 2365b60..8c3cb3f 100644 (file)
@@ -1,3 +1,19 @@
+2012-02-06  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-02-06  Kentaro Hara  <haraken@chromium.org>
 
         Rename [DontCheckEnums], [ReturnsNew], [DoNotCheckDomainSecurityOnGet],
index 5427c6c..3f35eb9 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()
 {
 }
@@ -279,7 +284,7 @@ Region::Shape Region::Shape::shapeOperation(const Shape& shape1, const Shape& sh
         SegmentIterator s1 = segments1;
         SegmentIterator s2 = segments2;
 
-        Vector<int> segments;
+        Vector<int, 32> segments;
 
         // Now iterate over the segments in each span and construct a new vector of segments.
         while (s1 != segments1End && s2 != segments2End) {
index b5359bb..9170af4 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