sc/source/filter/excel/xestyle.cxx          |   96 ++++++----------------------
 sc/source/filter/inc/export/ExportTools.hxx |   38 +++++++++++
 2 files changed, 59 insertions(+), 75 deletions(-)

New commits:
commit e3a7ebc7af10d60c78b9def6dd411e1a1be46f90
Author:     Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk>
AuthorDate: Sat Jul 29 15:42:32 2023 +0200
Commit:     Miklos Vajna <vmik...@collabora.com>
CommitDate: Fri Aug 4 10:38:38 2023 +0200

    sc: remove code duplication at OOXML export of ComplexColor
    
    This removes the code duplication when exporting the ComplexColor
    to OOXML. Now we use a common oox::xls::writeComplexColor function
    which writes a ComplexColor to the stream.
    
    Change-Id: I4e7bb1f8427409d09550c71894c327dba5096bec
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/155110
    Tested-by: Tomaž Vajngerl <qui...@gmail.com>
    Reviewed-by: Tomaž Vajngerl <qui...@gmail.com>
    (cherry picked from commit fc996d8d195263f09d8aaf65deaf9d42f7413be8)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/155156
    Tested-by: Jenkins
    Reviewed-by: Miklos Vajna <vmik...@collabora.com>

diff --git a/sc/source/filter/excel/xestyle.cxx 
b/sc/source/filter/excel/xestyle.cxx
index 02fb6c1a90d6..2937c153fb21 100644
--- a/sc/source/filter/excel/xestyle.cxx
+++ b/sc/source/filter/excel/xestyle.cxx
@@ -49,6 +49,7 @@
 #include <conditio.hxx>
 #include <dbdata.hxx>
 #include <filterentries.hxx>
+#include <export/ExportTools.hxx>
 
 #include <o3tl/safeint.hxx>
 #include <oox/export/utils.hxx>
@@ -1851,29 +1852,17 @@ static void lcl_WriteBorder(XclExpXmlStream& rStrm, 
sal_Int32 nElement, sal_uInt
     if( nLineStyle == EXC_LINE_NONE )
     {
         rStyleSheet->singleElement(nElement);
-    }
-    else if (rComplexColor.isValidSchemeType())
-    {
-        rStyleSheet->startElement(nElement, XML_style, 
ToLineStyle(nLineStyle));
-
-        sal_Int32 nTheme = 
oox::convertThemeColorTypeToExcelThemeNumber(rComplexColor.getSchemeType());
-        double fTintShade = 
oox::convertColorTransformsToTintOrShade(rComplexColor);
-        rStyleSheet->singleElement(XML_color,
-                    XML_theme, OString::number(nTheme),
-                    XML_tint, 
sax_fastparser::UseIf(OString::number(fTintShade), fTintShade != 0.0));
-
-        rStyleSheet->endElement(nElement);
+        return;
     }
     else if (rColor == Color(0, 0, 0))
     {
         rStyleSheet->singleElement(nElement, XML_style, 
ToLineStyle(nLineStyle));
+        return;
     }
-    else
-    {
-        rStyleSheet->startElement(nElement, XML_style, 
ToLineStyle(nLineStyle));
-        rStyleSheet->singleElement(XML_color, XML_rgb, 
XclXmlUtils::ToOString(rColor));
-        rStyleSheet->endElement( nElement );
-    }
+
+    rStyleSheet->startElement(nElement, XML_style, ToLineStyle(nLineStyle));
+    oox::xls::writeComplexColor(rStyleSheet, XML_color, rComplexColor, rColor);
+    rStyleSheet->endElement(nElement);
 }
 
 void XclExpCellBorder::SaveXml(XclExpXmlStream& rStream) const
