From 84df3439dee7f37d7336e5ad52d17e91eeb4793b Mon Sep 17 00:00:00 2001 From: JunsuChoi Date: Thu, 9 Jul 2020 13:37:12 +0900 Subject: [PATCH] SvgLoader: Inherit parent opacity Change-Id: If52c6581845e9918dc13c4627080ba84d270a07b --- src/loaders/svg_loader/tvgSvgSceneBuilder.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/loaders/svg_loader/tvgSvgSceneBuilder.cpp b/src/loaders/svg_loader/tvgSvgSceneBuilder.cpp index d7fcb82f..4daf7d86 100644 --- a/src/loaders/svg_loader/tvgSvgSceneBuilder.cpp +++ b/src/loaders/svg_loader/tvgSvgSceneBuilder.cpp @@ -356,7 +356,7 @@ unique_ptr _shapeBuildHelper(SvgNode* node, float vx, float vy, float vw, } -unique_ptr _sceneBuildHelper(SvgNode* node, float vx, float vy, float vw, float vh) +unique_ptr _sceneBuildHelper(SvgNode* node, float vx, float vy, float vw, float vh, int parentOpacity) { if (node->type == SvgNodeType::Doc || node->type == SvgNodeType::G) { auto scene = Scene::gen(); @@ -367,9 +367,11 @@ unique_ptr _sceneBuildHelper(SvgNode* node, float vx, float vy, float vw, if (!(fmod(fabsf(z), 360.0) <= FLT_EPSILON)) scene->rotate(fmod(z, 360.0)); if (!(fabsf(tx) <= FLT_EPSILON) && !(fabsf(ty) <= FLT_EPSILON)) scene->translate(tx, ty); } + node->style->opacity = (node->style->opacity * parentOpacity) / 255; for (vector::iterator itrChild = node->child.begin(); itrChild != node->child.end(); itrChild++) { SvgNode* child = *itrChild; - if (child->type == SvgNodeType::Doc || child->type == SvgNodeType::G) scene->push(_sceneBuildHelper(*itrChild, vx, vy, vw, vh)); + child->style->opacity = (child->style->opacity * node->style->opacity) / 255; + if (child->type == SvgNodeType::Doc || child->type == SvgNodeType::G) scene->push(_sceneBuildHelper(*itrChild, vx, vy, vw, vh, node->style->opacity)); else scene->push(_shapeBuildHelper(*itrChild, vx, vy, vw, vh)); } return move(scene); @@ -398,7 +400,7 @@ unique_ptr SvgSceneBuilder::build(SvgNode* node) viewBox.h = node->node.doc.vh; preserveAspect = node->node.doc.preserveAspect; staticViewBox = true; - return _sceneBuildHelper(node, viewBox.x, viewBox.y, viewBox.w, viewBox.h); + return _sceneBuildHelper(node, viewBox.x, viewBox.y, viewBox.w, viewBox.h, 255); }