From 1bb4c8cc2effd4d68500db6aa0c673e96f8ebbbd Mon Sep 17 00:00:00 2001 From: Mike Kaganski Date: Wed, 1 Aug 2018 12:52:10 +0300 Subject: tdf#119029: also export rotation for data series Reviewed-on: https://gerrit.libreoffice.org/58401 Tested-by: Jenkins Reviewed-by: Mike Kaganski (cherry picked from commit 8f90492812d1edac6c91e83b84f3512877dcd552) Change-Id: I6a9895145e0c54d35bf404f209721a0c718e4446 Reviewed-on: https://gerrit.libreoffice.org/58470 Reviewed-by: Andras Timar Tested-by: Andras Timar --- oox/source/export/chartexport.cxx | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) (limited to 'oox') diff --git a/oox/source/export/chartexport.cxx b/oox/source/export/chartexport.cxx index bd33471c9dad..e127ee8480b0 100644 --- a/oox/source/export/chartexport.cxx +++ b/oox/source/export/chartexport.cxx @@ -2282,18 +2282,32 @@ void ChartExport::exportShapeProps( const Reference< XPropertySet >& xPropSet ) pFS->endElement( FSNS( XML_c, XML_spPr ) ); } -void ChartExport::exportTextProps(const Reference& xPropSet, bool bAxis) +void ChartExport::exportTextProps(const Reference& xPropSet) { FSHelperPtr pFS = GetFS(); pFS->startElement(FSNS(XML_c, XML_txPr), FSEND); sal_Int32 nRotation = 0; - if (bAxis) + if (auto xServiceInfo = uno::Reference(xPropSet, uno::UNO_QUERY)) { - double fTextRotation = 0; - uno::Any aAny = xPropSet->getPropertyValue("TextRotation"); - if (aAny.hasValue() && (aAny >>= fTextRotation)) - nRotation = fTextRotation * -600.0; + double fMultiplier = 0; + // We have at least two possible units of returned value: degrees (e.g., for data labels), + // and 100ths of degree (e.g., for axes labels). The latter is returned as an Any wrapping + // a sal_Int32 value (see WrappedTextRotationProperty::convertInnerToOuterValue), while + // the former is double. So we could test the contained type to decide which multiplier to + // use. But testing the service info should be more robust. + if (xServiceInfo->supportsService("com.sun.star.chart.ChartAxis")) + fMultiplier = -600.0; + else if (xServiceInfo->supportsService("com.sun.star.chart2.DataSeries")) + fMultiplier = -60000.0; + + if (fMultiplier) + { + double fTextRotation = 0; + uno::Any aAny = xPropSet->getPropertyValue("TextRotation"); + if (aAny.hasValue() && (aAny >>= fTextRotation)) + nRotation = std::round(fTextRotation * fMultiplier); + } } if (nRotation) @@ -2707,7 +2721,7 @@ void ChartExport::_exportAxis( // shape properties exportShapeProps( xAxisProp ); - exportTextProps(xAxisProp, true); + exportTextProps(xAxisProp); pFS->singleElement( FSNS( XML_c, XML_crossAx ), XML_val, I32S( rAxisIdPair.nCrossAx ), -- cgit v1.2.3