renderer: apply background clip path. accepted/tizen_6.5_unified tizen_6.5 accepted/tizen/6.5/unified/20211028.122016 accepted/tizen/unified/20210712.131302 submit/tizen/20210712.043639 submit/tizen_6.5/20211028.163101 tizen_6.5.m2_release
authorTaehyub Kim <taehyub.kim@samsung.com>
Tue, 15 Jun 2021 11:42:49 +0000 (20:42 +0900)
committerHermet Park <chuneon.park@samsung.com>
Mon, 12 Jul 2021 04:06:03 +0000 (13:06 +0900)
Change-Id: I96f5b1f71326be4b94e9a88970d75b15ef852b94

src/renderer/tvg_renderer.cpp
src/renderer/tvg_renderer.hpp

index 8fa3370..d8fcc3a 100644 (file)
@@ -259,15 +259,33 @@ void TvgRenderer::drawPath(RenderPath* path, RenderPaint* paint)
    }
 
    tvgShape->transform({m_Transform[0], m_Transform[2], m_Transform[4], m_Transform[1], m_Transform[3], m_Transform[5], 0, 0, 1});
-   m_Canvas->push(unique_ptr<Paint>(tvgShape->duplicate()));
+
+   if (m_BgClipPath)
+   {
+      m_BgClipPath->fill(255, 255, 255, 255);
+      auto scene = tvg::Scene::gen();
+      scene->push(unique_ptr<Paint>(tvgShape->duplicate()));
+      scene->composite(unique_ptr<Shape>(static_cast<Shape*>(m_BgClipPath->duplicate())), tvg::CompositeMethod::ClipPath);
+      m_Canvas->push(move(scene));
+   }
+   else
+      m_Canvas->push(unique_ptr<Paint>(tvgShape->duplicate()));
 }
 
 
 void TvgRenderer::clipPath(RenderPath* path)
 {
    //Note: ClipPath transform matrix is calculated by transfrom matrix in addRenderPath function
-   m_ClipPath = static_cast<TvgRenderPath*>(path)->tvgShape.get();
-   m_ClipPath->transform({m_Transform[0], m_Transform[2], m_Transform[4], m_Transform[1], m_Transform[3], m_Transform[5], 0, 0, 1});
+   if (!m_BgClipPath)
+   {
+      m_BgClipPath = static_cast<TvgRenderPath*>(path)->tvgShape.get();
+      m_BgClipPath->transform({m_Transform[0], m_Transform[2], m_Transform[4], m_Transform[1], m_Transform[3], m_Transform[5], 0, 0, 1});
+   }
+   else
+   {
+      m_ClipPath = static_cast<TvgRenderPath*>(path)->tvgShape.get();
+      m_ClipPath->transform({m_Transform[0], m_Transform[2], m_Transform[4], m_Transform[1], m_Transform[3], m_Transform[5], 0, 0, 1});
+   }
 }
 
 namespace rive
index 3095782..4483164 100644 (file)
@@ -110,6 +110,7 @@ namespace rive
    private:
       Canvas* m_Canvas;
       Shape* m_ClipPath = nullptr;
+      Shape* m_BgClipPath = nullptr;
       Mat2D m_Transform;
       Mat2D m_SaveTransform;