SvgLoader: Support display=none feature 71/238971/3
authorJunsuChoi <jsuya.choi@samsung.com>
Tue, 21 Jul 2020 01:42:22 +0000 (10:42 +0900)
committerHermet Park <chuneon.park@samsung.com>
Tue, 21 Jul 2020 02:51:28 +0000 (02:51 +0000)
If display is none, scene does not create a child shape,
and shape does not draw fills and strokes.

Change-Id: I8af72c904be00107dff115429e27df7ba4cb83b6

src/loaders/svg_loader/tvgSvgSceneBuilder.cpp

index 53f0093..3b88d96 100644 (file)
@@ -206,7 +206,7 @@ void _applyProperty(SvgNode* node, Shape* vg, float vx, float vy, float vw, floa
     SvgStyleProperty* style = node->style;
 
     if (node->transform) vg->transform(*node->transform);
-    if (node->type == SvgNodeType::Doc) return;
+    if (node->type == SvgNodeType::Doc || !node->display) return;
 
     //If fill property is nullptr then do nothing
     if (style->fill.paint.none) {
@@ -333,10 +333,12 @@ unique_ptr<Scene> _sceneBuildHelper(SvgNode* node, float vx, float vy, float vw,
         auto scene = Scene::gen();
         if (node->transform) scene->transform(*node->transform);
         node->style->opacity = (node->style->opacity * parentOpacity) / 255.0f;
-        for (auto child : node->child) {
-            child->style->opacity = (child->style->opacity * node->style->opacity) / 255.0f;
-            if (child->type == SvgNodeType::Doc || child->type == SvgNodeType::G) scene->push(_sceneBuildHelper(child, vx, vy, vw, vh, node->style->opacity));
-            else scene->push(_shapeBuildHelper(child, vx, vy, vw, vh));
+        if (node->display) {
+            for (auto child : node->child) {
+                child->style->opacity = (child->style->opacity * node->style->opacity) / 255.0f;
+                if (child->type == SvgNodeType::Doc || child->type == SvgNodeType::G) scene->push(_sceneBuildHelper(child, vx, vy, vw, vh, node->style->opacity));
+                else scene->push(_shapeBuildHelper(child, vx, vy, vw, vh));
+            }
         }
         return move(scene);
     }