lottie/vector: Implement intersect function with callback. 82/184782/3
authorsubhransu mohanty <sub.mohanty@samsung.com>
Mon, 23 Jul 2018 06:02:45 +0000 (15:02 +0900)
committerGerrit Code Review <gerrit@review.ap-northeast-2.compute.internal>
Tue, 24 Jul 2018 06:15:10 +0000 (06:15 +0000)
Change-Id: I8d5e3be9d4a77c246ef174e716c22c8766fc82a1

src/vector/vrle.cpp
src/vector/vrle.h

index 1d9ef27..de248a5 100644 (file)
@@ -309,6 +309,7 @@ public:
     void updateBbox();
     bool operator ==(const VRleImpl &) const;
     void intersected(const VRect &r, VRleImpl &result);
+    void intersect(const VRect &r, VRle::VRleSpanCb cb, void *userData) const;
     void intersected(const VRleImpl &clip, VRleImpl &result);
     friend VDebug& operator<<(VDebug& os, const VRleImpl& object);
     void invert();
@@ -406,6 +407,33 @@ void VRleImpl::intersected(const VRect &r, VRleImpl &result)
     result.updateBbox();
 }
 
+void VRleImpl::intersect(const VRect &r, VRle::VRleSpanCb cb, void *userData) const
+{
+    VRect clip = r;
+
+    VRleHelper tresult, tmp_obj;
+    std::array<VRle::Span,256> array;
+
+    //setup the tresult object
+    tresult.size = array.size();
+    tresult.alloc = array.size();
+    tresult.spans = array.data();
+
+    // setup tmp object
+    tmp_obj.size = m_spans.size();
+    tmp_obj.spans = const_cast<VRle::Span *>(m_spans.data());
+
+    // run till all the spans are processed
+    while (tmp_obj.size)
+      {
+         rleIntersectWithRect(clip, &tmp_obj, &tresult);
+         if (tresult.size) {
+             cb(tresult.size, tresult.spans, userData);
+         }
+         tresult.size = 0;
+      }
+}
+
 void VRleImpl::intersected(const VRleImpl &clip, VRleImpl &result)
 {
     VRleHelper tresult, tmp_obj, tmp_clip;
@@ -740,9 +768,9 @@ VRle VRle::operator&(const VRle &o) const
 
 
 
-void VRle::intersected(const VRect &r, VRleSpanCb cb, void *userData)
+void VRle::intersect(const VRect &r, VRleSpanCb cb, void *userData) const
 {
-    //TODO Implement
+    d->impl.intersect(r, cb, userData);
 }
 
 
index e10919b..fd7ca29 100644 (file)
@@ -32,7 +32,7 @@ public:
     void translate(int x, int y);
     VRle intersected(const VRect &r) const;
     VRle intersected(const VRle &other) const;
-    void intersected(const VRect &r, VRleSpanCb cb, void *userData);
+    void intersect(const VRect &r, VRleSpanCb cb, void *userData) const;
     VRle &intersect(const VRect &r);
     int size() const;
     const VRle::Span* data() const;