From 2bb108b2f13432ac140d9be08daae189fe9c61c5 Mon Sep 17 00:00:00 2001 From: Mira Grudzinska Date: Sun, 7 Mar 2021 16:02:04 +0100 Subject: [PATCH] svg_loader: limiting the ploted area of svg to viewBox The 'viewBox' element given in the svg file determines the coordinates of the plotted area. ClipPath used in Svg loader. --- src/loaders/svg/tvgSvgSceneBuilder.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/loaders/svg/tvgSvgSceneBuilder.cpp b/src/loaders/svg/tvgSvgSceneBuilder.cpp index 38b3b6ee..25f85eab 100644 --- a/src/loaders/svg/tvgSvgSceneBuilder.cpp +++ b/src/loaders/svg/tvgSvgSceneBuilder.cpp @@ -363,7 +363,14 @@ unique_ptr _sceneBuildHelper(const SvgNode* node, float vx, float vy, flo scene->push(_sceneBuildHelper(*child, vx, vy, vw, vh)); } else { auto shape = _shapeBuildHelper(*child, vx, vy, vw, vh); - if (shape) scene->push(move(shape)); + // clipping the viewBox + if (shape) { + auto viewBoxClip = Shape::gen(); + viewBoxClip->appendRect(vx, vy, vw, vh, 0, 0); + viewBoxClip->fill(0, 0, 0, 255); + shape->composite(move(viewBoxClip), tvg::CompositeMethod::ClipPath); + scene->push(move(shape)); + } } } //Apply composite node