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 )
     {

Reply via email to