filter/source/svg/gfxtypes.hxx | 2 - filter/source/svg/svgreader.cxx | 64 +++++++++++++--------------------------- 2 files changed, 22 insertions(+), 44 deletions(-)
New commits: commit 82850c932054a5a1549c3cfbfc61e8e3dcb6e0fb Author: Chr. Rossmanith <chrrossman...@gmx.de> Date: Tue May 1 16:44:37 2012 +0200 SVG: use scale in font size and text baseline heuristic diff --git a/filter/source/svg/svgreader.cxx b/filter/source/svg/svgreader.cxx index f0d3fde..062c73f 100644 --- a/filter/source/svg/svgreader.cxx +++ b/filter/source/svg/svgreader.cxx @@ -507,8 +507,16 @@ struct AnnotatingVisitor rtl::Reference<SvXMLAttributeList> xAttrs( new SvXMLAttributeList() ); uno::Reference<xml::sax::XAttributeList> xUnoAttrs( xAttrs.get() ); - if (XML_TEXT == nTagId) + if (XML_TEXT == nTagId) { rState.mbIsText = true; + basegfx::B2DTuple aScale, aTranslate; + double fRotate, fShearX; + if (rState.maCTM.decompose(aScale, aTranslate, fRotate, fShearX)) + { + rState.mnFontSize *= aScale.getX(); + } + } + std::pair<StatePool::iterator, bool> aRes = mrStates.insert(rState); SAL_INFO ("svg", "size " << mrStates.size() << " id " << const_cast<State&>(*aRes.first).mnStyleId); @@ -1519,18 +1527,26 @@ struct ShapeWritingVisitor // actually export text xAttrs->Clear(); - // some heuristic attempts to have text output - // baseline-relative - y -= 2.0*maCurrState.mnFontSize/3.0; // extract basic transformations out of CTM basegfx::B2DTuple aScale, aTranslate; double fRotate, fShearX; if (maCurrState.maCTM.decompose(aScale, aTranslate, fRotate, fShearX)) { + // some heuristic attempts to have text output + // baseline-relative + y -= 2.0*maCurrState.mnFontSize/aScale.getX()/3.0; + // apply transform + x *= aScale.getX(); + y *= aScale.getY(); x += aTranslate.getX(); y += aTranslate.getY(); } + else { + // some heuristic attempts to have text output + // baseline-relative + y -= 2.0*maCurrState.mnFontSize/3.0; + } xAttrs->AddAttribute( USTR( "svg:x" ), rtl::OUString::valueOf(pt2mm(x))+USTR("mm")); xAttrs->AddAttribute( USTR( "svg:y" ), rtl::OUString::valueOf(pt2mm(y))+USTR("mm")); commit 9c9bf9a3adf6b885289a698ed270f51554bca86a Author: Chr. Rossmanith <chrrossman...@gmx.de> Date: Tue May 1 16:38:52 2012 +0200 SVG: remove unused code in svgreader.cxx diff --git a/filter/source/svg/svgreader.cxx b/filter/source/svg/svgreader.cxx index 1cd7c54..f0d3fde 100644 --- a/filter/source/svg/svgreader.cxx +++ b/filter/source/svg/svgreader.cxx @@ -1496,7 +1496,7 @@ struct ShapeWritingVisitor // collect attributes const sal_Int32 nNumAttrs( xAttributes->getLength() ); rtl::OUString sAttributeValue; - double x=0.0,y=0.0,width=0.0,height=0.0; + double x=0.0,y=0.0; for( sal_Int32 i=0; i<nNumAttrs; ++i ) { sAttributeValue = xAttributes->item(i)->getNodeValue(); @@ -1510,12 +1510,6 @@ struct ShapeWritingVisitor 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; default: // skip break; @@ -1532,31 +1526,14 @@ struct ShapeWritingVisitor // extract basic transformations out of CTM basegfx::B2DTuple aScale, aTranslate; double fRotate, fShearX; - ::rtl::OUString sTransformValue; if (maCurrState.maCTM.decompose(aScale, aTranslate, fRotate, fShearX)) { - rtl::OUString sTransform; x += aTranslate.getX(); y += aTranslate.getY(); - - sTransform += - USTR("scale(") + - rtl::OUString::valueOf(aScale.getX()) + - USTR(", ") + - rtl::OUString::valueOf(aScale.getX()) + - USTR(")"); - - if( fRotate ) - sTransform += USTR(" rotate(") + rtl::OUString::valueOf(fRotate*180.0/M_PI) + USTR(")"); - - if( fShearX ) - sTransform += USTR(" skewX(") + rtl::OUString::valueOf(fShearX*180.0/M_PI) + USTR(")"); } xAttrs->AddAttribute( USTR( "svg:x" ), rtl::OUString::valueOf(pt2mm(x))+USTR("mm")); xAttrs->AddAttribute( USTR( "svg:y" ), rtl::OUString::valueOf(pt2mm(y))+USTR("mm")); - (void)width; - (void)height; xAttrs->AddAttribute( USTR( "draw:style-name" ), USTR("svggraphicstyle")+sStyleId ); mxDocumentHandler->startElement(USTR("draw:frame"),xUnoAttrs); commit 5977a8d415bc205947f8276d16288203ed93594a Author: Chr. Rossmanith <chrrossman...@gmx.de> Date: Tue May 1 16:30:32 2012 +0200 SVG: move default font size into state ctor diff --git a/filter/source/svg/gfxtypes.hxx b/filter/source/svg/gfxtypes.hxx index daca2be..68463c8 100644 --- a/filter/source/svg/gfxtypes.hxx +++ b/filter/source/svg/gfxtypes.hxx @@ -175,7 +175,7 @@ struct State maViewBox(), mbIsText(false), maFontFamily(), // app-default - mnFontSize(0), + mnFontSize(12), maFontStyle("normal"), maFontVariant("normal"), mnFontWeight(400.0), diff --git a/filter/source/svg/svgreader.cxx b/filter/source/svg/svgreader.cxx index 2c0c09b..1cd7c54 100644 --- a/filter/source/svg/svgreader.cxx +++ b/filter/source/svg/svgreader.cxx @@ -194,7 +194,6 @@ struct AnnotatingVisitor StateMap& rStateMap, const State& rInitialState, const uno::Reference<xml::sax::XDocumentHandler>& xDocumentHandler) : - mbSeenText(false), mnCurrStateId(0), maCurrState(), maParentStates(), @@ -216,12 +215,6 @@ struct AnnotatingVisitor 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); } @@ -330,13 +323,6 @@ struct AnnotatingVisitor 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; - } - // scan for style info const sal_Int32 nNumAttrs( xAttributes->getLength() ); rtl::OUString sAttributeValue; @@ -1240,7 +1226,6 @@ struct AnnotatingVisitor } } - bool mbSeenText; sal_Int32 mnCurrStateId; State maCurrState; std::vector<State> maParentStates; _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits