[Libreoffice-commits] core.git: chart2/source sw/qa
Tünde Tóth (via logerrit)
logerrit at kemper.freedesktop.org
Tue Jan 28 08:51:40 UTC 2020
chart2/source/tools/ChartTypeHelper.cxx | 3 ++-
chart2/source/view/charttypes/AreaChart.cxx | 14 ++++++++++----
sw/qa/extras/layout/data/tdf130031.docx |binary
sw/qa/extras/layout/layout.cxx | 14 ++++++++++++++
4 files changed, 26 insertions(+), 5 deletions(-)
New commits:
commit f8966bb398cf0623be841c618b123866801a063c
Author: Tünde Tóth <tundeth at gmail.com>
AuthorDate: Thu Jan 16 12:10:24 2020 +0100
Commit: László Németh <nemeth at numbertext.org>
CommitDate: Tue Jan 28 09:51:07 2020 +0100
tdf#130031 Chart OOXML import: fix area chart data label position
Default data label positioning of area charts in Excel is vertically
centered between the X axes and the data point. In LibreOffice
the data labels positioning was above the data point.
Change-Id: Icff3e2554dee7b5ee264bc6f9579a84852da6f7b
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/86927
Reviewed-by: László Németh <nemeth at numbertext.org>
Tested-by: László Németh <nemeth at numbertext.org>
diff --git a/chart2/source/tools/ChartTypeHelper.cxx b/chart2/source/tools/ChartTypeHelper.cxx
index ebd2af04ab45..b7b3e889e1a1 100644
--- a/chart2/source/tools/ChartTypeHelper.cxx
+++ b/chart2/source/tools/ChartTypeHelper.cxx
@@ -314,9 +314,10 @@ uno::Sequence < sal_Int32 > ChartTypeHelper::getSupportedLabelPlacements( const
}
else if( aChartTypeName.match(CHART2_SERVICE_NAME_CHARTTYPE_AREA) )
{
- aRet.realloc(1);
+ aRet.realloc(2);
sal_Int32* pSeq = aRet.getArray();
*pSeq++ = css::chart::DataLabelPlacement::TOP;
+ *pSeq++ = css::chart::DataLabelPlacement::CENTER;
}
else if( aChartTypeName.match(CHART2_SERVICE_NAME_CHARTTYPE_NET) )
{
diff --git a/chart2/source/view/charttypes/AreaChart.cxx b/chart2/source/view/charttypes/AreaChart.cxx
index 6d67d0b6a94c..158d3f21bca6 100644
--- a/chart2/source/view/charttypes/AreaChart.cxx
+++ b/chart2/source/view/charttypes/AreaChart.cxx
@@ -750,6 +750,7 @@ void AreaChart::createShapes()
if( rLogicYForNextSeriesMap.find(nAttachedAxisIndex) == rLogicYForNextSeriesMap.end() )
rLogicYForNextSeriesMap[nAttachedAxisIndex] = 0.0;
+ double fPreviousYValue = rLogicYForNextSeriesMap[nAttachedAxisIndex];
fLogicY += rLogicYForNextSeriesMap[nAttachedAxisIndex];
rLogicYForNextSeriesMap[nAttachedAxisIndex] = fLogicY;
@@ -897,13 +898,19 @@ void AreaChart::createShapes()
if( pSeries->getDataPointLabelIfLabel(nIndex) )
{
LabelAlignment eAlignment = LABEL_ALIGN_TOP;
+ sal_Int32 nLabelPlacement = pSeries->getLabelPlacement(
+ nIndex, m_xChartTypeModel, rPosHelper.isSwapXAndY());
+
+ if (m_bArea && nLabelPlacement == css::chart::DataLabelPlacement::CENTER)
+ {
+ fLogicY -= (fLogicY - fPreviousYValue) / 2.0;
+ aScenePosition = rPosHelper.transformLogicToScene(fLogicX, fLogicY, fLogicZ, false);
+ }
+
drawing::Position3D aScenePosition3D( aScenePosition.PositionX
, aScenePosition.PositionY
, aScenePosition.PositionZ+getTransformedDepth() );
- sal_Int32 nLabelPlacement = pSeries->getLabelPlacement(
- nIndex, m_xChartTypeModel, rPosHelper.isSwapXAndY());
-
switch(nLabelPlacement)
{
case css::chart::DataLabelPlacement::TOP:
@@ -924,7 +931,6 @@ void AreaChart::createShapes()
break;
case css::chart::DataLabelPlacement::CENTER:
eAlignment = LABEL_ALIGN_CENTER;
- //todo implement this different for area charts
break;
default:
OSL_FAIL("this label alignment is not implemented yet");
diff --git a/sw/qa/extras/layout/data/tdf130031.docx b/sw/qa/extras/layout/data/tdf130031.docx
new file mode 100644
index 000000000000..4ac420a83c8e
Binary files /dev/null and b/sw/qa/extras/layout/data/tdf130031.docx differ
diff --git a/sw/qa/extras/layout/layout.cxx b/sw/qa/extras/layout/layout.cxx
index 862f4a30eb41..567fdea446f0 100644
--- a/sw/qa/extras/layout/layout.cxx
+++ b/sw/qa/extras/layout/layout.cxx
@@ -2504,6 +2504,20 @@ CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf129173)
pXmlDoc, "/metafile/push[1]/push[1]/push[1]/push[4]/push[1]/textarray[22]/text", "56");
}
+CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf130031)
+{
+ SwDoc* pDoc = createDoc("tdf130031.docx");
+ SwDocShell* pShell = pDoc->GetDocShell();
+
+ // Dump the rendering of the first page as an XML file.
+ std::shared_ptr<GDIMetaFile> xMetaFile = pShell->GetPreviewMetaFile();
+ MetafileXmlDump dumper;
+ xmlDocPtr pXmlDoc = dumpAndParse(dumper, *xMetaFile);
+ CPPUNIT_ASSERT(pXmlDoc);
+ sal_Int32 nY = getXPath(pXmlDoc, "//textarray[11]", "y").toInt32();
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(4339, nY, 50);
+}
+
CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf116925)
{
SwDoc* pDoc = createDoc("tdf116925.docx");
More information about the Libreoffice-commits
mailing list