[Libreoffice-commits] core.git: Branch 'libreoffice-5-4' - include/oox oox/source sd/qa

Szymon Kłos szymon.klos at collabora.com
Tue Oct 31 14:29:59 UTC 2017


 include/oox/drawingml/drawingmltypes.hxx     |   15 +++++++++++++++
 oox/source/export/chartexport.cxx            |   22 +---------------------
 oox/source/export/drawingml.cxx              |    4 +++-
 sd/qa/unit/data/pptx/smartart-rotation2.pptx |binary
 sd/qa/unit/export-tests-ooxml2.cxx           |   14 +++++++++++++-
 5 files changed, 32 insertions(+), 23 deletions(-)

New commits:
commit 27b4c48e63d95fd90ab3f4c5014b98cdf94ae611
Author: Szymon Kłos <szymon.klos at collabora.com>
Date:   Fri Oct 6 16:04:25 2017 +0200

    SmartArt: export text rotation in the PPTX
    
    Slightly modified unittest from master.
    libreoffice-5-4 doesn't export shape groups so far.
    
    Change-Id: I74bfc172fe7434d14de468ecfd3412636e53780c
    Reviewed-on: https://gerrit.libreoffice.org/43202
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Szymon Kłos <szymon.klos at collabora.com>
    Reviewed-on: https://gerrit.libreoffice.org/43364
    Reviewed-by: Miklos Vajna <vmiklos at collabora.co.uk>

