diff options
author | Samuel Mehrbrodt <s.mehrbrodt@gmail.com> | 2013-12-07 12:14:40 +0100 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.co.uk> | 2013-12-08 11:51:00 +0100 |
commit | 09c6257262244456838daf16eb7c034adfeb8fa0 (patch) | |
tree | 58a4cb96b5c4bdc5fb5918b12b66d228650989f5 | |
parent | 079887848b3dc835050176d92c552009c770b641 (diff) |
fdo#39206 Add support for image transformation in SVG Import
Change-Id: I268599b0c13bbacf5db526fed79453a5443145a5
Reviewed-on: https://gerrit.libreoffice.org/6968
Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk>
Tested-by: Miklos Vajna <vmiklos@collabora.co.uk>
(cherry picked from commit fb978b8123a47123d184daf390ce17eaacbc05d9)
-rw-r--r-- | filter/source/svg/svgreader.cxx | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/filter/source/svg/svgreader.cxx b/filter/source/svg/svgreader.cxx index 72ff68f86ff6..570ea10861be 100644 --- a/filter/source/svg/svgreader.cxx +++ b/filter/source/svg/svgreader.cxx @@ -1421,7 +1421,7 @@ struct ShapeWritingVisitor // collect attributes const sal_Int32 nNumAttrs( xAttributes->getLength() ); OUString sAttributeValue; - double x=0.0,y=0.0,width=0.0,height=0.0; + double x=0.0, y=0.0, width=0.0, height=0.0; for( sal_Int32 i=0; i<nNumAttrs; ++i ) { sAttributeValue = xAttributes->item(i)->getNodeValue(); @@ -1446,6 +1446,20 @@ struct ShapeWritingVisitor break; } } + // extract basic transformations out of CTM + basegfx::B2DTuple aScale, aTranslate; + double fRotate, fShearX; + if (maCurrState.maCTM.decompose(aScale, aTranslate, fRotate, fShearX)) + { + // apply transform + x *= aScale.getX(); + width *= aScale.getX(); + y *= aScale.getY(); + height *= aScale.getY(); + x += aTranslate.getX(); + y += aTranslate.getY(); + //TODO: Rotate + } OUString sValue = xElem->hasAttribute("href") ? xElem->getAttribute("href") : ""; OString aValueUtf8( sValue.getStr(), sValue.getLength(), RTL_TEXTENCODING_UTF8 ); @@ -1508,6 +1522,7 @@ struct ShapeWritingVisitor y *= aScale.getY(); x += aTranslate.getX(); y += aTranslate.getY(); + //TODO: Rotate } else { // some heuristic attempts to have text output |