include/editeng/borderline.hxx              |    4 -
 include/editeng/brushitem.hxx               |    2 
 include/sfx2/namedcolor.hxx                 |    4 +
 sc/source/filter/excel/xestyle.cxx          |   96 ++++++----------------------
 sc/source/filter/inc/export/ExportTools.hxx |   38 +++++++++++
 5 files changed, 68 insertions(+), 76 deletions(-)

New commits:
commit 614dfb98cd4705b63bf1e525d3d34df9ce950ebb
Author:     Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk>
AuthorDate: Sat Jul 29 15:48:35 2023 +0200
Commit:     Tomaž Vajngerl <qui...@gmail.com>
CommitDate: Tue Aug 1 08:16:03 2023 +0200

    set finalColor of the ComplexColor in BorderLine and BrushItem
    
    The final color is stored inside the ComplexColor and is used to
    represent the final computed color from theme color and/or
    transforms.
    
    Change-Id: I405615bba144bfe876b75c565746d9eebc88e973
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/155111
    Tested-by: Jenkins
    Reviewed-by: Tomaž Vajngerl <qui...@gmail.com>

diff --git a/include/editeng/borderline.hxx b/include/editeng/borderline.hxx
index eb7d2f0f4f8e..596b8b59f413 100644
--- a/include/editeng/borderline.hxx
+++ b/include/editeng/borderline.hxx
@@ -172,8 +172,11 @@ public:
 
     model::ComplexColor const& getComplexColor() const
     {
+        auto pUnConst = const_cast<SvxBorderLine*>(this);
+        pUnConst->m_aComplexColor.setFinalColor(GetColor());
         return m_aComplexColor;
     }
+
     void setComplexColor(model::ComplexColor const& rComplexColor)
     {
         m_aComplexColor = rComplexColor;
@@ -258,4 +261,3 @@ EDITENG_DLLPUBLIC bool operator!=( const SvxBorderLine& 
rLeft, const SvxBorderLi
 } // namespace editeng
 
 #endif
-
diff --git a/include/editeng/brushitem.hxx b/include/editeng/brushitem.hxx
index 26e5458bc5bf..de433f2f272d 100644
--- a/include/editeng/brushitem.hxx
+++ b/include/editeng/brushitem.hxx
@@ -93,6 +93,8 @@ public:
 
     const model::ComplexColor& getComplexColor() const
     {
+        auto pUnConst = const_cast<SvxBrushItem*>(this);
+        pUnConst->maComplexColor.setFinalColor(GetColor());
         return maComplexColor;
     }
 
diff --git a/include/sfx2/namedcolor.hxx b/include/sfx2/namedcolor.hxx
index fc7941686fbd..1235cf848827 100644
--- a/include/sfx2/namedcolor.hxx
+++ b/include/sfx2/namedcolor.hxx
@@ -47,6 +47,10 @@ struct SFX2_DLLPUBLIC NamedColor
             if (m_nLumMod != 0)
                 aComplexColor.addTransformation({ 
model::TransformationType::LumOff, m_nLumOff });
         }
+        else
+        {
+            aComplexColor.setColor(m_aColor);
+        }
 
         aComplexColor.setFinalColor(m_aColor);
 
commit fc996d8d195263f09d8aaf65deaf9d42f7413be8
Author:     Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk>
AuthorDate: Sat Jul 29 15:42:32 2023 +0200
Commit:     Tomaž Vajngerl <qui...@gmail.com>
CommitDate: Tue Aug 1 08:15:55 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>

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