lottie/render: handle the case when resulting mask is null. 37/187137/3
authorsubhransu mohanty <sub.mohanty@samsung.com>
Mon, 20 Aug 2018 07:12:17 +0000 (16:12 +0900)
committersubhransu mohanty <sub.mohanty@samsung.com>
Mon, 20 Aug 2018 09:22:16 +0000 (18:22 +0900)
Change-Id: Ie78a1465474ec408bff0deafdff509f3b3a199d8

src/lottie/lottieitem.cpp

index 39d95bf..7b34854 100644 (file)
@@ -170,18 +170,25 @@ void LOTLayerItem::render(VPainter *painter, const VRle &inheritMask, LOTLayerIt
     }
     mDrawableList.clear();
     renderList(mDrawableList);
-    VRle mask = inheritMask;
+
+    VRle mask;
     if (hasMask()) {
-        if (mask.isEmpty())
-            mask = maskRle(painter->clipBoundingRect());
-        else
+        mask = maskRle(painter->clipBoundingRect());
+        if (!inheritMask.isEmpty())
             mask = mask & inheritMask;
+        // if resulting mask is empty then return.
+        if (mask.isEmpty())
+            return;
+    } else {
+        mask = inheritMask;
     }
 
     for (auto &i : mDrawableList) {
         painter->setBrush(i->mBrush);
         VRle rle = i->rle();
-        if (!mask.isEmpty()) rle = i->rle() & mask;
+        if (!mask.isEmpty()) rle = rle & mask;
+
+        if (rle.isEmpty()) continue;
 
         if (!matteRle.isEmpty()) {
             if (mLayerData->mMatteType == MatteType::AlphaInv) {
@@ -348,13 +355,16 @@ void LOTCompLayerItem::render(VPainter *painter, const VRle &inheritMask, LOTLay
         }
     }
 
-    VRle mask = inheritMask;
-
+    VRle mask;
     if (hasMask()) {
-        if (mask.isEmpty())
-            mask = maskRle(painter->clipBoundingRect());
-        else
+        mask = maskRle(painter->clipBoundingRect());
+        if (!inheritMask.isEmpty())
             mask = mask & inheritMask;
+        // if resulting mask is empty then return.
+        if (mask.isEmpty())
+            return;
+    } else {
+        mask = inheritMask;
     }
 
     LOTLayerItem *matteLayer = nullptr;