include/docmodel/color/ComplexColor.hxx                          |   14 +-
 sc/CppunitTest_sc_theme_import_export_test.mk                    |    2 
 sc/Library_scqahelper.mk                                         |    1 
 sc/inc/patattr.hxx                                               |   13 +-
 sc/qa/unit/ThemeImportExportTest.cxx                             |   56 
+++++++--
 sc/qa/unit/data/xlsx/Test_ThemeColor_Text_Background_Border.xlsx |binary
 sc/qa/unit/helper/qahelper.cxx                                   |   12 +-
 sc/source/core/data/patattr.cxx                                  |   33 +++--
 sc/source/filter/excel/excrecds.cxx                              |    2 
 sc/source/filter/excel/xechart.cxx                               |   24 ++--
 sc/source/filter/excel/xecontent.cxx                             |    8 -
 sc/source/filter/excel/xehelper.cxx                              |   26 ++--
 sc/source/filter/excel/xestream.cxx                              |    9 +
 sc/source/filter/excel/xestyle.cxx                               |   45 +++----
 sc/source/filter/excel/xichart.cxx                               |   25 ++--
 sc/source/filter/excel/xistyle.cxx                               |    6 -
 sc/source/filter/excel/xlchart.cxx                               |    4 
 sc/source/filter/excel/xlstyle.cxx                               |   59 
+++++-----
 sc/source/filter/inc/xechart.hxx                                 |    9 -
 sc/source/filter/inc/xestyle.hxx                                 |    4 
 sc/source/filter/inc/xlchart.hxx                                 |    6 -
 sc/source/filter/inc/xlstyle.hxx                                 |   14 +-
 22 files changed, 226 insertions(+), 146 deletions(-)

New commits:
commit ea645695ed9b777e73020ba0f1a22962ec961cd8
Author:     Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk>
AuthorDate: Fri Jun 23 21:57:14 2023 +0900
Commit:     Xisco Fauli <xiscofa...@libreoffice.org>
CommitDate: Fri Jun 30 22:50:36 2023 +0200

    sc: Add import tests for text, background, border theme colors
    
    Change-Id: I03f0ddb42e6491618e56ba98f5bd8befc9ba47a5
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/153506
    Tested-by: Jenkins
    Reviewed-by: Tomaž Vajngerl <qui...@gmail.com>
    Signed-off-by: Xisco Fauli <xiscofa...@libreoffice.org>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/153797

