Kaydet (Commit) 7b3f5521 authored tarafından Armin Le Grand's avatar Armin Le Grand

i121965 Take draw:transform into account for draw:connector shapes

üst 4a1295be
......@@ -79,6 +79,7 @@
#include <com/sun/star/container/XChild.hpp>
#include <com/sun/star/text/XTextDocument.hpp>
#include <basegfx/vector/b2dvector.hxx>
#include <basegfx/point/b2dpoint.hxx>
using ::rtl::OUString;
using ::rtl::OUStringBuffer;
......@@ -1805,6 +1806,11 @@ void SdXMLConnectorShapeContext::processAttribute( sal_uInt16 nPrefix, const ::r
SvXMLUnitConverter::convertEnum( mnType, rValue, aXML_ConnectionKind_EnumMap );
return;
}
// #121965# draw:transform may be used in ODF1.2, e.g. exports from MS seem to use these
else if( IsXMLToken( rLocalName, XML_TRANSFORM ) )
{
mnTransform.SetString(rValue, GetImport().GetMM100UnitConverter());
}
}
case XML_NAMESPACE_SVG:
{
......@@ -1892,6 +1898,29 @@ void SdXMLConnectorShapeContext::StartElement(const uno::Reference< xml::sax::XA
AddShape("com.sun.star.drawing.ConnectorShape");
if(mxShape.is())
{
// #121965# if draw:transform is used, apply directly to the start
// and end positions before using these
if(mnTransform.NeedsAction())
{
// transformation is used, apply to object.
::basegfx::B2DHomMatrix aMat;
mnTransform.GetFullTransform(aMat);
if(!aMat.isIdentity())
{
basegfx::B2DPoint aStart(maStart.X, maStart.Y);
basegfx::B2DPoint aEnd(maEnd.X, maEnd.Y);
aStart = aMat * aStart;
aEnd = aMat * aEnd;
maStart.X = basegfx::fround(aStart.getX());
maStart.Y = basegfx::fround(aStart.getY());
maEnd.X = basegfx::fround(aEnd.getX());
maEnd.Y = basegfx::fround(aEnd.getY());
}
}
// add connection ids
if( maStartShapeId.getLength() )
GetImport().GetShapeImport()->addShapeConnection( mxShape, sal_True, maStartShapeId, mnStartGlueId );
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment