From 8c0178870889a47c46fec8f59b7c94dcabf6d126 Mon Sep 17 00:00:00 2001 From: Tomaž Vajngerl Date: Sun, 3 Mar 2019 00:00:23 +0100 Subject: parse more attributes in SvgDrawVisitor MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - add additional parameters for DrawRectangle, DrawPath - parse stroke width, stroke and fill color for path and rect - parse rx, ry for rect - use getCurrentViewPort for top-level SVG rectangle Change-Id: Ife498bdaa721852ef2542ac5df2be0e86dfb4e62 Reviewed-on: https://gerrit.libreoffice.org/68785 Tested-by: Jenkins Reviewed-by: Tomaž Vajngerl --- svgio/source/svgreader/svgvisitor.cxx | 37 +++++++++++++++++++++++++++++------ 1 file changed, 31 insertions(+), 6 deletions(-) (limited to 'svgio') diff --git a/svgio/source/svgreader/svgvisitor.cxx b/svgio/source/svgreader/svgvisitor.cxx index 9ac651c66cc7..7b92e2fd0afb 100644 --- a/svgio/source/svgreader/svgvisitor.cxx +++ b/svgio/source/svgreader/svgvisitor.cxx @@ -18,6 +18,7 @@ #include #include +#include namespace svgio { @@ -37,13 +38,9 @@ void SvgDrawVisitor::visit(svgio::svgreader::SvgNode const& rNode) { auto const& rSvgNode = static_cast(rNode); - double x = rSvgNode.getX().getNumber(); - double y = rSvgNode.getY().getNumber(); - double w = rSvgNode.getWidth().getNumber(); - double h = rSvgNode.getHeight().getNumber(); + basegfx::B2DRange aRange = rSvgNode.getCurrentViewPort(); - static_cast(mpCurrent.get())->maRectangle - = basegfx::B2DRange(x, y, x + w, y + h); + static_cast(mpCurrent.get())->maRectangle = aRange; } break; case svgio::svgreader::SVGTokenG: @@ -71,16 +68,44 @@ void SvgDrawVisitor::visit(svgio::svgreader::SvgNode const& rNode) auto pRectangle = std::make_shared(basegfx::B2DRange(x, y, x + w, y + h)); + pRectangle->mnRx = rRectNode.getRx().getNumber(); + pRectangle->mnRy = rRectNode.getRy().getNumber(); + + pRectangle->mnStrokeWidth + = rRectNode.getSvgStyleAttributes()->getStrokeWidth().getNumber(); + + const basegfx::BColor* pFillColor = rRectNode.getSvgStyleAttributes()->getFill(); + if (pFillColor) + pRectangle->mpFillColor = std::make_shared(*pFillColor); + + const basegfx::BColor* pStrokeColor = rRectNode.getSvgStyleAttributes()->getStroke(); + if (pStrokeColor) + pRectangle->mpStrokeColor = std::make_shared(*pStrokeColor); + mpCurrent->maChildren.push_back(pRectangle); } break; case svgio::svgreader::SVGTokenPath: { auto const& rPathNode = static_cast(rNode); + auto pPath = rPathNode.getPath(); if (pPath) { auto pDrawPath = std::make_shared(*pPath); + + pDrawPath->mnStrokeWidth + = rPathNode.getSvgStyleAttributes()->getStrokeWidth().getNumber(); + + const basegfx::BColor* pFillColor = rPathNode.getSvgStyleAttributes()->getFill(); + if (pFillColor) + pDrawPath->mpFillColor = std::make_shared(*pFillColor); + + const basegfx::BColor* pStrokeColor + = rPathNode.getSvgStyleAttributes()->getStroke(); + if (pStrokeColor) + pDrawPath->mpStrokeColor = std::make_shared(*pStrokeColor); + mpCurrent->maChildren.push_back(pDrawPath); } } -- cgit