Kaydet (Commit) 8c017887 authored tarafından Tomaž Vajngerl's avatar Tomaž Vajngerl Kaydeden (comit) Tomaž Vajngerl

parse more attributes in SvgDrawVisitor

- 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: 's avatarTomaž Vajngerl <quikee@gmail.com>
üst d1127612
......@@ -58,10 +58,19 @@ class DrawRectangle : public DrawBase
{
public:
basegfx::B2DRange maRectangle;
double mnRx;
double mnRy;
double mnStrokeWidth;
std::shared_ptr<basegfx::BColor> mpFillColor;
std::shared_ptr<basegfx::BColor> mpStrokeColor;
DrawRectangle(basegfx::B2DRange const& rRectangle)
: DrawBase(DrawCommandType::Rectangle)
, maRectangle(rRectangle)
, mnRx(1.0)
, mnRy(1.0)
, mnStrokeWidth(1.0)
{
}
};
......@@ -71,9 +80,14 @@ class DrawPath : public DrawBase
public:
basegfx::B2DPolyPolygon maPolyPolygon;
double mnStrokeWidth;
std::shared_ptr<basegfx::BColor> mpFillColor;
std::shared_ptr<basegfx::BColor> mpStrokeColor;
DrawPath(basegfx::B2DPolyPolygon const& rPolyPolygon)
: DrawBase(DrawCommandType::Path)
, maPolyPolygon(rPolyPolygon)
, mnStrokeWidth(1.0)
{
}
};
......
......@@ -18,6 +18,7 @@
#include <svgpathnode.hxx>
#include <svgvisitor.hxx>
#include <tools/color.hxx>
namespace svgio
{
......@@ -37,13 +38,9 @@ void SvgDrawVisitor::visit(svgio::svgreader::SvgNode const& rNode)
{
auto const& rSvgNode = static_cast<svgio::svgreader::SvgSvgNode const&>(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<gfx::DrawRoot*>(mpCurrent.get())->maRectangle
= basegfx::B2DRange(x, y, x + w, y + h);
static_cast<gfx::DrawRoot*>(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<gfx::DrawRectangle>(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<basegfx::BColor>(*pFillColor);
const basegfx::BColor* pStrokeColor = rRectNode.getSvgStyleAttributes()->getStroke();
if (pStrokeColor)
pRectangle->mpStrokeColor = std::make_shared<basegfx::BColor>(*pStrokeColor);
mpCurrent->maChildren.push_back(pRectangle);
}
break;
case svgio::svgreader::SVGTokenPath:
{
auto const& rPathNode = static_cast<svgio::svgreader::SvgPathNode const&>(rNode);
auto pPath = rPathNode.getPath();
if (pPath)
{
auto pDrawPath = std::make_shared<gfx::DrawPath>(*pPath);
pDrawPath->mnStrokeWidth
= rPathNode.getSvgStyleAttributes()->getStrokeWidth().getNumber();
const basegfx::BColor* pFillColor = rPathNode.getSvgStyleAttributes()->getFill();
if (pFillColor)
pDrawPath->mpFillColor = std::make_shared<basegfx::BColor>(*pFillColor);
const basegfx::BColor* pStrokeColor
= rPathNode.getSvgStyleAttributes()->getStroke();
if (pStrokeColor)
pDrawPath->mpStrokeColor = std::make_shared<basegfx::BColor>(*pStrokeColor);
mpCurrent->maChildren.push_back(pDrawPath);
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment