summaryrefslogtreecommitdiff
path: root/xmloff
diff options
context:
space:
mode:
authorArmin Le Grand <alg@apache.org>2014-03-19 14:51:18 +0000
committerCaolán McNamara <caolanm@redhat.com>2014-03-20 14:40:31 +0000
commitc6e316f52021cc26d4c5ec9a7b87a07fbf595b62 (patch)
tree6769e6e7908fbec68bba3752238b16dc58a0eafd /xmloff
parent03fc5edba3f34c63315daebd08ae2888bf5332b2 (diff)
Resolves: #i124452# correct svg:viewBox for EnhancedCustomShape...
geometry import when no width and no height are given (cherry picked from commit 4e04ad3623f2ab4693dcd50a9934fc836e190a6f) Conflicts: xmloff/source/draw/ximpcustomshape.cxx Change-Id: I2589fd28dcbdf767d324f84e0a2342370ad6f061
Diffstat (limited to 'xmloff')
-rw-r--r--xmloff/source/draw/ximpcustomshape.cxx43
1 files changed, 42 insertions, 1 deletions
diff --git a/xmloff/source/draw/ximpcustomshape.cxx b/xmloff/source/draw/ximpcustomshape.cxx
index f60580f770ff..31c9e31a177e 100644
--- a/xmloff/source/draw/ximpcustomshape.cxx
+++ b/xmloff/source/draw/ximpcustomshape.cxx
@@ -44,7 +44,9 @@
#include <com/sun/star/drawing/EnhancedCustomShapeSegmentCommand.hpp>
#include <com/sun/star/drawing/EnhancedCustomShapeTextPathMode.hpp>
#include <com/sun/star/drawing/ProjectionMode.hpp>
+#include <com/sun/star/drawing/HomogenMatrix3.hpp>
#include <boost/unordered_map.hpp>
+#include <basegfx/vector/b2dvector.hxx>
#include <sax/tools/converter.hxx>
using namespace ::com::sun::star;
@@ -933,7 +935,46 @@ void XMLEnhancedCustomShapeContext::StartElement( const uno::Reference< xml::sax
case EAS_viewBox :
{
SdXMLImExViewBox aViewBox( rValue, GetImport().GetMM100UnitConverter() );
- awt::Rectangle aRect( aViewBox.GetX(), aViewBox.GetY(), aViewBox.GetWidth(), aViewBox.GetHeight() );
+ awt::Rectangle aRect(
+ basegfx::fround(aViewBox.GetX()),
+ basegfx::fround(aViewBox.GetY()),
+ basegfx::fround(aViewBox.GetWidth()),
+ basegfx::fround(aViewBox.GetHeight()));
+
+ if(0 == aRect.Width && 0 == aRect.Height)
+ {
+ // #i124452# If in svg:viewBox no width and height is given the objects should normally
+ // not be visible at all, but in this case it is a bug in LO to write empty svg:viewBox
+ // entries for CustomShapes. To allow for a better ODF user experience, just correct this
+ // here by getting the real object scale from the already set transformation from the xShape.
+ // Hopefully LO will fix that bug (but this will still leave the files with the error), but
+ // even when not this will do no harm as long noone uses this state explicitely for some
+ // purpose (e.g. to really have CustomShapes without content, but unlikely).
+ uno::Reference< beans::XPropertySet > xProps(mrxShape, uno::UNO_QUERY_THROW);
+ uno::Any aObjectTransform = xProps->getPropertyValue(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Transformation")));
+ drawing::HomogenMatrix3 aTransformMatrix;
+ aObjectTransform >>= aTransformMatrix;
+ basegfx::B2DHomMatrix aMatrix;
+
+ aMatrix.set(0, 0, aTransformMatrix.Line1.Column1);
+ aMatrix.set(0, 1, aTransformMatrix.Line1.Column2);
+ aMatrix.set(0, 2, aTransformMatrix.Line1.Column3);
+ aMatrix.set(1, 0, aTransformMatrix.Line2.Column1);
+ aMatrix.set(1, 1, aTransformMatrix.Line2.Column2);
+ aMatrix.set(1, 2, aTransformMatrix.Line2.Column3);
+ aMatrix.set(2, 0, aTransformMatrix.Line3.Column1);
+ aMatrix.set(2, 1, aTransformMatrix.Line3.Column2);
+ aMatrix.set(2, 2, aTransformMatrix.Line3.Column3);
+
+ basegfx::B2DVector aScale, aTranslate;
+ double fRotate, fShearX;
+
+ aMatrix.decompose(aScale, aTranslate, fRotate, fShearX);
+
+ aRect.Width = basegfx::fround(fabs(aScale.getX()));
+ aRect.Height = basegfx::fround(fabs(aScale.getY()));
+ }
+
beans::PropertyValue aProp;
aProp.Name = EASGet( EAS_ViewBox );
aProp.Value <<= aRect;