chart2/qa/extras/chart2export2.cxx | 21 +++++++++++ chart2/qa/extras/chart2export3.cxx | 2 - chart2/qa/extras/data/xlsx/tdf166249.xlsx |binary oox/source/export/chartexport.cxx | 53 +++++++----------------------- 4 files changed, 36 insertions(+), 40 deletions(-)
New commits: commit 40e67b0f312730f4850e1fdfe532efda92f319c3 Author: Balazs Varga <balazs.varga.ext...@allotropia.de> AuthorDate: Wed Apr 23 19:26:55 2025 +0200 Commit: Xisco Fauli <xiscofa...@libreoffice.org> CommitDate: Fri May 2 14:01:53 2025 +0200 tdf#166249 - ooxml export: fix incorrect color exports in chartexport The colors and alpha values need to be exported individually. Also simplify leaderlines export by exporting all kind of line properties. follow-up of commit: ada05b8874aa2c5161550dbc87d79b47f40f0df8 regression from: 1916957d0750b5471f23f17b2867a907e0e9e0e2 (tdf#164936 oox: modify getColor method to include alpha) Change-Id: If0310b78382b384d022559b8411fd315c014612c Reviewed-on: https://gerrit.libreoffice.org/c/core/+/184525 Tested-by: Jenkins Reviewed-by: Balazs Varga <balazs.varga.ext...@allotropia.de> (cherry picked from commit e2035e017e2942fcb46109d02d83cd8990554474) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/184564 Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org> diff --git a/chart2/qa/extras/chart2export2.cxx b/chart2/qa/extras/chart2export2.cxx index 12977d0ec44a..31d936829eaa 100644 --- a/chart2/qa/extras/chart2export2.cxx +++ b/chart2/qa/extras/chart2export2.cxx @@ -1713,6 +1713,27 @@ CPPUNIT_TEST_FIXTURE(Chart2ExportTest2, testDataTableImportExport) } } +CPPUNIT_TEST_FIXTURE(Chart2ExportTest2, testTdf166249) +{ + loadFromFile(u"xlsx/tdf166249.xlsx"); + // FIXME: validation error in OOXML export + skipValidation(); + save(u"Calc Office Open XML"_ustr); + xmlDocUniquePtr pXmlDoc = parseExport(u"xl/charts/chart1.xml"_ustr); + CPPUNIT_ASSERT(pXmlDoc); + + // test color and alpha value of data label borders + assertXPath(pXmlDoc, + "/c:chartSpace/c:chart/c:plotArea/c:pieChart/c:ser/c:dLbls/c:dLbl[1]/c:spPr/a:ln/" + "a:solidFill/a:srgbClr", + "val", u"156082"); + + assertXPath(pXmlDoc, + "/c:chartSpace/c:chart/c:plotArea/c:pieChart/c:ser/c:dLbls/c:dLbl[1]/c:spPr/a:ln/" + "a:solidFill/a:srgbClr/a:alpha", + "val", u"128"); +} + CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/chart2/qa/extras/chart2export3.cxx b/chart2/qa/extras/chart2export3.cxx index f3cf492c85a5..2f8c06f620f9 100644 --- a/chart2/qa/extras/chart2export3.cxx +++ b/chart2/qa/extras/chart2export3.cxx @@ -290,7 +290,7 @@ CPPUNIT_TEST_FIXTURE(Chart2ExportTest3, testDataLabelFillColor) save(u"Calc Office Open XML"_ustr); xmlDocUniquePtr pXmlDoc = parseExport(u"xl/charts/chart1.xml"_ustr); CPPUNIT_ASSERT(pXmlDoc); - assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:dLbls/c:spPr/a:solidFill/a:srgbClr", "val", u"F79646"); + assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:dLbls/c:spPr/a:solidFill/a:srgbClr", "val", u"f79646"); } CPPUNIT_TEST_FIXTURE(Chart2ExportTest3, testTitleOverlayXLSX) diff --git a/chart2/qa/extras/data/xlsx/tdf166249.xlsx b/chart2/qa/extras/data/xlsx/tdf166249.xlsx new file mode 100644 index 000000000000..8c7b5d2ad884 Binary files /dev/null and b/chart2/qa/extras/data/xlsx/tdf166249.xlsx differ diff --git a/oox/source/export/chartexport.cxx b/oox/source/export/chartexport.cxx index 6b1d5c41e8d8..7020c1afe060 100644 --- a/oox/source/export/chartexport.cxx +++ b/oox/source/export/chartexport.cxx @@ -3908,12 +3908,11 @@ void writeLabelProperties( const FSHelperPtr& pFS, ChartExport* pChartExport, if (nLabelFillColor != -1) { - pFS->startElement(FSNS(XML_a, XML_solidFill)); - - OString aStr = OString::number(nLabelFillColor, 16).toAsciiUpperCase(); - pFS->singleElement(FSNS(XML_a, XML_srgbClr), XML_val, aStr); - - pFS->endElement(FSNS(XML_a, XML_solidFill)); + ::Color nColor(ColorTransparency, nLabelFillColor); + if (nColor.IsTransparent()) + pChartExport->WriteSolidFill(nColor, nColor.GetAlpha()); + else + pChartExport->WriteSolidFill(nColor); } if (nLabelBorderWidth > 0) @@ -3923,12 +3922,11 @@ void writeLabelProperties( const FSHelperPtr& pFS, ChartExport* pChartExport, if (nLabelBorderColor != -1) { - pFS->startElement(FSNS(XML_a, XML_solidFill)); - - OString aStr = OString::number(nLabelBorderColor, 16).toAsciiUpperCase(); - pFS->singleElement(FSNS(XML_a, XML_srgbClr), XML_val, aStr); - - pFS->endElement(FSNS(XML_a, XML_solidFill)); + ::Color nColor(ColorTransparency, nLabelBorderColor); + if (nColor.IsTransparent()) + pChartExport->WriteSolidFill(nColor, nColor.GetAlpha()); + else + pChartExport->WriteSolidFill(nColor); } pFS->endElement(FSNS(XML_a, XML_ln)); @@ -4140,40 +4138,17 @@ void ChartExport::exportDataLabels( xPropSet->getPropertyValue(u"ShowCustomLeaderLines"_ustr) >>= bShowLeaderLines; pFS->singleElement(FSNS(XML_c, XML_showLeaderLines), XML_val, ToPsz10(bShowLeaderLines)); - // LeaderLine color, and width - util::Color aLineColor = -1; - xPropSet->getPropertyValue(u"LineColor"_ustr) >>= aLineColor; - // Line width - sal_Int32 nLineWidth = -1; - xPropSet->getPropertyValue(u"LineWidth"_ustr) >>= nLineWidth; - - if (aLineColor > 0 || nLineWidth > 0) + // Export LeaderLine properties + // TODO: import all kind of LeaderLine props (not just LineColor/LineWidth) + if (bShowLeaderLines) { pFS->startElement(FSNS(XML_c, XML_leaderLines)); pFS->startElement(FSNS(XML_c, XML_spPr)); - - if (nLineWidth > 0) - pFS->startElement(FSNS(XML_a, XML_ln), XML_w, - OString::number(convertHmmToEmu(nLineWidth))); - else - pFS->startElement(FSNS(XML_a, XML_ln)); - - if (aLineColor != -1) - { - pFS->startElement(FSNS(XML_a, XML_solidFill)); - - OString aStr = I32SHEX(aLineColor); - pFS->singleElement(FSNS(XML_a, XML_srgbClr), XML_val, aStr); - - pFS->endElement(FSNS(XML_a, XML_solidFill)); - } - - pFS->endElement(FSNS(XML_a, XML_ln)); + WriteOutline(xPropSet, getModel()); pFS->endElement(FSNS(XML_c, XML_spPr)); pFS->endElement(FSNS(XML_c, XML_leaderLines)); } - // Export leader line if( eChartType != chart::TYPEID_PIE ) {