summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Mehrbrodt <s.mehrbrodt@gmail.com>2013-12-07 12:14:40 +0100
committerMiklos Vajna <vmiklos@collabora.co.uk>2013-12-08 11:51:00 +0100
commit09c6257262244456838daf16eb7c034adfeb8fa0 (patch)
tree58a4cb96b5c4bdc5fb5918b12b66d228650989f5
parent079887848b3dc835050176d92c552009c770b641 (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.cxx17
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