[Libreoffice-commits] core.git: include/oox oox/source sd/qa
Szymon Kłos
szymon.klos at collabora.com
Thu Oct 12 22:23:00 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 | 13 +++++++++++++
5 files changed, 32 insertions(+), 22 deletions(-)
New commits:
commit 3cbb6e73ecbff5d83be817c0dab680c5d925c6fa
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
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>
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 e3b69806df07..ffd1481ffdbe 100644
--- a/oox/source/export/chartexport.cxx
+++ b/oox/source/export/chartexport.cxx
@@ -893,26 +893,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;
@@ -945,7 +925,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 64e916e1033f..5beb7212ce0b 100644
--- a/oox/source/export/drawingml.cxx
+++ b/oox/source/export/drawingml.cxx
@@ -2224,6 +2224,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;
@@ -2263,7 +2265,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 )
@@ -2320,6 +2321,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 1ba4f1362d23..acbeaa7142bb 100644
--- a/sd/qa/unit/export-tests-ooxml2.cxx
+++ b/sd/qa/unit/export-tests-ooxml2.cxx
@@ -119,6 +119,7 @@ public:
void testTdf112647();
void testGroupRotation();
void testTdf104788();
+ void testSmartartRotation2();
CPPUNIT_TEST_SUITE(SdOOXMLExportTest2);
@@ -163,6 +164,7 @@ public:
CPPUNIT_TEST(testTdf112647);
CPPUNIT_TEST(testGroupRotation);
CPPUNIT_TEST(testTdf104788);
+ CPPUNIT_TEST(testSmartartRotation2);
CPPUNIT_TEST_SUITE_END();
@@ -1238,6 +1240,17 @@ void SdOOXMLExportTest2::testTdf104788()
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:grpSp/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