@@ -2003,62 +1992,27 @@ void XclExpCellArea::SaveXml( XclExpXmlStream& rStrm ) 
const
 
         if (maForeColor != COL_TRANSPARENT || maBackColor != COL_TRANSPARENT)
         {
-            if (maForegroundComplexColor.isValidSchemeType())
-            {
-                sal_Int32 nTheme = 
oox::convertThemeColorTypeToExcelThemeNumber(maForegroundComplexColor.getSchemeType());
-                double fTintShade = 
oox::convertColorTransformsToTintOrShade(maForegroundComplexColor);
-                rStyleSheet->singleElement(XML_fgColor,
-                    XML_theme, OString::number(nTheme),
-                    XML_tint, 
sax_fastparser::UseIf(OString::number(fTintShade), fTintShade != 0.0));
-            }
-            else if (maForeColor != COL_TRANSPARENT)
-            {
-                rStyleSheet->singleElement(XML_fgColor, XML_rgb, 
XclXmlUtils::ToOString(maForeColor));
-            }
-
-            if (maBackgroundComplexColor.isValidSchemeType())
-            {
-                sal_Int32 nTheme = 
oox::convertThemeColorTypeToExcelThemeNumber(maBackgroundComplexColor.getSchemeType());
-                double fTintShade = 
oox::convertColorTransformsToTintOrShade(maBackgroundComplexColor);
-                rStyleSheet->singleElement(XML_bgColor,
-                    XML_theme, OString::number(nTheme),
-                    XML_tint, 
sax_fastparser::UseIf(OString::number(fTintShade), fTintShade != 0.0));
-            }
-            else if (maBackColor != COL_TRANSPARENT)
-            {
-                rStyleSheet->singleElement(XML_bgColor, XML_rgb, 
XclXmlUtils::ToOString(maBackColor));
-            }
+            oox::xls::writeComplexColor(rStyleSheet, XML_fgColor, 
maForegroundComplexColor, maForeColor);
+            oox::xls::writeComplexColor(rStyleSheet, XML_bgColor, 
maBackgroundComplexColor, maBackColor);
         }
         else
         {
-            if (maForegroundComplexColor.isValidSchemeType())
-            {
-                sal_Int32 nTheme = 
oox::convertThemeColorTypeToExcelThemeNumber(maForegroundComplexColor.getSchemeType());
-                double fTintShade = 
oox::convertColorTransformsToTintOrShade(maForegroundComplexColor);
-
-                rStyleSheet->singleElement(XML_fgColor,
-                    XML_theme, OString::number(nTheme),
-                    XML_tint, 
sax_fastparser::UseIf(OString::number(fTintShade), fTintShade != 0.0));
-            }
-            else if (mnForeColor != 0)
             {
-                rStyleSheet->singleElement(XML_fgColor, XML_rgb, 
XclXmlUtils::ToOString(rPalette.GetColor(mnForeColor)));
+                Color aColor = rPalette.GetColor(mnForeColor);
+                if (maForegroundComplexColor.isValidSchemeType())
+                    oox::xls::writeComplexColor(rStyleSheet, XML_fgColor, 
maForegroundComplexColor, aColor);
+                else if (mnForeColor != 0)
+                    oox::xls::writeComplexColor(rStyleSheet, XML_fgColor, 
maForegroundComplexColor, aColor);
             }
 
-            if (maBackgroundComplexColor.isValidSchemeType())
             {
-                sal_Int32 nTheme = 
oox::convertThemeColorTypeToExcelThemeNumber(maBackgroundComplexColor.getSchemeType());
-                double fTintShade = 
oox::convertColorTransformsToTintOrShade(maBackgroundComplexColor);
-                rStyleSheet->singleElement(XML_bgColor,
-                    XML_theme, OString::number(nTheme),
-                    XML_tint, 
sax_fastparser::UseIf(OString::number(fTintShade), fTintShade != 0.0));
-            }
-            else if (mnBackColor != 0)
-            {
-                rStyleSheet->singleElement(XML_bgColor, XML_rgb, 
XclXmlUtils::ToOString(rPalette.GetColor(mnBackColor)));
+                Color aColor = rPalette.GetColor(mnBackColor);
+                if (maBackgroundComplexColor.isValidSchemeType())
+                    oox::xls::writeComplexColor(rStyleSheet, XML_bgColor, 
maBackgroundComplexColor, aColor);
+                else if (mnForeColor != 0)
+                    oox::xls::writeComplexColor(rStyleSheet, XML_bgColor, 
maBackgroundComplexColor, aColor);
             }
         }
-
         rStyleSheet->endElement( XML_patternFill );
     }
 
@@ -2082,16 +2036,8 @@ void XclExpColor::SaveXml( XclExpXmlStream& rStrm ) const
     sax_fastparser::FSHelperPtr& rStyleSheet = rStrm.GetCurrentStream();
     rStyleSheet->startElement(XML_fill);
     rStyleSheet->startElement(XML_patternFill);
-    if (maComplexColor.isValidSchemeType())
-    {
-        sal_Int32 nTheme = 
oox::convertThemeColorTypeToExcelThemeNumber(maComplexColor.getSchemeType());
-        double fTintShade = 
oox::convertColorTransformsToTintOrShade(maComplexColor);
-        rStyleSheet->singleElement(XML_bgColor,
-                    XML_theme, OString::number(nTheme),
-                    XML_tint, 
sax_fastparser::UseIf(OString::number(fTintShade), fTintShade != 0.0));
-    }
-    else
-        rStyleSheet->singleElement(XML_bgColor, XML_rgb, 
XclXmlUtils::ToOString(maColor));
+
+    oox::xls::writeComplexColor(rStyleSheet, XML_bgColor, maComplexColor, 
maColor);
 
     rStyleSheet->endElement( XML_patternFill );
     rStyleSheet->endElement( XML_fill );
diff --git a/sc/source/filter/inc/export/ExportTools.hxx 
b/sc/source/filter/inc/export/ExportTools.hxx
new file mode 100644
index 000000000000..e5ea27561f39
--- /dev/null
+++ b/sc/source/filter/inc/export/ExportTools.hxx
@@ -0,0 +1,38 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#pragma once
+
+#include <docmodel/color/ComplexColor.hxx>
+#include <sax/fshelper.hxx>
+#include <oox/export/ColorExportUtils.hxx>
+#include <oox/token/tokens.hxx>
+#include <oox/token/namespaces.hxx>
+
+namespace oox::xls
+{
+void writeComplexColor(sax_fastparser::FSHelperPtr& pFS, sal_Int32 nElement,
+                       model::ComplexColor const& rComplexColor, Color const& 
rColor)
+{
+    if (rComplexColor.isValidSchemeType())
+    {
+        sal_Int32 nTheme
+            = 
oox::convertThemeColorTypeToExcelThemeNumber(rComplexColor.getSchemeType());
+        double fTintShade = 
oox::convertColorTransformsToTintOrShade(rComplexColor);
+        pFS->singleElement(nElement, XML_theme, OString::number(nTheme), 
XML_tint,
+                           sax_fastparser::UseIf(OString::number(fTintShade), 
fTintShade != 0.0));
+    }
+    else if (rColor != COL_TRANSPARENT)
+    {
+        pFS->singleElement(nElement, XML_rgb, XclXmlUtils::ToOString(rColor));
+    }
+}
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Reply via email to