diff --git a/include/oox/drawingml/drawingmltypes.hxx b/include/oox/drawingml/drawingmltypes.hxx
index 0b1ea4be7c72..751f7865c374 100644
--- a/include/oox/drawingml/drawingmltypes.hxx
+++ b/include/oox/drawingml/drawingmltypes.hxx
@@ -151,6 +151,21 @@ struct IndexRange {
 /** retrieve the content of CT_IndexRange */
 IndexRange GetIndexRange( const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttributes );
 
+/**
+* nRotation is a 100th of a degree and the return value is
+* in a 60,000th of a degree
+*
+* Also rotation is in opposite directions so multiply with -1
+*/
+inline OString calcRotationValue(sal_Int32 nRotation)
+{
+    if (nRotation > 18000) // 180 degree
+    {
+        nRotation -= 36000;
+    }
+    nRotation *= -600;
+    return OString::number(nRotation);
+}
 
 const sal_Int32 EMU_PER_HMM = 360;      /// 360 EMUs per 1/100 mm.
 const sal_Int32 EMU_PER_PT = 12700;
diff --git a/oox/source/export/chartexport.cxx b/oox/source/export/chartexport.cxx
index 28f8c6c4d7f8..a3a1e957a76f 100644
--- a/oox/source/export/chartexport.cxx
+++ b/oox/source/export/chartexport.cxx
@@ -1038,26 +1038,6 @@ void ChartExport::exportLegend( const Reference< css::chart::XChartDocument >& x
     pFS->endElement( FSNS( XML_c, XML_legend ) );
 }
 
-namespace {
-
-/**
- * nRotation is a 100th of a degree and the return value is
- * in a 60,000th of a degree
- *
- * Also rotation is in opposite directions so multiply with -1
- */
-OString calcRotationValue(sal_Int32 nRotation)
-{
-    if (nRotation > 18000) // 180 degree
-    {
-        nRotation -= 36000;
-    }
-    nRotation *= -600;
-    return OString::number(nRotation);
-}
-
-}
-
 void ChartExport::exportTitle( const Reference< XShape >& xShape )
 {
     OUString sText;
@@ -1090,7 +1070,7 @@ void ChartExport::exportTitle( const Reference< XShape >& xShape )
 
     pFS->singleElement( FSNS( XML_a, XML_bodyPr ),
             XML_vert, sWritingMode,
-            XML_rot, calcRotationValue(nRotation).getStr(),
+            XML_rot, oox::drawingml::calcRotationValue(nRotation).getStr(),
             FSEND );
     // TODO: lstStyle
     pFS->singleElement( FSNS( XML_a, XML_lstStyle ),
diff --git a/oox/source/export/drawingml.cxx b/oox/source/export/drawingml.cxx
index 48720d923144..506370a5e5a2 100644
--- a/oox/source/export/drawingml.cxx
+++ b/oox/source/export/drawingml.cxx
@@ -2098,6 +2098,8 @@ void DrawingML::WriteText( const Reference< XInterface >& rXIface, const OUStrin
     if( !xXText.is() )
         return;
 
+    sal_Int32 nTextRotateAngle = 0;
+
 #define DEFLRINS 254
 #define DEFTBINS 127
     sal_Int32 nLeft, nRight, nTop, nBottom;
@@ -2137,7 +2139,6 @@ void DrawingML::WriteText( const Reference< XInterface >& rXIface, const OUStrin
         {
             for ( sal_Int32 i = 0, nElems = aProps.getLength(); i < nElems; ++i )
             {
-                sal_Int32 nTextRotateAngle = 0;
                 if ( aProps[ i ].Name == "TextPreRotateAngle" && ( aProps[ i ].Value >>= nTextRotateAngle ) )
                 {
                     if ( nTextRotateAngle == -90 )
@@ -2194,6 +2195,7 @@ void DrawingML::WriteText( const Reference< XInterface >& rXIface, const OUStrin
                                XML_anchor, sVerticalAlignment,
                                XML_anchorCtr, bHorizontalCenter ? "1" : nullptr,
                                XML_vert, sWritingMode,
+                               XML_rot, (nTextRotateAngle != 0) ? oox::drawingml::calcRotationValue( nTextRotateAngle * 100 ).getStr() : nullptr,
                                FSEND );
         if( !presetWarp.isEmpty())
         {
diff --git a/sd/qa/unit/data/pptx/smartart-rotation2.pptx b/sd/qa/unit/data/pptx/smartart-rotation2.pptx
new file mode 100755
index 000000000000..e1c4493a7407
Binary files /dev/null and b/sd/qa/unit/data/pptx/smartart-rotation2.pptx differ
diff --git a/sd/qa/unit/export-tests-ooxml2.cxx b/sd/qa/unit/export-tests-ooxml2.cxx
index abce5cda2c36..f4219ed5cd58 100644
--- a/sd/qa/unit/export-tests-ooxml2.cxx
+++ b/sd/qa/unit/export-tests-ooxml2.cxx
@@ -106,6 +106,7 @@ public:
     void testTdf112552();
     void testTdf112557();
     void testTdf112647();
+    void testSmartartRotation2();
 
     CPPUNIT_TEST_SUITE(SdOOXMLExportTest2);
 
@@ -133,6 +134,7 @@ public:
     CPPUNIT_TEST(testTdf112552);
     CPPUNIT_TEST(testTdf112557);
     CPPUNIT_TEST(testTdf112647);
+    CPPUNIT_TEST(testSmartartRotation2);
 
     CPPUNIT_TEST_SUITE_END();
 
@@ -789,7 +791,6 @@ void SdOOXMLExportTest2::testTdf105739()
     xShell->DoClose();
 }
 
-
 void SdOOXMLExportTest2::testTdf112552()
 {
     // Background fill was not displayed, but it was because of the wrong geometry
@@ -832,6 +833,17 @@ void SdOOXMLExportTest2::testTdf112647()
     xDocShRef->DoClose();
 }
 
+void SdOOXMLExportTest2::testSmartartRotation2()
+{
+    ::sd::DrawDocShellRef xDocShRef = loadURL(m_directories.getURLFromSrc("sd/qa/unit/data/pptx/smartart-rotation2.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:sp[3]/p:txBody/a:bodyPr", "rot", "10800000");
+}
+
 CPPUNIT_TEST_SUITE_REGISTRATION(SdOOXMLExportTest2);
 
 CPPUNIT_PLUGIN_IMPLEMENT();


More information about the Libreoffice-commits mailing list