[Libreoffice-commits] core.git: oox/source sd/qa

Szymon Kłos szymon.klos at collabora.com
Thu Oct 26 06:02:37 UTC 2017


 oox/source/export/drawingml.cxx     |   17 +++++++++++++++++
 sd/qa/unit/data/pptx/group-rot.pptx |binary
 sd/qa/unit/data/pptx/group.pptx     |binary
 sd/qa/unit/export-tests-ooxml2.cxx  |   30 ++++++++++++++++++++++++++++++
 4 files changed, 47 insertions(+)

New commits:
commit 9ae1e094d5a8a5b4432c88ebea0ca9fc1c79f602
Author: Szymon Kłos <szymon.klos at collabora.com>
Date:   Tue Oct 24 22:39:08 2017 +0200

    PPTX export: correct position of rotated groups
    
    * added testcase for tdf#113263
    
    Change-Id: I7abf68d8fb4ffd8b883cfbf4d69916912add8182
    Reviewed-on: https://gerrit.libreoffice.org/43794
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Szymon Kłos <szymon.klos at collabora.com>

diff --git a/oox/source/export/drawingml.cxx b/oox/source/export/drawingml.cxx
index 5e1487dd9d9c..d243a4f99d13 100644
--- a/oox/source/export/drawingml.cxx
+++ b/oox/source/export/drawingml.cxx
@@ -1294,11 +1294,17 @@ void DrawingML::WriteShapeTransformation( const Reference< XShape >& rXShape, sa
     awt::Point aPos = rXShape->getPosition();
     awt::Size aSize = rXShape->getSize();
 
+    bool bPositiveY = true;
+    bool bPositiveX = true;
+
     if (GetDocumentType() == DOCUMENT_DOCX && m_xParent.is())
     {
         awt::Point aParentPos = m_xParent->getPosition();
         aPos.X -= aParentPos.X;
         aPos.Y -= aParentPos.Y;
+
+        bPositiveX = aParentPos.X >= 0;
+        bPositiveY = aParentPos.Y >= 0;
     }
 
     if ( aSize.Width < 0 )
@@ -1316,6 +1322,17 @@ void DrawingML::WriteShapeTransformation( const Reference< XShape >& rXShape, sa
             aPos.X-=(1-faccos*cos(nRotation*F_PI18000))*aSize.Width/2-facsin*sin(nRotation*F_PI18000)*aSize.Height/2;
             aPos.Y-=(1-faccos*cos(nRotation*F_PI18000))*aSize.Height/2+facsin*sin(nRotation*F_PI18000)*aSize.Width/2;
         }
+        else if(nRotation == 18000)
+        {
+            if (!bFlipV && bPositiveX)
+            {
+                aPos.X -= aSize.Width;
+            }
+            if (!bFlipH && bPositiveY)
+            {
+                aPos.Y -= aSize.Height;
+            }
+        }
 
         // The RotateAngle property's value is independent from any flipping, and that's exactly what we need here.
         uno::Reference<beans::XPropertySet> xPropertySet(rXShape, uno::UNO_QUERY);
diff --git a/sd/qa/unit/data/pptx/group-rot.pptx b/sd/qa/unit/data/pptx/group-rot.pptx
new file mode 100755
index 000000000000..11b2d6367da0
Binary files /dev/null and b/sd/qa/unit/data/pptx/group-rot.pptx differ
diff --git a/sd/qa/unit/data/pptx/group.pptx b/sd/qa/unit/data/pptx/group.pptx
new file mode 100755
index 000000000000..8895fe2a2203
Binary files /dev/null and b/sd/qa/unit/data/pptx/group.pptx differ
diff --git a/sd/qa/unit/export-tests-ooxml2.cxx b/sd/qa/unit/export-tests-ooxml2.cxx
index 4b3eaf38d9c1..dc314491de03 100644
--- a/sd/qa/unit/export-tests-ooxml2.cxx
+++ b/sd/qa/unit/export-tests-ooxml2.cxx
@@ -120,6 +120,8 @@ public:
     void testGroupRotation();
     void testTdf104788();
     void testSmartartRotation2();
+    void testGroupsPosition();
+    void testGroupsRotatedPosition();
     void testAccentColor();
 
     CPPUNIT_TEST_SUITE(SdOOXMLExportTest2);
@@ -166,6 +168,8 @@ public:
     CPPUNIT_TEST(testGroupRotation);
     CPPUNIT_TEST(testTdf104788);
     CPPUNIT_TEST(testSmartartRotation2);
+    CPPUNIT_TEST(testGroupsPosition);
+    CPPUNIT_TEST(testGroupsRotatedPosition);
     CPPUNIT_TEST(testAccentColor);
 
     CPPUNIT_TEST_SUITE_END();
@@ -1253,6 +1257,32 @@ void SdOOXMLExportTest2::testSmartartRotation2()
     assertXPath(pXmlDocContent, "/p:sld/p:cSld/p:spTree/p:grpSp/p:sp[3]/p:txBody/a:bodyPr", "rot", "10800000");
 }
 
+void SdOOXMLExportTest2::testGroupsPosition()
+{
+    ::sd::DrawDocShellRef xDocShRef = loadURL(m_directories.getURLFromSrc("sd/qa/unit/data/pptx/group.pptx"), PPTX);
+    utl::TempFile tempFile;
+    xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
+    xDocShRef->DoClose();
+
+    xmlDocPtr pXmlDocContent = parseExport(tempFile, "ppt/slides/slide1.xml");
+    assertXPath(pXmlDocContent, "/p:sld/p:cSld/p:spTree/p:grpSp/p:sp[3]/p:spPr/a:xfrm/a:off", "x", "6796800");
+    assertXPath(pXmlDocContent, "/p:sld/p:cSld/p:spTree/p:grpSp/p:sp[3]/p:spPr/a:xfrm/a:off", "y", "4273920");
+    assertXPath(pXmlDocContent, "/p:sld/p:cSld/p:spTree/p:grpSp[1]/p:sp[1]/p:spPr/a:xfrm/a:off", "x", "4040640");
+    assertXPath(pXmlDocContent, "/p:sld/p:cSld/p:spTree/p:grpSp[1]/p:sp[1]/p:spPr/a:xfrm/a:off", "y", "4273920");
+}
+
+void SdOOXMLExportTest2::testGroupsRotatedPosition()
+{
+    ::sd::DrawDocShellRef xDocShRef = loadURL(m_directories.getURLFromSrc("sd/qa/unit/data/pptx/group-rot.pptx"), PPTX);
+    utl::TempFile tempFile;
+    xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
+    xDocShRef->DoClose();
+
+    xmlDocPtr pXmlDocContent = parseExport(tempFile, "ppt/slides/slide1.xml");
+    assertXPath(pXmlDocContent, "/p:sld/p:cSld/p:spTree/p:grpSp/p:sp[3]/p:spPr/a:xfrm/a:off", "x", "2857320");
+    assertXPath(pXmlDocContent, "/p:sld/p:cSld/p:spTree/p:grpSp/p:sp[3]/p:spPr/a:xfrm/a:off", "y", "4026960");
+}
+
 void SdOOXMLExportTest2::testAccentColor()
 {
     ::sd::DrawDocShellRef xDocShRef = loadURL(m_directories.getURLFromSrc("sd/qa/unit/data/pptx/accent-color.pptx"), PPTX);


More information about the Libreoffice-commits mailing list