filter/source/svg/svgreader.cxx | 164 +++++++++++++++++----------------------- 1 file changed, 70 insertions(+), 94 deletions(-)
New commits: commit 1ac100610860a17792713afe948fa961c5f7cbe4 Author: Chr. Rossmanith <chr.rossman...@gmx.de> Date: Sat Apr 28 20:20:54 2012 +0200 Move polygon creation from rect attrs into helper method diff --git a/filter/source/svg/svgreader.cxx b/filter/source/svg/svgreader.cxx index 563060b..dfb33c8 100644 --- a/filter/source/svg/svgreader.cxx +++ b/filter/source/svg/svgreader.cxx @@ -75,6 +75,56 @@ namespace svgi namespace { +void lcl_RectAttrs2Polygon( const uno::Reference<xml::dom::XNamedNodeMap>& xAttributes, const State& rCurrState, basegfx::B2DPolygon& rPoly ) +{ + // collect attributes + const sal_Int32 nNumAttrs( xAttributes->getLength() ); + rtl::OUString sAttributeValue; + bool bRxSeen=false, bRySeen=false; + double x=0.0,y=0.0,width=0.0,height=0.0,rx=0.0,ry=0.0; + for( sal_Int32 i=0; i<nNumAttrs; ++i ) + { + sAttributeValue = xAttributes->item(i)->getNodeValue(); + const sal_Int32 nAttribId( + getTokenId(xAttributes->item(i)->getNodeName())); + switch(nAttribId) + { + case XML_X: + x = convLength(sAttributeValue,rCurrState,'h'); + break; + case XML_Y: + y = convLength(sAttributeValue,rCurrState,'v'); + break; + case XML_WIDTH: + width = convLength(sAttributeValue,rCurrState,'h'); + break; + case XML_HEIGHT: + height = convLength(sAttributeValue,rCurrState,'v'); + break; + case XML_RX: + rx = convLength(sAttributeValue,rCurrState,'h'); + bRxSeen=true; + break; + case XML_RY: + ry = convLength(sAttributeValue,rCurrState,'v'); + bRySeen=true; + break; + default: + // skip + break; + } + } + + if( bRxSeen && !bRySeen ) + ry = rx; + else if( bRySeen && !bRxSeen ) + rx = ry; + + rPoly = basegfx::tools::createPolygonFromRect( + basegfx::B2DRange(x,y,x+width,y+height), + rx/(0.5*width), ry/(0.5*height) ); +} + /** visits all children of the specified type with the given functor */ template<typename Func> void visitChildren(const Func& rFunc, @@ -1305,54 +1355,9 @@ struct ShapeWritingVisitor } case XML_RECT: { - // collect attributes - const sal_Int32 nNumAttrs( xAttributes->getLength() ); - rtl::OUString sAttributeValue; - bool bRxSeen=false, bRySeen=false; - double x=0.0,y=0.0,width=0.0,height=0.0,rx=0.0,ry=0.0; - for( sal_Int32 i=0; i<nNumAttrs; ++i ) - { - sAttributeValue = xAttributes->item(i)->getNodeValue(); - const sal_Int32 nAttribId( - getTokenId(xAttributes->item(i)->getNodeName())); - switch(nAttribId) - { - case XML_X: - x = convLength(sAttributeValue,maCurrState,'h'); - break; - case XML_Y: - y = convLength(sAttributeValue,maCurrState,'v'); - break; - case XML_WIDTH: - width = convLength(sAttributeValue,maCurrState,'h'); - break; - case XML_HEIGHT: - height = convLength(sAttributeValue,maCurrState,'v'); - break; - case XML_RX: - rx = convLength(sAttributeValue,maCurrState,'h'); - bRxSeen=true; - break; - case XML_RY: - ry = convLength(sAttributeValue,maCurrState,'v'); - bRySeen=true; - break; - default: - // skip - break; - } - } - - if( bRxSeen && !bRySeen ) - ry = rx; - else if( bRySeen && !bRxSeen ) - rx = ry; - basegfx::B2DPolygon aPoly; - aPoly = basegfx::tools::createPolygonFromRect( - basegfx::B2DRange(x,y,x+width,y+height), - rx/(0.5*width), ry/(0.5*height) ); + lcl_RectAttrs2Polygon( xAttributes, maCurrState, aPoly ); writePathShape(xAttrs, xUnoAttrs, xElem, @@ -2149,54 +2154,9 @@ struct ShapeRenderingVisitor } case XML_RECT: { - // collect attributes - const sal_Int32 nNumAttrs( xAttributes->getLength() ); - rtl::OUString sAttributeValue; - bool bRxSeen=false, bRySeen=false; - double x=0.0,y=0.0,width=0.0,height=0.0,rx=0.0,ry=0.0; - for( sal_Int32 i=0; i<nNumAttrs; ++i ) - { - sAttributeValue = xAttributes->item(i)->getNodeValue(); - const sal_Int32 nAttribId( - getTokenId(xAttributes->item(i)->getNodeName())); - switch(nAttribId) - { - case XML_X: - x = convLength(sAttributeValue,maCurrState,'h'); - break; - case XML_Y: - y = convLength(sAttributeValue,maCurrState,'v'); - break; - case XML_WIDTH: - width = convLength(sAttributeValue,maCurrState,'h'); - break; - case XML_HEIGHT: - height = convLength(sAttributeValue,maCurrState,'v'); - break; - case XML_RX: - rx = convLength(sAttributeValue,maCurrState,'h'); - bRxSeen=true; - break; - case XML_RY: - ry = convLength(sAttributeValue,maCurrState,'v'); - bRySeen=true; - break; - default: - // skip - break; - } - } - - if( bRxSeen && !bRySeen ) - ry = rx; - else if( bRySeen && !bRxSeen ) - rx = ry; - basegfx::B2DPolygon aPoly; - aPoly = basegfx::tools::createPolygonFromRect( - basegfx::B2DRange(x,y,x+width,y+height), - rx/(0.5*width), ry/(0.5*height) ); + lcl_RectAttrs2Polygon( xAttributes, maCurrState, aPoly ); renderPathShape(basegfx::B2DPolyPolygon(aPoly)); break; } commit df094fbfbdcf64493f1c337df81d77452333bd86 Author: Chr. Rossmanith <chr.rossman...@gmx.de> Date: Sat Apr 28 19:41:35 2012 +0200 Correct handling of corner radii of rectangles diff --git a/filter/source/svg/svgreader.cxx b/filter/source/svg/svgreader.cxx index 4e6f9f1..563060b 100644 --- a/filter/source/svg/svgreader.cxx +++ b/filter/source/svg/svgreader.cxx @@ -1351,7 +1351,7 @@ struct ShapeWritingVisitor basegfx::B2DPolygon aPoly; aPoly = basegfx::tools::createPolygonFromRect( basegfx::B2DRange(x,y,x+width,y+height), - rx/width, ry/height ); + rx/(0.5*width), ry/(0.5*height) ); writePathShape(xAttrs, xUnoAttrs, @@ -2195,7 +2195,7 @@ struct ShapeRenderingVisitor basegfx::B2DPolygon aPoly; aPoly = basegfx::tools::createPolygonFromRect( basegfx::B2DRange(x,y,x+width,y+height), - rx, ry ); + rx/(0.5*width), ry/(0.5*height) ); renderPathShape(basegfx::B2DPolyPolygon(aPoly)); break; commit 884a5ca1716704249bbd108519c64001258eb0fe Author: Chr. Rossmanith <chr.rossman...@gmx.de> Date: Sat Apr 28 20:36:54 2012 +0200 enable rendering of text without any attributes diff --git a/filter/source/svg/svgreader.cxx b/filter/source/svg/svgreader.cxx index f6dc668..4e6f9f1 100644 --- a/filter/source/svg/svgreader.cxx +++ b/filter/source/svg/svgreader.cxx @@ -157,8 +157,24 @@ struct AnnotatingVisitor maParentStates.push_back(rInitialState); } - void operator()( const uno::Reference<xml::dom::XElement>& ) - {} + void operator()( const uno::Reference<xml::dom::XElement>& xElem) + { + const sal_Int32 nTagId(getTokenId(xElem->getTagName())); + if (nTagId != XML_TEXT) + return; + + maCurrState = maParentStates.back(); + maCurrState.maTransform.identity(); + maCurrState.maViewBox.reset(); + // set default font size here to ensure writing styles for text + if( !mbSeenText && XML_TEXT == nTagId ) + { + maCurrState.mnFontSize = 12.0; + mbSeenText = true; + } + // if necessary, serialize to automatic-style section + writeStyle(xElem,nTagId); + } void operator()( const uno::Reference<xml::dom::XElement>& xElem, const uno::Reference<xml::dom::XNamedNodeMap>& xAttributes ) _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits