mirror of
https://github.com/thorvg/thorvg.git
synced 2025-07-25 07:39:02 +00:00
svg_loader: fix clipping in use/symbol nodes
Clipping for the <use> node when a <symbol> was used, was being overridden when 'overflowVisible' was 'true' (the default value), which caused the 'clip-path' applied to the <use> node to have no visible effect. The clipping for the <use> node (without <symbol> node) was transformed in an incorrect order, resulting in a visually incorrect results. @Issue: https://github.com/thorvg/thorvg/issues/3392
This commit is contained in:
parent
53e5e783b7
commit
65c4e27437
1 changed files with 16 additions and 4 deletions
|
@ -807,12 +807,22 @@ static Scene* _useBuildHelper(SvgLoaderData& loaderData, const SvgNode* node, co
|
|||
}
|
||||
viewBoxClip->transform(mClipTransform);
|
||||
|
||||
scene->clip(viewBoxClip);
|
||||
auto clippingLayer = Scene::gen();
|
||||
clippingLayer->clip(viewBoxClip);
|
||||
clippingLayer->push(scene);
|
||||
return clippingLayer;
|
||||
}
|
||||
} else {
|
||||
scene->transform(mUseTransform);
|
||||
return scene;
|
||||
}
|
||||
|
||||
if (auto clipper = PAINT(scene)->clipper) {
|
||||
auto& clipTransform = clipper->transform();
|
||||
Matrix inv;
|
||||
if (node->transform && inverse(node->transform, &inv)) clipTransform = inv * clipTransform;
|
||||
clipTransform = mUseTransform * clipTransform ;
|
||||
}
|
||||
|
||||
scene->transform(mUseTransform);
|
||||
return scene;
|
||||
}
|
||||
|
||||
|
@ -888,7 +898,9 @@ static Scene* _sceneBuildHelper(SvgLoaderData& loaderData, const SvgNode* node,
|
|||
|
||||
auto scene = Scene::gen();
|
||||
// For a Symbol node, the viewBox transformation has to be applied first - see _useBuildHelper()
|
||||
if (!mask && node->transform && node->type != SvgNodeType::Symbol) scene->transform(*node->transform);
|
||||
if (!mask && node->transform && node->type != SvgNodeType::Symbol && node->type != SvgNodeType::Use) {
|
||||
scene->transform(*node->transform);
|
||||
}
|
||||
|
||||
if (!node->style->display || node->style->opacity == 0) return scene;
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue