sc/qa/unit/subsequent_export-test.cxx |   16 ++++++++++++----
 sc/source/filter/xcl97/xcl97rec.cxx   |   10 ++++++++++
 2 files changed, 22 insertions(+), 4 deletions(-)

New commits:
commit 87118c2e311af035171ec4b53609cc9e7a7b139e
Author:     Szabolcs Toth <toth.szabo...@nisz.hu>
AuthorDate: Tue Dec 8 16:21:25 2020 +0100
Commit:     Gabor Kelemen <kelemen.gab...@nisz.hu>
CommitDate: Tue Mar 2 15:17:45 2021 +0100

    tdf#123613 XLSX export: fix position of rotated shapes
    
    based on the bounding box of the custom shape.
    
    Change-Id: I63a2a4380ae0c6c0eb37d3e5e4dcbfc839b410a3
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107424
    Tested-by: László Németh <nem...@numbertext.org>
    Reviewed-by: László Németh <nem...@numbertext.org>
    (cherry picked from commit a4eec60c388cc65ae0b4c8ea0fd7235f520a749d)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/111786
    Tested-by: Gabor Kelemen <kelemen.gab...@nisz.hu>
    Reviewed-by: Gabor Kelemen <kelemen.gab...@nisz.hu>

diff --git a/sc/qa/unit/subsequent_export-test.cxx 
b/sc/qa/unit/subsequent_export-test.cxx
index f9290a8d5995..3010bac88ead 100644
--- a/sc/qa/unit/subsequent_export-test.cxx
+++ b/sc/qa/unit/subsequent_export-test.cxx
@@ -5364,8 +5364,9 @@ void ScExportTest::testHeaderFontStyleXLSX()
 
 void ScExportTest::testTdf135828_Shape_Rect()
 {
-    // tdf#135828 Check that the width and the height of rectangle of the shape
-    // is correct.
+    // tdf#135828 Check that the width and the height of rectangle of the 
shape is correct.
+    // tdf#123613 Check the positioning, and allow massive rounding errors 
because of the back and
+    // forth conversion between emu and hmm.
     ScDocShellRef xShell = loadDoc("tdf135828_Shape_Rect.", FORMAT_XLSX);
     CPPUNIT_ASSERT(xShell.is());
 
@@ -5377,8 +5378,15 @@ void ScExportTest::testTdf135828_Shape_Rect()
     xmlDocUniquePtr pDrawing = XPathHelper::parseExport(pXPathFile, 
m_xSFactory, "xl/drawings/drawing1.xml");
     CPPUNIT_ASSERT(pDrawing);
 
-    assertXPath(pDrawing, 
"/xdr:wsDr/xdr:twoCellAnchor/xdr:sp/xdr:spPr/a:xfrm/a:ext", "cx", "294480"); // 
width
-    assertXPath(pDrawing, 
"/xdr:wsDr/xdr:twoCellAnchor/xdr:sp/xdr:spPr/a:xfrm/a:ext", "cy", "1990440"); 
// height
+    double nXPosOfTopleft = getXPath(pDrawing, 
"/xdr:wsDr/xdr:twoCellAnchor/xdr:sp/xdr:spPr/a:xfrm/a:off", "x" ).toDouble();
+    double nYPosOfTopleft = getXPath(pDrawing, 
"/xdr:wsDr/xdr:twoCellAnchor/xdr:sp/xdr:spPr/a:xfrm/a:off", "y" ).toDouble();
+    double nWidth         = getXPath(pDrawing, 
"/xdr:wsDr/xdr:twoCellAnchor/xdr:sp/xdr:spPr/a:xfrm/a:ext", "cx").toDouble();
+    double nHeight        = getXPath(pDrawing, 
"/xdr:wsDr/xdr:twoCellAnchor/xdr:sp/xdr:spPr/a:xfrm/a:ext", "cy").toDouble();
+
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(  854640, nXPosOfTopleft, 10000);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( -570600, nYPosOfTopleft, 10000);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(  294840,         nWidth, 10000);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( 1988280,        nHeight, 10000);
 }
 
 void ScExportTest::testTdf123353()
diff --git a/sc/source/filter/xcl97/xcl97rec.cxx 
b/sc/source/filter/xcl97/xcl97rec.cxx
index 215c38055cd7..77265db3f21f 100644
--- a/sc/source/filter/xcl97/xcl97rec.cxx
+++ b/sc/source/filter/xcl97/xcl97rec.cxx
@@ -1103,6 +1103,16 @@ void XclObjAny::WriteFromTo( XclExpXmlStream& rStrm, 
const Reference< XShape >&
     awt::Point  aTopLeft    = rShape->getPosition();
     awt::Size   aSize       = rShape->getSize();
 
+    // size is correct, but aTopLeft needs correction for rotated shapes
+    SdrObject* pObj = SdrObject::getSdrObjectFromXShape(rShape.get());
+    sal_Int32 nRotation = pObj->GetRotateAngle();
+    if ( pObj && nRotation != 0 && pObj->GetObjIdentifier() == OBJ_CUSTOMSHAPE 
)
+    {
+        const tools::Rectangle& aSnapRect(pObj->GetSnapRect()); // bounding 
box of the rotated shape
+        aTopLeft.X = aSnapRect.getX() + (aSnapRect.GetWidth() / 2) - 
(aSize.Width / 2);
+        aTopLeft.Y = aSnapRect.getY() + (aSnapRect.GetHeight() / 2) - 
(aSize.Height / 2);
+    }
+
     uno::Reference< beans::XPropertySet > xShapeProperties(rShape, 
uno::UNO_QUERY_THROW);
     uno::Any nRotProp = xShapeProperties->getPropertyValue("RotateAngle");
     sal_Int32 nRot = nRotProp.get<sal_Int32>();
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to