diff --git a/sc/CppunitTest_sc_theme_import_export_test.mk 
b/sc/CppunitTest_sc_theme_import_export_test.mk
index 52f9736e36b9..22b0a2eea6a2 100644
--- a/sc/CppunitTest_sc_theme_import_export_test.mk
+++ b/sc/CppunitTest_sc_theme_import_export_test.mk
@@ -25,6 +25,7 @@ $(eval $(call 
gb_CppunitTest_use_externals,sc_theme_import_export_test, \
 
 $(eval $(call gb_CppunitTest_use_libraries,sc_theme_import_export_test, \
     basegfx \
+    docmodel \
     comphelper \
     cppu \
     cppuhelper \
@@ -34,6 +35,7 @@ $(eval $(call 
gb_CppunitTest_use_libraries,sc_theme_import_export_test, \
     sc \
     scqahelper \
     sfx \
+    svl \
     subsequenttest \
     test \
     tl \
diff --git a/sc/qa/unit/ThemeImportExportTest.cxx 
b/sc/qa/unit/ThemeImportExportTest.cxx
index ae1653837f36..45d29bf7a088 100644
--- a/sc/qa/unit/ThemeImportExportTest.cxx
+++ b/sc/qa/unit/ThemeImportExportTest.cxx
@@ -7,30 +7,24 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
-#include <test/unoapixml_test.hxx>
+#include "helper/qahelper.hxx"
 
-#include <com/sun/star/lang/XComponent.hpp>
-#include <comphelper/servicehelper.hxx>
 #include <docsh.hxx>
+#include <scitems.hxx>
+#include <editeng/brushitem.hxx>
 
 using namespace css;
 
-class ThemeImportExportTest : public UnoApiXmlTest
+class ThemeImportExportTest : public ScModelTestBase
 {
 public:
     ThemeImportExportTest()
-        : UnoApiXmlTest("sc/qa/unit/data")
+        : ScModelTestBase("sc/qa/unit/data")
     {
     }
-
-    void test();
-
-    CPPUNIT_TEST_SUITE(ThemeImportExportTest);
-    CPPUNIT_TEST(test);
-    CPPUNIT_TEST_SUITE_END();
 };
 
-void ThemeImportExportTest::test()
+CPPUNIT_TEST_FIXTURE(ThemeImportExportTest, testThemeExport)
 {
     loadFromURL(u"xlsx/CalcThemeTest.xlsx");
 
@@ -64,7 +58,43 @@ void ThemeImportExportTest::test()
     assertXPath(pXmlDoc, 
"/x:styleSheet/x:fills/x:fill[4]/x:patternFill/x:fgColor", "theme", "4");
 }
 
-CPPUNIT_TEST_SUITE_REGISTRATION(ThemeImportExportTest);
+CPPUNIT_TEST_FIXTURE(ThemeImportExportTest, testCellBackgroundThemeColor)
+{
+    loadFromURL(u"xlsx/Test_ThemeColor_Text_Background_Border.xlsx");
+
+    ScDocument* pDoc = getScDoc();
+
+    {
+        const ScPatternAttr* pPattern = pDoc->GetPattern(0, 0, 0);
+        const SfxPoolItem* pItem = nullptr;
+        pPattern->GetItemSet().HasItem(ATTR_BACKGROUND, &pItem);
+        CPPUNIT_ASSERT(pItem);
+
+        auto* pBrushItem = static_cast<const SvxBrushItem*>(pItem);
+        CPPUNIT_ASSERT_EQUAL(Color(0x27ced7), pBrushItem->GetColor());
+        auto aComplexColor = pBrushItem->getComplexColor();
+        CPPUNIT_ASSERT_EQUAL(model::ThemeColorType::Accent3, 
aComplexColor.getSchemeType());
+        CPPUNIT_ASSERT_EQUAL(size_t(0), 
aComplexColor.getTransformations().size());
+    }
+
+    {
+        const ScPatternAttr* pPattern = pDoc->GetPattern(0, 1, 0);
+        const SfxPoolItem* pItem = nullptr;
+        pPattern->GetItemSet().HasItem(ATTR_BACKGROUND, &pItem);
+        CPPUNIT_ASSERT(pItem);
+
+        auto* pBrushItem = static_cast<const SvxBrushItem*>(pItem);
+        CPPUNIT_ASSERT_EQUAL(Color(0xd4f5f7), pBrushItem->GetColor());
+        auto aComplexColor = pBrushItem->getComplexColor();
+        CPPUNIT_ASSERT_EQUAL(model::ThemeColorType::Accent3, 
aComplexColor.getSchemeType());
+        auto& rTransformations = aComplexColor.getTransformations();
+        CPPUNIT_ASSERT_EQUAL(size_t(2), rTransformations.size());
+        CPPUNIT_ASSERT_EQUAL(model::TransformationType::LumMod, 
rTransformations[0].meType);
+        CPPUNIT_ASSERT_EQUAL(sal_Int16(2000), rTransformations[0].mnValue);
+        CPPUNIT_ASSERT_EQUAL(model::TransformationType::LumOff, 
rTransformations[1].meType);
+        CPPUNIT_ASSERT_EQUAL(sal_Int16(7999), rTransformations[1].mnValue);
+    }
+}
 
 CPPUNIT_PLUGIN_IMPLEMENT();
 
diff --git a/sc/qa/unit/data/xlsx/Test_ThemeColor_Text_Background_Border.xlsx 
b/sc/qa/unit/data/xlsx/Test_ThemeColor_Text_Background_Border.xlsx
new file mode 100644
index 000000000000..339d7539ecfb
Binary files /dev/null and 
b/sc/qa/unit/data/xlsx/Test_ThemeColor_Text_Background_Border.xlsx differ
commit be1378854efd5e131d0a29eec668e5c00bb38603
Author:     Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk>
AuthorDate: Fri May 19 23:01:58 2023 +0900
Commit:     Xisco Fauli <xiscofa...@libreoffice.org>
CommitDate: Fri Jun 30 22:50:25 2023 +0200

    sc: use ComplexColor for font color (+others) in OOXML export
    
    Change-Id: I2544c7ece152323d84faafe1a544e4f89ca466d5
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/152014
    Tested-by: Jenkins
    Reviewed-by: Tomaž Vajngerl <qui...@gmail.com>
    Signed-off-by: Xisco Fauli <xiscofa...@libreoffice.org>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/153796

diff --git a/include/docmodel/color/ComplexColor.hxx 
b/include/docmodel/color/ComplexColor.hxx
index 19e228b2a858..4952d91ac217 100644
--- a/include/docmodel/color/ComplexColor.hxx
+++ b/include/docmodel/color/ComplexColor.hxx
@@ -133,13 +133,19 @@ public:
         meType = ColorType::CRGB;
     }
 
+    void setColor(Color const& rColor)
+    {
+        mnComponent1 = rColor.GetRed();
+        mnComponent2 = rColor.GetGreen();
+        mnComponent3 = rColor.GetBlue();
+        maFinalColor = rColor;
+        meType = ColorType::RGB;
+    }
+
     void setRGB(sal_Int32 nRGB)
     {
         ::Color aColor(ColorTransparency, nRGB);
-        mnComponent1 = aColor.GetRed();
-        mnComponent2 = aColor.GetGreen();
-        mnComponent3 = aColor.GetBlue();
-        meType = ColorType::RGB;
+        setColor(aColor);
     }
 
     void setHSL(sal_Int32 nH, sal_Int32 nS, sal_Int32 nL)
diff --git a/sc/Library_scqahelper.mk b/sc/Library_scqahelper.mk
index a4a6814203bd..6e8c9eca7327 100644
--- a/sc/Library_scqahelper.mk
+++ b/sc/Library_scqahelper.mk
@@ -45,6 +45,7 @@ $(eval $(call gb_Library_use_libraries,scqahelper,\
        comphelper \
        cppu \
        cppuhelper \
+       docmodel \
        editeng \
        for \
        sal \
diff --git a/sc/inc/patattr.hxx b/sc/inc/patattr.hxx
index 8269a36cb985..293fa99fd4e2 100644
--- a/sc/inc/patattr.hxx
+++ b/sc/inc/patattr.hxx
@@ -30,6 +30,7 @@
 #include "fonthelper.hxx"
 
 namespace vcl { class Font; }
+namespace model { class ComplexColor; }
 class OutputDevice;
 class Fraction;
 class ScStyleSheet;
@@ -106,19 +107,23 @@ public:
                                         SvtScriptType nScript = 
SvtScriptType::NONE, const Color* pBackConfigColor = nullptr,
                                         const Color* pTextConfigColor = 
nullptr);
 
-    static void fillColor(Color& rColor, const SfxItemSet& rItemSet, 
ScAutoFontColorMode eAutoMode, const SfxItemSet* pCondSet = nullptr,
-                            const Color* pBackConfigColor = nullptr, const 
Color* pTextConfigColor = nullptr);
+    static void fillColor(model::ComplexColor& rComplexColor,
+                            const SfxItemSet& rItemSet,
+                            ScAutoFontColorMode eAutoMode,
+                            const SfxItemSet* pCondSet = nullptr,
+                            const Color* pBackConfigColor = nullptr,
+                            const Color* pTextConfigColor = nullptr);
 
 
     static ScDxfFont        GetDxfFont(const SfxItemSet& rSet, SvtScriptType 
nScript);
 
-    void fillColor(Color& rColor,
+    void fillColor(model::ComplexColor& rComplexColor,
                     ScAutoFontColorMode eAutoMode,
                     const SfxItemSet* pCondSet = nullptr,
                     const Color* pBackConfigColor = nullptr,
                     const Color* pTextConfigColor = nullptr) const
     {
-        fillColor(rColor, GetItemSet(), eAutoMode, pCondSet, pBackConfigColor, 
pTextConfigColor);
+        fillColor(rComplexColor, GetItemSet(), eAutoMode, pCondSet, 
pBackConfigColor, pTextConfigColor);
     }
 
     void fillFontOnly(vcl::Font& rFont,
diff --git a/sc/qa/unit/helper/qahelper.cxx b/sc/qa/unit/helper/qahelper.cxx
index eff2c62d9aeb..23ddf5271fc4 100644
--- a/sc/qa/unit/helper/qahelper.cxx
+++ b/sc/qa/unit/helper/qahelper.cxx
@@ -177,12 +177,12 @@ void ScModelTestBase::testFormats(ScDocument* 
pDoc,std::u16string_view sFormat)
     //test Sheet2
     const ScPatternAttr* pPattern = pDoc->GetPattern(0, 0, 1);
     vcl::Font aFont;
-    Color aColor;
+    model::ComplexColor aComplexColor;
 
     pPattern->fillFontOnly(aFont);
-    pPattern->fillColor(aColor, ScAutoFontColorMode::Raw);
+    pPattern->fillColor(aComplexColor, ScAutoFontColorMode::Raw);
     CPPUNIT_ASSERT_EQUAL_MESSAGE("font size should be 10", tools::Long(200), 
aFont.GetFontSize().getHeight());
-    CPPUNIT_ASSERT_EQUAL_MESSAGE("font color should be black", COL_AUTO, 
aColor);
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("font color should be black", COL_AUTO, 
aComplexColor.getFinalColor());
     pPattern = pDoc->GetPattern(0,1,1);
     pPattern->fillFontOnly(aFont);
     CPPUNIT_ASSERT_EQUAL_MESSAGE("font size should be 12", tools::Long(240), 
aFont.GetFontSize().getHeight());
@@ -194,8 +194,8 @@ void ScModelTestBase::testFormats(ScDocument* 
pDoc,std::u16string_view sFormat)
     CPPUNIT_ASSERT_EQUAL_MESSAGE("font should be bold", WEIGHT_BOLD, 
aFont.GetWeight());
     pPattern = pDoc->GetPattern(1,0,1);
     pPattern->fillFontOnly(aFont);
-    pPattern->fillColor(aColor, ScAutoFontColorMode::Raw);
-    CPPUNIT_ASSERT_EQUAL_MESSAGE("font should be blue", COL_BLUE, aColor);
+    pPattern->fillColor(aComplexColor, ScAutoFontColorMode::Raw);
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("font should be blue", COL_BLUE, 
aComplexColor.getFinalColor());
     pPattern = pDoc->GetPattern(1,1,1);
     pPattern->fillFontOnly(aFont);
     CPPUNIT_ASSERT_EQUAL_MESSAGE("font should be striked out with a single 
line", STRIKEOUT_SINGLE, aFont.GetStrikeout());
@@ -227,7 +227,7 @@ void ScModelTestBase::testFormats(ScDocument* 
pDoc,std::u16string_view sFormat)
         CPPUNIT_ASSERT_EQUAL( aKnownGoodStr, aTestStr );
     }
     pPattern = pDoc->GetPattern(1,4,1);
-    aColor = pPattern->GetItem(ATTR_BACKGROUND).GetColor();
+    Color aColor = pPattern->GetItem(ATTR_BACKGROUND).GetColor();
     CPPUNIT_ASSERT_EQUAL_MESSAGE("background color should be green", 
COL_LIGHTGREEN, aColor);
     pPattern = pDoc->GetPattern(2,0,1);
     SvxCellHorJustify eHorJustify = 
pPattern->GetItem(ATTR_HOR_JUSTIFY).GetValue();
diff --git a/sc/source/core/data/patattr.cxx b/sc/source/core/data/patattr.cxx
index a8319639dddf..35825bae2fc9 100644
--- a/sc/source/core/data/patattr.cxx
+++ b/sc/source/core/data/patattr.cxx
@@ -252,14 +252,14 @@ void ScPatternAttr::fillFont(
         const SfxItemSet* pCondSet, SvtScriptType nScript,
         const Color* pBackConfigColor, const Color* pTextConfigColor)
 {
-    Color aColor;
+    model::ComplexColor aComplexColor;
 
     //  determine effective font color
     ScPatternAttr::fillFontOnly(rFont, rItemSet, pOutDev, pScale, pCondSet, 
nScript);
-    ScPatternAttr::fillColor(aColor, rItemSet, eAutoMode, pCondSet, 
pBackConfigColor, pTextConfigColor);
+    ScPatternAttr::fillColor(aComplexColor, rItemSet, eAutoMode, pCondSet, 
pBackConfigColor, pTextConfigColor);
 
     //  set font effects
-    rFont.SetColor(aColor);
+    rFont.SetColor(aComplexColor.getFinalColor());
 }
 
 void ScPatternAttr::fillFontOnly(
@@ -431,9 +431,11 @@ void ScPatternAttr::fillFontOnly(
     rFont.SetTransparent( true );
 }
 
-void ScPatternAttr::fillColor(Color& rColor, const SfxItemSet& rItemSet, 
ScAutoFontColorMode eAutoMode, const SfxItemSet* pCondSet, const Color* 
pBackConfigColor, const Color* pTextConfigColor)
+void ScPatternAttr::fillColor(model::ComplexColor& rComplexColor, const 
SfxItemSet& rItemSet, ScAutoFontColorMode eAutoMode, const SfxItemSet* 
pCondSet, const Color* pBackConfigColor, const Color* pTextConfigColor)
 {
-    Color aColor = COL_TRANSPARENT;
+    model::ComplexColor aComplexColor;
+
+    Color aColor;
 
     SvxColorItem const* pColorItem = nullptr;
 
@@ -444,15 +446,24 @@ void ScPatternAttr::fillColor(Color& rColor, const 
SfxItemSet& rItemSet, ScAutoF
         pColorItem = &rItemSet.Get(ATTR_FONT_COLOR);
 
     if (pColorItem)
+    {
+        aComplexColor = pColorItem->getComplexColor();
         aColor = pColorItem->GetValue();
+    }
 
+    if (aComplexColor.getType() == model::ColorType::Unused)
+    {
+        aComplexColor.setColor(aColor);
+    }
 
     if ((aColor == COL_AUTO && eAutoMode != ScAutoFontColorMode::Raw)
         || eAutoMode == ScAutoFontColorMode::IgnoreFont
         || eAutoMode == ScAutoFontColorMode::IgnoreAll)
     {
-        if ( eAutoMode == ScAutoFontColorMode::Black )
+        if (eAutoMode == ScAutoFontColorMode::Black)
+        {
             aColor = COL_BLACK;
+        }
         else
         {
             //  get background color from conditional or own set
@@ -502,9 +513,11 @@ void ScPatternAttr::fillColor(Color& rColor, const 
SfxItemSet& rItemSet, ScAutoF
 
             //  get system text color for comparison
             Color aSysTextColor;
-            if ( eAutoMode == ScAutoFontColorMode::Print )
+            if (eAutoMode == ScAutoFontColorMode::Print)
+            {
                 aSysTextColor = COL_BLACK;
-            else if ( pTextConfigColor )
+            }
+            else if (pTextConfigColor)
             {
                 // pTextConfigColor can be used to avoid repeated lookup of 
the configured color
                 aSysTextColor = *pTextConfigColor;
@@ -532,8 +545,8 @@ void ScPatternAttr::fillColor(Color& rColor, const 
SfxItemSet& rItemSet, ScAutoF
             }
         }
     }
-
-    rColor = aColor;
+    aComplexColor.setFinalColor(aColor);
+    rComplexColor = aComplexColor;
 }
 
 ScDxfFont ScPatternAttr::GetDxfFont(const SfxItemSet& rItemSet, SvtScriptType 
nScript)
diff --git a/sc/source/filter/excel/excrecds.cxx 
b/sc/source/filter/excel/excrecds.cxx
index 3c4aa0571fc6..86afa5a6c163 100644
--- a/sc/source/filter/excel/excrecds.cxx
+++ b/sc/source/filter/excel/excrecds.cxx
@@ -801,7 +801,7 @@ void XclExpAutofilter::AddColorEntry(const ScQueryEntry& 
rEntry)
         // Ensure that selected color(s) will be added to dxf: selection can 
be not in list
         // of already added to dfx colors taken from filter range
         if (GetDxfs().GetDxfByColor(rItem.maColor) == -1)
-            GetDxfs().AddColor(rItem.maColor);
+            GetDxfs().addColor(rItem.maColor);
     }
 }
 
diff --git a/sc/source/filter/excel/xechart.cxx 
b/sc/source/filter/excel/xechart.cxx
index 64525457f894..8f973626046e 100644
--- a/sc/source/filter/excel/xechart.cxx
+++ b/sc/source/filter/excel/xechart.cxx
@@ -1130,8 +1130,8 @@ void XclExpChFontBase::ConvertFontBase( const 
XclExpChRoot& rRoot, sal_uInt16 nF
 {
     if( const XclExpFont* pFont = rRoot.GetFontBuffer().GetFont( nFontIdx ) )
     {
-        XclExpChFontRef xFont = new XclExpChFont( nFontIdx );
-        SetFont( xFont, pFont->GetFontData().maColor, pFont->GetFontColorId() 
);
+        XclExpChFontRef xFont = new XclExpChFont(nFontIdx);
+        SetFont(xFont, pFont->GetFontData().maComplexColor, 
pFont->GetFontColorId());
     }
 }
 
@@ -1152,11 +1152,11 @@ XclExpChText::XclExpChText( const XclExpChRoot& rRoot ) 
:
 {
 }
 
-void XclExpChText::SetFont( XclExpChFontRef xFont, const Color& rColor, 
sal_uInt32 nColorId )
+void XclExpChText::SetFont( XclExpChFontRef xFont, model::ComplexColor const& 
rComplexColor, sal_uInt32 nColorId )
 {
     mxFont = xFont;
-    maData.maTextColor = rColor;
-    ::set_flag( maData.mnFlags, EXC_CHTEXT_AUTOCOLOR, rColor == COL_AUTO );
+    maData.maTextComplexColor = rComplexColor;
+    ::set_flag(maData.mnFlags, EXC_CHTEXT_AUTOCOLOR, 
rComplexColor.getFinalColor() == COL_AUTO);
     mnTextColorId = nColorId;
 }
 
@@ -1386,7 +1386,7 @@ void XclExpChText::WriteBody( XclExpStream& rStrm )
     rStrm   << maData.mnHAlign
             << maData.mnVAlign
             << maData.mnBackMode
-            << maData.maTextColor
+            << maData.maTextComplexColor.getFinalColor()
             << maData.maRect
             << maData.mnFlags;
 
@@ -2845,10 +2845,10 @@ void XclExpChTick::Convert( const ScfPropertySet& 
rPropSet, const XclChExtTypeIn
     }
 }
 
-void XclExpChTick::SetFontColor( const Color& rColor, sal_uInt32 nColorId )
+void XclExpChTick::SetFontColor(model::ComplexColor const& rComplexColor, 
sal_uInt32 nColorId )
 {
-    maData.maTextColor = rColor;
-    ::set_flag( maData.mnFlags, EXC_CHTICK_AUTOCOLOR, rColor == COL_AUTO );
+    maData.maTextComplexColor = rComplexColor;
+    ::set_flag(maData.mnFlags, EXC_CHTICK_AUTOCOLOR, 
rComplexColor.getFinalColor() == COL_AUTO);
     mnTextColorId = nColorId;
 }
 
@@ -2866,7 +2866,7 @@ void XclExpChTick::WriteBody( XclExpStream& rStrm )
             << maData.mnLabelPos
             << maData.mnBackMode;
     rStrm.WriteZeroBytes( 16 );
-    rStrm   << maData.maTextColor
+    rStrm   << maData.maTextComplexColor.getFinalColor()
             << maData.mnFlags;
     if( GetBiff() == EXC_BIFF8 )
         rStrm << GetPalette().GetColorIndex( mnTextColorId ) << 
maData.mnRotation;
@@ -2922,11 +2922,11 @@ XclExpChAxis::XclExpChAxis( const XclExpChRoot& rRoot, 
sal_uInt16 nAxisType ) :
     maData.mnType = nAxisType;
 }
 
-void XclExpChAxis::SetFont( XclExpChFontRef xFont, const Color& rColor, 
sal_uInt32 nColorId )
+void XclExpChAxis::SetFont( XclExpChFontRef xFont, model::ComplexColor const& 
rComplexColor, sal_uInt32 nColorId )
 {
     mxFont = xFont;
     if( mxTick )
-        mxTick->SetFontColor( rColor, nColorId );
+        mxTick->SetFontColor(rComplexColor, nColorId);
 }
 
 void XclExpChAxis::SetRotation( sal_uInt16 nRotation )
diff --git a/sc/source/filter/excel/xecontent.cxx 
b/sc/source/filter/excel/xecontent.cxx
index 47114264a50e..b1329e56f535 100644
--- a/sc/source/filter/excel/xecontent.cxx
+++ b/sc/source/filter/excel/xecontent.cxx
@@ -668,11 +668,11 @@ XclExpCFImpl::XclExpCFImpl( const XclExpRoot& rRoot, 
const ScCondFormatEntry& rF
         if( mbFontUsed )
         {
             vcl::Font aFont;
-            ::Color aColor;
+            model::ComplexColor aComplexColor;
             ScPatternAttr::fillFontOnly(aFont, rItemSet);
-            ScPatternAttr::fillColor(aColor, rItemSet, 
ScAutoFontColorMode::Raw);
-            maFontData.FillFromVclFont(aFont, aColor);
-            mnFontColorId = GetPalette().InsertColor(maFontData.maColor, 
EXC_COLOR_CELLTEXT);
+            ScPatternAttr::fillColor(aComplexColor, rItemSet, 
ScAutoFontColorMode::Raw);
+            maFontData.FillFromVclFont(aFont, aComplexColor);
+            mnFontColorId = 
GetPalette().InsertColor(maFontData.maComplexColor.getFinalColor(), 
EXC_COLOR_CELLTEXT);
         }
 
         // border
diff --git a/sc/source/filter/excel/xehelper.cxx 
b/sc/source/filter/excel/xehelper.cxx
index e9390f8ce6f5..2bae772b0ebd 100644
--- a/sc/source/filter/excel/xehelper.cxx
+++ b/sc/source/filter/excel/xehelper.cxx
@@ -389,8 +389,8 @@ XclExpStringRef lclCreateFormattedString(
 
         // construct font from current text portion
         SvxFont aFont(XclExpFontHelper::GetFontFromItemSet(rRoot, rItemSet, 
nScript));
-        Color aColor;
-        ScPatternAttr::fillColor(aColor, rItemSet, ScAutoFontColorMode::Raw);
+        model::ComplexColor aComplexColor;
+        ScPatternAttr::fillColor(aComplexColor, rItemSet, 
ScAutoFontColorMode::Raw);
 
         // Excel start position of this portion
         sal_Int32 nXclPortionStart = xString->Len();
@@ -399,7 +399,7 @@ XclExpStringRef lclCreateFormattedString(
         if( nXclPortionStart < xString->Len() )
         {
             // insert font into buffer
-            sal_uInt16 nFontIdx = rFontBuffer.Insert(aFont, aColor, 
EXC_COLOR_CELLTEXT);
+            sal_uInt16 nFontIdx = rFontBuffer.Insert(aFont, aComplexColor, 
EXC_COLOR_CELLTEXT);
             // insert font index into format run vector
             xString->AppendFormat( nXclPortionStart, nFontIdx );
         }
@@ -503,8 +503,8 @@ XclExpStringRef lclCreateFormattedString(
                 if( nScript == ApiScriptType::WEAK )
                     nScript = nLastScript;
                 SvxFont aFont( XclExpFontHelper::GetFontFromItemSet(rRoot, 
aItemSet, nScript));
-                Color aColor;
-                ScPatternAttr::fillColor(aColor, aItemSet, 
ScAutoFontColorMode::Raw);
+                model::ComplexColor aComplexColor;
+                ScPatternAttr::fillColor(aComplexColor, aItemSet, 
ScAutoFontColorMode::Raw);
 
                 nLastScript = nScript;
 
@@ -512,10 +512,10 @@ XclExpStringRef lclCreateFormattedString(
                 aFont.SetEscapement( nEsc );
                 // modify automatic font color for hyperlinks
                 if (bIsHyperlink && aItemSet.Get(ATTR_FONT_COLOR).GetValue() 
== COL_AUTO)
-                    aColor = COL_LIGHTBLUE;
+                    aComplexColor.setFinalColor(COL_LIGHTBLUE);
 
                 // insert font into buffer
-                sal_uInt16 nFontIdx = rFontBuffer.Insert(aFont, aColor, 
EXC_COLOR_CELLTEXT);
+                sal_uInt16 nFontIdx = rFontBuffer.Insert(aFont, aComplexColor, 
EXC_COLOR_CELLTEXT);
                 // insert font index into format run vector
                 xString->AppendFormat( nXclPortionStart, nFontIdx );
             }
@@ -731,12 +731,12 @@ void XclExpHFConverter::AppendPortion( const 
EditTextObject* pTextObj, sal_Unico
 // --- font attributes ---
 
                 vcl::Font aFont;
-                Color aColor;
+                model::ComplexColor aComplexColor;
                 aItemSet.ClearItem();
                 SfxItemSet aEditSet( mrEE.GetAttribs( aSel ) );
                 ScPatternAttr::GetFromEditItemSet( aItemSet, aEditSet );
                 ScPatternAttr::fillFontOnly(aFont, aItemSet);
-                ScPatternAttr::fillColor(aColor, aItemSet, 
ScAutoFontColorMode::Raw);
+                ScPatternAttr::fillColor(aComplexColor, aItemSet, 
ScAutoFontColorMode::Raw);
 
                 // font name and style
                 aNewData.maName = XclTools::GetXclFontName( 
aFont.GetFamilyName() );
@@ -789,10 +789,12 @@ void XclExpHFConverter::AppendPortion( const 
EditTextObject* pTextObj, sal_Unico
                 }
 
                 // font color
-                aNewData.maColor = aColor;
-                if ( !aFontData.maColor.IsRGBEqual( aNewData.maColor ) )
+                aNewData.maComplexColor = aComplexColor;
+                Color aNewColor = aNewData.maComplexColor.getFinalColor();
+
+                if 
(!aFontData.maComplexColor.getFinalColor().IsRGBEqual(aNewColor))
                 {
-                    aParaText.append("&K" + aNewData.maColor.AsRGBHexString());
+                    aParaText.append("&K" + aNewColor.AsRGBHexString());
                 }
 
                 // strikeout
diff --git a/sc/source/filter/excel/xestream.cxx 
b/sc/source/filter/excel/xestream.cxx
index 8d31023e4a57..81e7472ab414 100644
--- a/sc/source/filter/excel/xestream.cxx
+++ b/sc/source/filter/excel/xestream.cxx
@@ -883,14 +883,17 @@ sax_fastparser::FSHelperPtr XclXmlUtils::WriteFontData( 
sax_fastparser::FSHelper
     if (bHaveVertAlign)
         pStream->singleElement(XML_vertAlign, XML_val, pVertAlign);
     pStream->singleElement(XML_sz, XML_val, OString::number( 
rFontData.mnHeight / 20.0 )); // Twips->Pt
-    if( rFontData.maColor != Color( ColorAlpha, 0, 0xFF, 0xFF, 0xFF ) )
-        pStream->singleElement( XML_color,
+
+    if (rFontData.maComplexColor.getFinalColor() != Color( ColorAlpha, 0, 
0xFF, 0xFF, 0xFF))
+    {
+        pStream->singleElement(XML_color,
                 // OOXTODO: XML_auto,       bool
                 // OOXTODO: XML_indexed,    uint
-                XML_rgb, XclXmlUtils::ToOString(rFontData.maColor)
+                XML_rgb, 
XclXmlUtils::ToOString(rFontData.maComplexColor.getFinalColor())
                 // OOXTODO: XML_theme,      index into <clrScheme/>
                 // OOXTODO: XML_tint,       double
         );
+    }
     pStream->singleElement(nFontId, XML_val, rFontData.maName);
     pStream->singleElement(XML_family, XML_val, OString::number(  
rFontData.mnFamily ));
     if (rFontData.mnCharSet != 0)
diff --git a/sc/source/filter/excel/xestyle.cxx 
b/sc/source/filter/excel/xestyle.cxx
index 43b9ac5e23c2..652e5f77a951 100644
--- a/sc/source/filter/excel/xestyle.cxx
+++ b/sc/source/filter/excel/xestyle.cxx
@@ -938,21 +938,22 @@ bool XclExpFontHelper::CheckItems( const XclExpRoot& 
rRoot, const SfxItemSet& rI
 
 namespace {
 
-sal_uInt32 lclCalcHash( const XclFontData& rFontData )
-{
-    sal_uInt32 nHash = rFontData.maName.getLength();
-    nHash += sal_uInt32(rFontData.maColor) * 2;
-    nHash += rFontData.mnWeight * 3;
-    nHash += rFontData.mnCharSet * 5;
-    nHash += rFontData.mnFamily * 7;
-    nHash += rFontData.mnHeight * 11;
-    nHash += rFontData.mnUnderline * 13;
-    nHash += rFontData.mnEscapem * 17;
-    if( rFontData.mbItalic ) nHash += 19;
-    if( rFontData.mbStrikeout ) nHash += 23;
-    if( rFontData.mbOutline ) nHash += 29;
-    if( rFontData.mbShadow ) nHash += 31;
-    return nHash;
+std::size_t lclCalcHash( const XclFontData& rFontData )
+{
+    std::size_t seed = 0;
+    o3tl::hash_combine(seed, rFontData.maName);
+    o3tl::hash_combine(seed, rFontData.maComplexColor);
+    o3tl::hash_combine(seed, rFontData.mnWeight);
+    o3tl::hash_combine(seed, rFontData.mnCharSet);
+    o3tl::hash_combine(seed, rFontData.mnFamily);
+    o3tl::hash_combine(seed, rFontData.mnHeight);
+    o3tl::hash_combine(seed, rFontData.mnUnderline);
+    o3tl::hash_combine(seed, rFontData.mnEscapem);
+    o3tl::hash_combine(seed, rFontData.mbItalic);
+    o3tl::hash_combine(seed, rFontData.mbStrikeout);
+    o3tl::hash_combine(seed, rFontData.mbOutline);
+    o3tl::hash_combine(seed, rFontData.mbShadow);
+    return seed;
 }
 
 } // namespace
@@ -964,7 +965,7 @@ XclExpFont::XclExpFont( const XclExpRoot& rRoot,
     maData( rFontData )
 {
     // insert font color into palette
-    mnColorId = rRoot.GetPalette().InsertColor( rFontData.maColor, eColorType, 
EXC_COLOR_FONTAUTO );
+    mnColorId = 
rRoot.GetPalette().InsertColor(rFontData.maComplexColor.getFinalColor(), 
eColorType, EXC_COLOR_FONTAUTO);
     // hash value for faster comparison
     mnHash = lclCalcHash( maData );
     // record size
@@ -1222,18 +1223,18 @@ sal_uInt16 XclExpFontBuffer::Insert(
     return static_cast< sal_uInt16 >( nPos );
 }
 
-sal_uInt16 XclExpFontBuffer::Insert(const SvxFont& rFont, Color const& rColor, 
XclExpColorType eColorType )
+sal_uInt16 XclExpFontBuffer::Insert(const SvxFont& rFont, model::ComplexColor 
const& rComplexColor, XclExpColorType eColorType )
 {
-    return Insert(XclFontData(rFont, rColor), eColorType);
+    return Insert(XclFontData(rFont, rComplexColor), eColorType);
 }
 
 sal_uInt16 XclExpFontBuffer::Insert(const SfxItemSet& rItemSet, sal_Int16 
nScript, XclExpColorType eColorType, bool bAppFont )
 {
     // #i17050# script type now provided by caller
     vcl::Font aFont = XclExpFontHelper::GetFontFromItemSet(GetRoot(), 
rItemSet, nScript);
-    Color aColor;
-    ScPatternAttr::fillColor(aColor, rItemSet, ScAutoFontColorMode::Raw);
-    return Insert(XclFontData(aFont, aColor), eColorType, bAppFont );
+    model::ComplexColor aComplexColor;
+    ScPatternAttr::fillColor(aComplexColor, rItemSet, 
ScAutoFontColorMode::Raw);
+    return Insert(XclFontData(aFont, aComplexColor), eColorType, bAppFont );
 }
 
 void XclExpFontBuffer::Save( XclExpStream& rStrm )
@@ -3208,7 +3209,7 @@ sal_Int32 XclExpDxfs::GetDxfByColor(Color aColor) const
     return -1;
 }
 
-void XclExpDxfs::AddColor(Color aColor)
+void XclExpDxfs::addColor(Color aColor)
 {
     maColorToDxfId.emplace(aColor, maDxf.size());
 
diff --git a/sc/source/filter/excel/xichart.cxx 
b/sc/source/filter/excel/xichart.cxx
index 4a30dcd25323..a52bb103fbb6 100644
--- a/sc/source/filter/excel/xichart.cxx
+++ b/sc/source/filter/excel/xichart.cxx
@@ -949,14 +949,19 @@ void XclImpChText::ReadHeaderRecord( XclImpStream& rStrm )
     maData.mnHAlign = rStrm.ReaduInt8();
     maData.mnVAlign = rStrm.ReaduInt8();
     maData.mnBackMode = rStrm.ReaduInt16();
-    rStrm   >> maData.maTextColor
-            >> maData.maRect;
+
+    Color aColor;
+    rStrm >> aColor;
+    maData.maTextComplexColor.setColor(aColor);
+
+    rStrm  >> maData.maRect;
     maData.mnFlags = rStrm.ReaduInt16();
 
     if( GetBiff() == EXC_BIFF8 )
     {
         // BIFF8: index into palette used instead of RGB data
-        maData.maTextColor = GetPalette().GetColor( rStrm.ReaduInt16() );
+        aColor = GetPalette().GetColor(rStrm.ReaduInt16());
+        maData.maTextComplexColor.setColor(aColor);
         // placement and rotation
         maData.mnFlags2 = rStrm.ReaduInt16();
         maData.mnRotation = rStrm.ReaduInt16();
@@ -1015,7 +1020,7 @@ sal_uInt16 XclImpChText::GetFontIndex() const
 
 Color XclImpChText::GetFontColor() const
 {
-    return ::get_flag( maData.mnFlags, EXC_CHTEXT_AUTOCOLOR ) ? 
GetFontAutoColor() : maData.maTextColor;
+    return ::get_flag(maData.mnFlags, EXC_CHTEXT_AUTOCOLOR) ? 
GetFontAutoColor() : maData.maTextComplexColor.getFinalColor();
 }
 
 sal_uInt16 XclImpChText::GetRotation() const
@@ -1042,8 +1047,8 @@ void XclImpChText::UpdateText( const XclImpChText* 
pParentText )
     {
         mxFont = pParentText->mxFont;
         // text color is taken from CHTEXT record, not from font in CHFONT
-        ::set_flag( maData.mnFlags, EXC_CHTEXT_AUTOCOLOR, ::get_flag( 
pParentText->maData.mnFlags, EXC_CHTEXT_AUTOCOLOR ) );
-        maData.maTextColor = pParentText->maData.maTextColor;
+        ::set_flag(maData.mnFlags, EXC_CHTEXT_AUTOCOLOR, 
::get_flag(pParentText->maData.mnFlags, EXC_CHTEXT_AUTOCOLOR));
+        maData.maTextComplexColor = pParentText->maData.maTextComplexColor;
     }
 }
 
@@ -3193,13 +3198,15 @@ void XclImpChTick::ReadChTick( XclImpStream& rStrm )
     maData.mnLabelPos = rStrm.ReaduInt8();
     maData.mnBackMode = rStrm.ReaduInt8();
     rStrm.Ignore( 16 );
-    rStrm >> maData.maTextColor;
+    Color aColor;
+    rStrm >> aColor;
+    maData.maTextComplexColor.setColor(aColor);
     maData.mnFlags = rStrm.ReaduInt16();
 
     if( GetBiff() == EXC_BIFF8 )
     {
         // BIFF8: index into palette used instead of RGB data
-        maData.maTextColor = GetPalette().GetColor( rStrm.ReaduInt16() );
+        
maData.maTextComplexColor.setColor(GetPalette().GetColor(rStrm.ReaduInt16()));
         // rotation
         maData.mnRotation = rStrm.ReaduInt16();
     }
@@ -3213,7 +3220,7 @@ void XclImpChTick::ReadChTick( XclImpStream& rStrm )
 
 Color XclImpChTick::GetFontColor() const
 {
-    return ::get_flag( maData.mnFlags, EXC_CHTICK_AUTOCOLOR ) ? 
GetFontAutoColor() : maData.maTextColor;
+    return ::get_flag(maData.mnFlags, EXC_CHTICK_AUTOCOLOR) ? 
GetFontAutoColor() : maData.maTextComplexColor.getFinalColor();
 }
 
 sal_uInt16 XclImpChTick::GetRotation() const
diff --git a/sc/source/filter/excel/xistyle.cxx 
b/sc/source/filter/excel/xistyle.cxx
index 7361c7ee612d..0d417deb4886 100644
--- a/sc/source/filter/excel/xistyle.cxx
+++ b/sc/source/filter/excel/xistyle.cxx
@@ -309,7 +309,7 @@ void XclImpFont::ReadCFFontBlock( XclImpStream& rStrm )
     if( (mbUnderlUsed = !::get_flag( nFontFlags3, EXC_CF_FONT_UNDERL ) && 
(nUnderl <= 0x7F)) )
         maData.mnUnderline = nUnderl;
     if( (mbColorUsed = (nColor <= 0x7FFF)) )
-        maData.maColor = GetPalette().GetColor( static_cast< sal_uInt16 >( 
nColor ) );
+        
maData.maComplexColor.setColor(GetPalette().GetColor(sal_uInt16(nColor)));
     if( (mbStrikeUsed = !::get_flag( nFontFlags1, EXC_CF_FONT_STRIKEOUT )) )
         maData.mbStrikeout = ::get_flag( nStyle, EXC_CF_FONT_STRIKEOUT );
 }
@@ -368,7 +368,7 @@ void XclImpFont::FillToItemSet( SfxItemSet& rItemSet, 
XclFontItemType eType, boo
 
 // Font color - pass AUTO_COL to item
     if( mbColorUsed )
-        PUTITEM( SvxColorItem( maData.maColor, ATTR_FONT_COLOR  ), 
ATTR_FONT_COLOR, EE_CHAR_COLOR );
+        PUTITEM(SvxColorItem(maData.maComplexColor.getFinalColor(), 
maData.maComplexColor, ATTR_FONT_COLOR ), ATTR_FONT_COLOR, EE_CHAR_COLOR);
 
 // Font weight (for all script types)
     if( mbWeightUsed )
@@ -455,7 +455,7 @@ void XclImpFont::ReadFontData5( XclImpStream& rStrm )
 
 void XclImpFont::ReadFontColor( XclImpStream& rStrm )
 {
-    maData.maColor = GetPalette().GetColor( rStrm.ReaduInt16() );
+    maData.maComplexColor.setColor(GetPalette().GetColor(rStrm.ReaduInt16()));
 }
 
 void XclImpFont::ReadFontName2( XclImpStream& rStrm )
diff --git a/sc/source/filter/excel/xlchart.cxx 
b/sc/source/filter/excel/xlchart.cxx
index 92c4899a0c60..011d4578ff6f 100644
--- a/sc/source/filter/excel/xlchart.cxx
+++ b/sc/source/filter/excel/xlchart.cxx
@@ -153,7 +153,6 @@ XclChFrLabelProps::XclChFrLabelProps() :
 }
 
 XclChText::XclChText() :
-    maTextColor( COL_BLACK ),
     mnHAlign( EXC_CHTEXT_ALIGN_CENTER ),
     mnVAlign( EXC_CHTEXT_ALIGN_CENTER ),
     mnBackMode( EXC_CHTEXT_TRANSPARENT ),
@@ -161,6 +160,7 @@ XclChText::XclChText() :
     mnFlags2( EXC_CHTEXT_POS_DEFAULT ),
     mnRotation( EXC_ROT_NONE )
 {
+    maTextComplexColor.setColor(COL_BLACK);
 }
 
 // Data series ================================================================
@@ -303,7 +303,6 @@ XclChValueRange::XclChValueRange() :
 }
 
 XclChTick::XclChTick() :
-    maTextColor( COL_BLACK ),
     mnMajor( EXC_CHTICK_INSIDE | EXC_CHTICK_OUTSIDE ),
     mnMinor( 0 ),
     mnLabelPos( EXC_CHTICK_NEXT ),
@@ -311,6 +310,7 @@ XclChTick::XclChTick() :
     mnFlags( EXC_CHTICK_AUTOCOLOR | EXC_CHTICK_AUTOROT ),
     mnRotation( EXC_ROT_NONE )
 {
+    maTextComplexColor.setColor(COL_BLACK);
 }
 
 XclChAxis::XclChAxis() :
diff --git a/sc/source/filter/excel/xlstyle.cxx 
b/sc/source/filter/excel/xlstyle.cxx
index f42d30edc574..5c494a7e60da 100644
--- a/sc/source/filter/excel/xlstyle.cxx
+++ b/sc/source/filter/excel/xlstyle.cxx
@@ -174,22 +174,22 @@ XclFontData::XclFontData()
     Clear();
 }
 
-XclFontData::XclFontData(const vcl::Font& rFont, Color const& rColor)
+XclFontData::XclFontData(const vcl::Font& rFont, model::ComplexColor const& 
rComplexColor)
 {
     Clear();
-    FillFromVclFont(rFont, rColor);
+    FillFromVclFont(rFont, rComplexColor);
 }
 
-XclFontData::XclFontData(const SvxFont& rFont, Color const& rColor)
+XclFontData::XclFontData(const SvxFont& rFont, model::ComplexColor const& 
rComplexColor)
 {
-    FillFromSvxFont(rFont, rColor);
+    FillFromSvxFont(rFont, rComplexColor);
 }
 
 void XclFontData::Clear()
 {
     maName.clear();
     maStyle.clear();
-    maColor = COL_AUTO;
+    maComplexColor.setColor(COL_AUTO);
     mnHeight = 0;
     mnWeight = EXC_FONTWGHT_DONTKNOW;
     mnEscapem = EXC_FONTESC_NONE;
@@ -199,11 +199,10 @@ void XclFontData::Clear()
     mbItalic = mbStrikeout = mbOutline = mbShadow = false;
 }
 
-void XclFontData::FillFromVclFont(const vcl::Font& rFont, Color const& rColor)
+void XclFontData::FillFromVclFont(const vcl::Font& rFont, model::ComplexColor 
const& rComplexColor)
 {
     maName = XclTools::GetXclFontName( rFont.GetFamilyName() );   // 
substitute with MS fonts
     maStyle.clear();
-    maColor = rColor;
     SetScUnderline( rFont.GetUnderline() );
     mnEscapem = EXC_FONTESC_NONE;
     SetScHeight( rFont.GetFontSize().Height() );
@@ -214,11 +213,13 @@ void XclFontData::FillFromVclFont(const vcl::Font& rFont, 
Color const& rColor)
     SetScStrikeout( rFont.GetStrikeout() );
     mbOutline = rFont.IsOutline();
     mbShadow = rFont.IsShadow();
+
+    maComplexColor = rComplexColor;
 }
 
-void XclFontData::FillFromSvxFont(const SvxFont& rFont, Color const& rColor)
+void XclFontData::FillFromSvxFont(const SvxFont& rFont, model::ComplexColor 
const& rComplexColor)
 {
-    FillFromVclFont(rFont, rColor);
+    FillFromVclFont(rFont, rComplexColor);
     SetScEscapement(rFont.GetEscapement());
 }
 
@@ -520,7 +521,7 @@ bool operator==( const XclFontData& rLeft, const 
XclFontData& rRight )
         (rLeft.mnHeight    == rRight.mnHeight)    &&
         (rLeft.mnWeight    == rRight.mnWeight)    &&
         (rLeft.mnUnderline == rRight.mnUnderline) &&
-        (rLeft.maColor     == rRight.maColor)     &&
+        (rLeft.maComplexColor == rRight.maComplexColor) &&
         (rLeft.mnEscapem   == rRight.mnEscapem)   &&
         (rLeft.mnFamily    == rRight.mnFamily)    &&
         (rLeft.mnCharSet   == rRight.mnCharSet)   &&
@@ -638,11 +639,13 @@ void XclFontPropSetHelper::ReadFontProperties( 
XclFontData& rFontData,
             rPropSetHlp >> aApiFontName >> fApiHeight >> eApiPosture >> 
fApiWeight;
             // read common properties
             maHlpChCommon.ReadFromPropertySet( rPropSet );
-            maHlpChCommon   >> nApiUnderl
-                            >> nApiStrikeout
-                            >> rFontData.maColor
-                            >> rFontData.mbOutline
-                            >> rFontData.mbShadow;
+            maHlpChCommon >> nApiUnderl;
+            maHlpChCommon >> nApiStrikeout;
+            Color aColor;
+            maHlpChCommon >> aColor;
+            rFontData.maComplexColor.setColor(aColor);
+            maHlpChCommon >> rFontData.mbOutline;
+            maHlpChCommon >> rFontData.mbShadow;
 
             // convert API property values to Excel settings
             lclSetApiFontSettings( rFontData, aApiFontName,
@@ -667,15 +670,17 @@ void XclFontPropSetHelper::ReadFontProperties( 
XclFontData& rFontData,
 
             // read font properties
             maHlpControl.ReadFromPropertySet( rPropSet );
-            maHlpControl    >> aApiFontName
-                            >> nApiFamily
-                            >> nApiCharSet
-                            >> fApiHeight
-                            >> nApiPosture
-                            >> fApiWeight
-                            >> nApiUnderl
-                            >> nApiStrikeout
-                            >> rFontData.maColor;
+            maHlpControl >> aApiFontName;
+            maHlpControl >> nApiFamily;
+            maHlpControl >> nApiCharSet;
+            maHlpControl >> fApiHeight;
+            maHlpControl >> nApiPosture;
+            maHlpControl >> fApiWeight;
+            maHlpControl >> nApiUnderl;
+            maHlpControl >> nApiStrikeout;
+            Color aColor;
+            maHlpControl >> aColor;
+            rFontData.maComplexColor.setColor(aColor);
 
             // convert API property values to Excel settings
             Awt::FontSlant eApiPosture = static_cast< Awt::FontSlant >( 
nApiPosture );
@@ -699,10 +704,10 @@ void XclFontPropSetHelper::WriteFontProperties(
         {
             // write common properties
             maHlpChCommon.InitializeWrite();
-            const Color& rColor = pFontColor ? *pFontColor : rFontData.maColor;
+            Color aColor = pFontColor ? *pFontColor : 
rFontData.maComplexColor.getFinalColor();
             maHlpChCommon   << rFontData.GetApiUnderline()
                             << rFontData.GetApiStrikeout()
-                            << rColor
+                            << aColor
                             << rFontData.mbOutline
                             << rFontData.mbShadow;
             maHlpChCommon.WriteToPropertySet( rPropSet );
@@ -733,7 +738,7 @@ void XclFontPropSetHelper::WriteFontProperties(
                             << rFontData.GetApiWeight()
                             << rFontData.GetApiUnderline()
                             << rFontData.GetApiStrikeout()
-                            << rFontData.maColor;
+                            << rFontData.maComplexColor.getFinalColor();
             maHlpControl.WriteToPropertySet( rPropSet );
         }
         break;
diff --git a/sc/source/filter/inc/xechart.hxx b/sc/source/filter/inc/xechart.hxx
index ff7dcc90920f..fb1eefca85f4 100644
--- a/sc/source/filter/inc/xechart.hxx
+++ b/sc/source/filter/inc/xechart.hxx
@@ -473,7 +473,7 @@ public:
     virtual             ~XclExpChFontBase();
 
     /** Derived classes set font color and color identifier to internal data 
structures. */
-    virtual void        SetFont( XclExpChFontRef xFont, const Color& rColor, 
sal_uInt32 nColorId ) = 0;
+    virtual void SetFont( XclExpChFontRef xFont, const model::ComplexColor& 
rComplexColor, sal_uInt32 nColorId ) = 0;
     /** Derived classes set text rotation to internal data structures. */
     virtual void        SetRotation( sal_uInt16 nRotation ) = 0;
 
@@ -496,7 +496,7 @@ public:
     explicit            XclExpChText( const XclExpChRoot& rRoot );
 
     /** Sets font color and color identifier to internal data structures. */
-    virtual void        SetFont( XclExpChFontRef xFont, const Color& rColor, 
sal_uInt32 nColorId ) override;
+    virtual void SetFont( XclExpChFontRef xFont, model::ComplexColor const& 
rComplexColor, sal_uInt32 nColorId ) override;
     /** Sets text rotation to internal data structures. */
     virtual void        SetRotation( sal_uInt16 nRotation ) override;
 
@@ -993,7 +993,8 @@ public:
     /** Converts axis tick mark settings. */
     void                Convert( const ScfPropertySet& rPropSet, const 
XclChExtTypeInfo& rTypeInfo, sal_uInt16 nAxisType );
     /** Sets font color and color identifier to internal data structures. */
-    void                SetFontColor( const Color& rColor, sal_uInt32 nColorId 
);
+    void SetFontColor(model::ComplexColor const& rComplexColor, sal_uInt32 
nColorId);
+
     /** Sets text rotation to internal data structures. */
     void                SetRotation( sal_uInt16 nRotation );
 
@@ -1019,7 +1020,7 @@ public:
     explicit            XclExpChAxis( const XclExpChRoot& rRoot, sal_uInt16 
nAxisType );
 
     /** Sets font color and color identifier to internal data structures. */
-    virtual void        SetFont( XclExpChFontRef xFont, const Color& rColor, 
sal_uInt32 nColorId ) override;
+    virtual void SetFont( XclExpChFontRef xFont, model::ComplexColor const& 
rComplexColor, sal_uInt32 nColorId ) override;
     /** Sets text rotation to internal data structures. */
     virtual void        SetRotation( sal_uInt16 nRotation ) override;
 
diff --git a/sc/source/filter/inc/xestyle.hxx b/sc/source/filter/inc/xestyle.hxx
index c479c6ac51f6..04e0a752bc6b 100644
--- a/sc/source/filter/inc/xestyle.hxx
+++ b/sc/source/filter/inc/xestyle.hxx
@@ -221,7 +221,7 @@ public:
     sal_uInt16          Insert(const XclFontData& rFontData, XclExpColorType 
eColorType, bool bAppFont = false );
     /** Inserts the SvxFont into the buffer if not present, e.g. where 
escapements are used.
         @return  The resulting Excel font index. */
-    sal_uInt16          Insert(const SvxFont& rFont, Color const& rColor, 
XclExpColorType eColorType);
+    sal_uInt16 Insert(const SvxFont& rFont, model::ComplexColor const& 
rComplexColor, XclExpColorType eColorType);
     /** Inserts the font contained in the passed item set into the buffer, if 
not present.
         @param nScript  The script type of the font properties to be used.
         @param bAppFont  true = Sets the application font; false = Inserts a 
new font.
@@ -756,7 +756,7 @@ public:
 
     sal_Int32 GetDxfId(const OUString& rName) const;
     sal_Int32 GetDxfByColor(Color aColor) const;
-    void AddColor(Color aColor);
+    void addColor(Color aColor);
 
     virtual void SaveXml( XclExpXmlStream& rStrm) override;
     void Finalize();
diff --git a/sc/source/filter/inc/xlchart.hxx b/sc/source/filter/inc/xlchart.hxx
index e28c6943c22a..d1a6a56b0972 100644
--- a/sc/source/filter/inc/xlchart.hxx
+++ b/sc/source/filter/inc/xlchart.hxx
@@ -20,6 +20,7 @@
 #pragma once
 
 #include <tools/gen.hxx>
+#include <docmodel/color/ComplexColor.hxx>
 #include "fapihelper.hxx"
 #include <map>
 #include <memory>
@@ -870,7 +871,8 @@ struct XclChFrLabelProps
 struct XclChText
 {
     XclChRectangle      maRect;             /// Position of the text object.
-    Color               maTextColor;        /// Text color.
+    //Color               maTextColor;        /// Text color.
+    model::ComplexColor maTextComplexColor;
     sal_uInt8           mnHAlign;           /// Horizontal alignment.
     sal_uInt8           mnVAlign;           /// Vertical alignment.
     sal_uInt16          mnBackMode;         /// Background mode: transparent, 
opaque.
@@ -1042,7 +1044,7 @@ struct XclChValueRange
 
 struct XclChTick
 {
-    Color               maTextColor;        /// Tick labels color.
+    model::ComplexColor maTextComplexColor; /// Tick labels color.
     sal_uInt8           mnMajor;            /// Type of tick marks of major 
grid.
     sal_uInt8           mnMinor;            /// Type of tick marks of minor 
grid.
     sal_uInt8           mnLabelPos;         /// Position of labels relative to 
axis.
diff --git a/sc/source/filter/inc/xlstyle.hxx b/sc/source/filter/inc/xlstyle.hxx
index d1faabc51ae6..2385b00136af 100644
--- a/sc/source/filter/inc/xlstyle.hxx
+++ b/sc/source/filter/inc/xlstyle.hxx
@@ -21,6 +21,7 @@
 
 #include <map>
 #include <com/sun/star/awt/FontSlant.hpp>
+#include <docmodel/color/ComplexColor.hxx>
 #include <tools/color.hxx>
 #include <tools/fontenum.hxx>
 #include <editeng/svxenum.hxx>
@@ -284,7 +285,6 @@ struct XclFontData
 {
     OUString            maName;         /// Font name.
     OUString            maStyle;        /// String with styles (bold, italic).
-    Color               maColor;        /// Font color.
     sal_uInt16          mnHeight;       /// Font height in twips (1/20 of a 
point).
     sal_uInt16          mnWeight;       /// Boldness: 400=normal, 700=bold.
     sal_uInt16          mnEscapem;      /// Escapement type.
@@ -296,19 +296,21 @@ struct XclFontData
     bool                mbOutline;      /// true = Outlined.
     bool                mbShadow;       /// true = Shadowed.
 
+    model::ComplexColor maComplexColor; /// Font color.
+
     /** Constructs an empty font data structure. */
-    explicit            XclFontData();
+    explicit XclFontData();
     /** Constructs a font data structure and fills it with the passed font 
attributes (except color). */
-    explicit            XclFontData(const vcl::Font& rFont, Color const& 
aColor);
+    explicit XclFontData(const vcl::Font& rFont, model::ComplexColor const& 
rComplexColor);
     /** As directly above but also fills in the escapement member. */
-    explicit            XclFontData(const SvxFont& rFont, Color const& aColor);
+    explicit XclFontData(const SvxFont& rFont, model::ComplexColor const& 
rComplexColor);
 
     /** Resets all members to default (empty) values. */
     void                Clear();
     /** Fills all members (except color and escapement) from the passed font. 
*/
-    void                FillFromVclFont(const vcl::Font& rFont, Color const& 
rColor);
+    void FillFromVclFont(const vcl::Font& rFont, model::ComplexColor const& 
rComplexColor);
     /** Fills all members (except color) from the passed SVX font. */
-    void                FillFromSvxFont(const SvxFont& rFont, Color const& 
rColor);
+    void FillFromSvxFont(const SvxFont& rFont, model::ComplexColor const& 
rComplexColor);
 
 // *** conversion of VCL/SVX constants *** ------------------------------------
 

Reply via email to