From 57b58412b678beb563e0a152f1fa4eb6de504332 Mon Sep 17 00:00:00 2001 From: subhransu mohanty Date: Mon, 20 Aug 2018 16:12:17 +0900 Subject: [PATCH] lottie/render: handle the case when resulting mask is null. Change-Id: Ie78a1465474ec408bff0deafdff509f3b3a199d8 --- src/lottie/lottieitem.cpp | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/src/lottie/lottieitem.cpp b/src/lottie/lottieitem.cpp index 39d95bf..7b34854 100644 --- a/src/lottie/lottieitem.cpp +++ b/src/lottie/lottieitem.cpp @@ -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; -- 2.34.1