lottie/render: handle AlphaInverse matte for composition layer. 06/194406/2
authorsubhransu mohanty <sub.mohanty@samsung.com>
Tue, 4 Dec 2018 06:37:49 +0000 (15:37 +0900)
committerHermet Park <chuneon.park@samsung.com>
Tue, 4 Dec 2018 07:29:26 +0000 (07:29 +0000)
Change-Id: Ia477287d71dc15466e42a267e385af4cec683020

src/lottie/lottieitem.cpp
src/lottie/lottieitem.h

index e5f59aa..456eb66 100644 (file)
@@ -217,7 +217,6 @@ void LOTLayerItem::render(VPainter *painter, const VRle &inheritMask, const VRle
         for (auto &i : mDrawableList) {
             matteRle = matteRle + i->rle();
         }
-
         if (!inheritMatte.empty())
             matteRle = matteRle & inheritMatte;
     } else {
@@ -246,7 +245,7 @@ void LOTLayerItem::render(VPainter *painter, const VRle &inheritMask, const VRle
         if (rle.empty()) continue;
 
         if (!matteRle.empty()) {
-            if (mLayerData->mMatteType == MatteType::AlphaInv) {
+            if (matteType() == MatteType::AlphaInv) {
                 rle = rle - matteRle;
             } else {
                 rle = rle & matteRle;
@@ -427,6 +426,10 @@ void LOTCompLayerItem::render(VPainter *painter, const VRle &inheritMask, const
             matteRle = matteRle + i->rle();
         }
 
+        if (matteType() == MatteType::AlphaInv ) {
+            matteRle = VRle::toRle(painter->clipBoundingRect()) - matteRle;
+        }
+
         if (!inheritMatte.empty())
             matteRle = matteRle & inheritMatte;
     } else {
index 93a9966..d87f37a 100644 (file)
@@ -69,6 +69,7 @@ public:
    virtual void updateStaticProperty();
    virtual void render(VPainter *painter, const VRle &mask, const VRle &inheritMatte, LOTLayerItem *matteSource);
    bool hasMatte() { if (mLayerData->mMatteType == MatteType::None) return false; return true; }
+   MatteType matteType() const { return mLayerData->mMatteType;}
    bool visible() const;
    virtual void buildLayerNode();
    LOTLayerNode * layerNode() const {return mLayerCNode.get();}