cui/source/tabpages/backgrnd.cxx               |    8 
 cui/source/tabpages/border.cxx                 |    4 
 cui/source/tabpages/chardlg.cxx                |   34 +-
 cui/source/tabpages/tpcolor.cxx                |   32 --
 desktop/qa/data/ThemeDocument.docx             |binary
 desktop/qa/desktop_lib/test_desktop_lib.cxx    |   40 +++
 desktop/source/lib/init.cxx                    |    2 
 docmodel/source/color/ComplexColorJSON.cxx     |   16 -
 editeng/source/items/borderline.cxx            |   22 +
 editeng/source/items/frmitems.cxx              |  104 ++++++++
 editeng/source/items/textitem.cxx              |   44 ++-
 include/LibreOfficeKit/LibreOfficeKitEnums.h   |    9 
 include/docmodel/color/ComplexColorJSON.hxx    |    3 
 include/editeng/borderline.hxx                 |   19 +
 include/editeng/boxitem.hxx                    |   17 +
 include/editeng/brushitem.hxx                  |   22 +
 include/editeng/colritem.hxx                   |   14 +
 include/editeng/memberids.h                    |   18 +
 include/editeng/udlnitem.hxx                   |   26 +-
 include/svx/frmsel.hxx                         |    2 
 include/svx/svdpage.hxx                        |    1 
 include/svx/theme/ThemeColorPaletteManager.hxx |    1 
 libreofficekit/source/gtk/lokdocview.cxx       |    1 
 sd/source/ui/inc/ViewShellBase.hxx             |    2 
 sd/source/ui/view/ViewShellBase.cxx            |    5 
 svx/source/dialog/frmsel.cxx                   |    6 
 svx/source/svdraw/svdpage.cxx                  |   19 +
 svx/source/theme/ThemeColorPaletteManager.cxx  |   43 +++
 svx/source/unodraw/unobrushitemhelper.cxx      |   15 -
 sw/inc/unoprnms.hxx                            |   20 +
 sw/inc/view.hxx                                |    2 
 sw/source/core/docnode/ndtbl1.cxx              |    8 
 sw/source/core/model/ThemeColorChanger.cxx     |  297 +++++++++++++++++++++++--
 sw/source/core/unocore/unomap.cxx              |   23 +
 sw/source/core/unocore/unomap1.cxx             |   30 ++
 sw/source/core/unocore/unomapproperties.hxx    |   27 ++
 sw/source/uibase/docvw/edtwin.cxx              |    2 
 sw/source/uibase/inc/uitool.hxx                |    3 
 sw/source/uibase/shells/basesh.cxx             |    3 
 sw/source/uibase/shells/frmsh.cxx              |   16 -
 sw/source/uibase/shells/textsh1.cxx            |   38 +--
 sw/source/uibase/sidebar/PageStylesPanel.cxx   |    5 
 sw/source/uibase/uiview/view.cxx               |   15 +
 sw/source/uibase/utlui/uitool.cxx              |    7 
 44 files changed, 865 insertions(+), 160 deletions(-)

New commits:
commit a87efdf4cdd950129e005370ef822a56286d3ba0
Author:     Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk>
AuthorDate: Tue May 30 21:11:28 2023 +0900
Commit:     Tomaž Vajngerl <qui...@gmail.com>
CommitDate: Tue Jun 6 08:36:49 2023 +0200

    sw: border and background theme color support for multiple props.
    
    This adds support for theme colors for multiple properties that
    are stored in SvxBoxItem and SvxBrushItem / XFillColorItem. For
    those items the ComplexColor member variable was introduced.
    
    The UNO properties for the colors are added.
    
    The properties with the added support includes paragraph border
    and background + styles, page border and  background, frame border
    and background + styles.
    
    The ThemeColorChanges has been extended to support changing the
    colors for those propertes.
    
    Color picker and tab pages have been fixed so they pass or set
    the theme color properties to the items.
    
    Change-Id: Id27272f5c4a448703a62a759d829e8a9540066e4
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/152397
    Tested-by: Jenkins
    Reviewed-by: Tomaž Vajngerl <qui...@gmail.com>
    (cherry picked from commit cc6db9f418cae422a4733163f85801c5a14f47c8)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/152590
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com>

diff --git a/cui/source/tabpages/backgrnd.cxx b/cui/source/tabpages/backgrnd.cxx
index 14269ad3c6c8..5706f98c310a 100644
--- a/cui/source/tabpages/backgrnd.cxx
+++ b/cui/source/tabpages/backgrnd.cxx
@@ -166,13 +166,13 @@ bool SvxBkgTabPage::FillItemSet( SfxItemSet* rCoreSet )
             XFillColorItem aColorItem( maSet.Get( XATTR_FILLCOLOR ) );
             if ( SID_ATTR_CHAR_BACK_COLOR == nSlot )
             {
-                maSet.Put( SvxColorItem( aColorItem.GetColorValue(), nWhich ) 
);
-                rCoreSet->Put( SvxColorItem( aColorItem.GetColorValue(), 
nWhich ) );
+                maSet.Put( SvxColorItem( aColorItem.GetColorValue(), 
aColorItem.getComplexColor(), nWhich ) );
+                rCoreSet->Put( SvxColorItem( aColorItem.GetColorValue(), 
aColorItem.getComplexColor(), nWhich ) );
             }
             else
             {
-                maSet.Put( SvxBrushItem( aColorItem.GetColorValue(), nWhich ) 
);
-                rCoreSet->Put( SvxBrushItem( aColorItem.GetColorValue(), 
nWhich ) );
+                maSet.Put( SvxBrushItem( aColorItem.GetColorValue(), 
aColorItem.getComplexColor(), nWhich ) );
+                rCoreSet->Put( SvxBrushItem( aColorItem.GetColorValue(), 
aColorItem.getComplexColor(), nWhich ) );
             }
             break;
         }
diff --git a/cui/source/tabpages/border.cxx b/cui/source/tabpages/border.cxx
index 9b94bc0eb28a..549ab533410a 100644
--- a/cui/source/tabpages/border.cxx
+++ b/cui/source/tabpages/border.cxx
@@ -1234,8 +1234,8 @@ IMPL_LINK_NOARG(SvxBorderTabPage, SelSdwHdl_Impl, 
ValueSet*, void)
 
 IMPL_LINK(SvxBorderTabPage, SelColHdl_Impl, ColorListBox&, rColorBox, void)
 {
-    Color aColor = rColorBox.GetSelectEntryColor();
-    m_aFrameSel.SetColorToSelection(aColor);
+    NamedColor aNamedColor = rColorBox.GetSelectedEntry();
+    m_aFrameSel.SetColorToSelection(aNamedColor.m_aColor, 
aNamedColor.getComplexColor());
 }
 
 IMPL_LINK_NOARG(SvxBorderTabPage, ModifyWidthLBHdl_Impl, weld::ComboBox&, void)
diff --git a/cui/source/tabpages/chardlg.cxx b/cui/source/tabpages/chardlg.cxx
index 46dd3ded5e6f..c8bbdd441231 100644
--- a/cui/source/tabpages/chardlg.cxx
+++ b/cui/source/tabpages/chardlg.cxx
@@ -2095,21 +2095,26 @@ bool SvxCharEffectsPage::FillItemSet( SfxItemSet* rSet )
         //! item-state in the 'rOldSet' will be invalid. In this case
         //! changing the underline style will be allowed if a style is
         //! selected in the listbox.
-        bool bAllowChg = nPos != -1  &&
+        bool bAllowChange = nPos != -1  &&
                          SfxItemState::DEFAULT > rOldSet.GetItemState( nWhich 
);
 
         const SvxUnderlineItem& rItem = *static_cast<const 
SvxUnderlineItem*>(pOld);
-        if ( rItem.GetValue() == eUnder &&
-             ( LINESTYLE_NONE == eUnder || rItem.GetColor() == 
m_xUnderlineColorLB->GetSelectEntryColor() ) &&
-             ! bAllowChg )
+        if (rItem.GetValue() == eUnder &&
+             (LINESTYLE_NONE == eUnder || (rItem.GetColor() == 
m_xUnderlineColorLB->GetSelectEntryColor() &&
+                                           rItem.getComplexColor() == 
m_xUnderlineColorLB->GetSelectedEntry().getComplexColor())) &&
+             !bAllowChange)
+        {
             bChanged = false;
+        }
     }
 
     if ( bChanged )
     {
         SvxUnderlineItem aNewItem( eUnder, nWhich );
-        aNewItem.SetColor( m_xUnderlineColorLB->GetSelectEntryColor() );
-        rSet->Put( aNewItem );
+        auto aNamedColor = m_xUnderlineColorLB->GetSelectedEntry();
+        aNewItem.SetColor(aNamedColor.m_aColor);
+        aNewItem.setComplexColor(aNamedColor.getComplexColor());
+        rSet->Put(aNewItem);
         bModified = true;
     }
     else if ( SfxItemState::DEFAULT == rOldSet.GetItemState( nWhich, false ) )
@@ -2129,21 +2134,26 @@ bool SvxCharEffectsPage::FillItemSet( SfxItemSet* rSet )
         //! item-state in the 'rOldSet' will be invalid. In this case
         //! changing the underline style will be allowed if a style is
         //! selected in the listbox.
-        bool bAllowChg = nPos != -1 &&
+        bool bAllowChange = nPos != -1 &&
                          SfxItemState::DEFAULT > rOldSet.GetItemState( nWhich 
);
 
         const SvxOverlineItem& rItem = *static_cast<const 
SvxOverlineItem*>(pOld);
-        if ( rItem.GetValue() == eOver &&
-             ( LINESTYLE_NONE == eOver || rItem.GetColor() == 
m_xOverlineColorLB->GetSelectEntryColor() ) &&
-             ! bAllowChg )
+        if (rItem.GetValue() == eOver &&
+             (LINESTYLE_NONE == eOver || (rItem.GetColor() == 
m_xOverlineColorLB->GetSelectEntryColor() &&
+                                           rItem.getComplexColor() == 
m_xOverlineColorLB->GetSelectedEntry().getComplexColor())) &&
+             !bAllowChange)
+        {
             bChanged = false;
+        }
     }
 
     if ( bChanged )
     {
         SvxOverlineItem aNewItem( eOver, nWhich );
-        aNewItem.SetColor( m_xOverlineColorLB->GetSelectEntryColor() );
-        rSet->Put( aNewItem );
+        auto aNamedColor = m_xOverlineColorLB->GetSelectedEntry();
+        aNewItem.SetColor(aNamedColor.m_aColor);
+        aNewItem.setComplexColor(aNamedColor.getComplexColor());
+        rSet->Put(aNewItem);
         bModified = true;
     }
     else if ( SfxItemState::DEFAULT == rOldSet.GetItemState( nWhich, false ) )
diff --git a/cui/source/tabpages/tpcolor.cxx b/cui/source/tabpages/tpcolor.cxx
index 36794ec929b4..ec0f9bec27c2 100644
--- a/cui/source/tabpages/tpcolor.cxx
+++ b/cui/source/tabpages/tpcolor.cxx
@@ -243,24 +243,12 @@ bool SvxColorTabPage::FillItemSet( SfxItemSet* rSet )
        sColorName = m_xValSetColorList->GetItemText( 
m_xValSetColorList->GetSelectedItemId() );
     else
        sColorName = "#" + 
m_aCurrentColor.m_aColor.AsRGBHexString().toAsciiUpperCase();
-    maPaletteManager.AddRecentColor( m_aCurrentColor.m_aColor, sColorName );
-    XFillColorItem aColorItem( sColorName, m_aCurrentColor.m_aColor );
-    model::ThemeColorType eType = 
model::convertToThemeColorType(m_aCurrentColor.m_nThemeIndex);
-    if (eType != model::ThemeColorType::Unknown)
-    {
-        aColorItem.getComplexColor().setSchemeColor(eType);
-    }
-    aColorItem.getComplexColor().clearTransformations();
-    if (m_aCurrentColor.m_nLumMod != 10000)
-    {
-        
aColorItem.getComplexColor().addTransformation({model::TransformationType::LumMod,
 m_aCurrentColor.m_nLumMod});
-    }
-    if (m_aCurrentColor.m_nLumOff != 0)
-    {
-        
aColorItem.getComplexColor().addTransformation({model::TransformationType::LumOff,
 m_aCurrentColor.m_nLumOff});
-    }
-    rSet->Put( aColorItem );
-    rSet->Put( XFillStyleItem( drawing::FillStyle_SOLID ) );
+
+    maPaletteManager.AddRecentColor(m_aCurrentColor.m_aColor, sColorName);
+    XFillColorItem aColorItem(sColorName, m_aCurrentColor.m_aColor);
+    aColorItem.setComplexColor(m_aCurrentColor.getComplexColor());
+    rSet->Put(aColorItem);
+    rSet->Put(XFillStyleItem(drawing::FillStyle_SOLID));
     return true;
 }
 
@@ -514,14 +502,10 @@ IMPL_LINK(SvxColorTabPage, SelectValSetHdl_Impl, 
ValueSet*, pValSet, void)
     m_aCtlPreviewNew.SetAttributes( aXFillAttr.GetItemSet() );
     m_aCtlPreviewNew.Invalidate();
 
-    bool bThemePaletteSelected = false;
-    if (pValSet == m_xValSetColorList.get())
-    {
-        bThemePaletteSelected = maPaletteManager.IsThemePaletteSelected();
-    }
     NamedColor aNamedColor;
     aNamedColor.m_aColor = aColor;
-    if (bThemePaletteSelected)
+
+    if (pValSet == m_xValSetColorList.get() && 
maPaletteManager.IsThemePaletteSelected())
     {
         sal_uInt16 nThemeIndex;
         sal_uInt16 nEffectIndex;
diff --git a/editeng/source/items/borderline.cxx 
b/editeng/source/items/borderline.cxx
index 698fd2b964b0..05742eb95131 100644
--- a/editeng/source/items/borderline.cxx
+++ b/editeng/source/items/borderline.cxx
@@ -30,7 +30,11 @@
 #include <editeng/eerdll.hxx>
 #include <tools/bigint.hxx>
 
+#include <docmodel/uno/UnoComplexColor.hxx>
+#include <com/sun/star/util/XComplexColor.hpp>
+
 using namespace ::com::sun::star::table::BorderLineStyle;
+using namespace css;
 
 // class SvxBorderLine  --------------------------------------------------
 
@@ -57,7 +61,22 @@ namespace {
     }
 } // Anonymous namespace
 
-namespace editeng {
+namespace editeng
+{
+
+bool SvxBorderLine::setComplexColorFromAny(css::uno::Any const& rValue)
+{
+    css::uno::Reference<css::util::XComplexColor> xComplexColor;
+    if (!(rValue >>= xComplexColor))
+        return false;
+
+    if (xComplexColor.is())
+    {
+        auto aComplexColor = model::color::getFromXComplexColor(xComplexColor);
+        setComplexColor(aComplexColor);
+    }
+    return true;
+}
 
 Color SvxBorderLine::darkColor( Color aMain )
 {
@@ -519,6 +538,7 @@ sal_uInt16 SvxBorderLine::GetDistance() const
 bool SvxBorderLine::operator==( const SvxBorderLine& rCmp ) const
 {
     return (m_aColor == rCmp.m_aColor &&
+            m_aComplexColor == rCmp.m_aComplexColor &&
             m_nWidth == rCmp.m_nWidth &&
             m_bMirrorWidths == rCmp.m_bMirrorWidths &&
             m_aWidthImpl == rCmp.m_aWidthImpl &&
diff --git a/editeng/source/items/frmitems.cxx 
b/editeng/source/items/frmitems.cxx
index 82e81f59d9e4..3e132cdc44e9 100644
--- a/editeng/source/items/frmitems.cxx
+++ b/editeng/source/items/frmitems.cxx
@@ -33,6 +33,7 @@
 #include <com/sun/star/frame/status/LeftRightMarginScale.hpp>
 #include <com/sun/star/drawing/ShadingPattern.hpp>
 #include <com/sun/star/graphic/XGraphic.hpp>
+#include <com/sun/star/util/XComplexColor.hpp>
 
 #include <osl/diagnose.h>
 #include <i18nutil/unicode.hxx>
@@ -74,6 +75,7 @@
 #include <o3tl/safeint.hxx>
 #include <vcl/GraphicLoader.hxx>
 #include <unotools/securityoptions.hxx>
+#include <docmodel/uno/UnoComplexColor.hxx>
 
 #include <boost/property_tree/ptree.hpp>
 
@@ -1450,6 +1452,42 @@ bool SvxBoxItem::QueryValue( uno::Any& rVal, sal_uInt8 
nMemberId ) const
             nDist = mnRightDistance;
             bDistMember = true;
             break;
+        case MID_BORDER_BOTTOM_COLOR:
+        {
+            if (mpBottomBorderLine)
+            {
+                auto xComplexColor = 
model::color::createXComplexColor(mpBottomBorderLine->getComplexColor());
+                rVal <<= xComplexColor;
+            }
+            return true;
+        }
+        case MID_BORDER_LEFT_COLOR:
+        {
+            if (mpLeftBorderLine)
+            {
+                auto xComplexColor = 
model::color::createXComplexColor(mpLeftBorderLine->getComplexColor());
+                rVal <<= xComplexColor;
+            }
+            return true;
+        }
+        case MID_BORDER_RIGHT_COLOR:
+        {
+            if (mpRightBorderLine)
+            {
+                auto xComplexColor = 
model::color::createXComplexColor(mpRightBorderLine->getComplexColor());
+                rVal <<= xComplexColor;
+            }
+            return true;
+        }
+        case MID_BORDER_TOP_COLOR:
+        {
+            if (mpTopBorderLine)
+            {
+                auto xComplexColor = 
model::color::createXComplexColor(mpTopBorderLine->getComplexColor());
+                rVal <<= xComplexColor;
+            }
+            return true;
+        }
         case LINE_STYLE:
         case LINE_WIDTH:
             // it doesn't make sense to return a value for these since it's
@@ -1674,6 +1712,30 @@ bool SvxBoxItem::PutValue( const uno::Any& rVal, 
sal_uInt8 nMemberId )
                 }
             }
             return true;
+        case MID_BORDER_BOTTOM_COLOR:
+        {
+            if (mpBottomBorderLine)
+                return mpBottomBorderLine->setComplexColorFromAny(rVal);
+            return true;
+        }
+        case MID_BORDER_LEFT_COLOR:
+        {
+            if (mpLeftBorderLine)
+                return mpLeftBorderLine->setComplexColorFromAny(rVal);
+            return true;
+        }
+        case MID_BORDER_RIGHT_COLOR:
+        {
+            if (mpRightBorderLine)
+                return mpRightBorderLine->setComplexColorFromAny(rVal);
+            return true;
+        }
+        case MID_BORDER_TOP_COLOR:
+        {
+            if (mpTopBorderLine)
+                return mpTopBorderLine->setComplexColorFromAny(rVal);
+            return true;
+        }
     }
 
     if( bDistMember || nMemberId == BORDER_DISTANCE )
@@ -2851,6 +2913,18 @@ SvxBrushItem::SvxBrushItem(const Color& rColor, 
sal_uInt16 _nWhich)
 {
 }
 
+SvxBrushItem::SvxBrushItem(Color const& rColor, model::ComplexColor const& 
rComplexColor, sal_uInt16 nWhich)
+    : SfxPoolItem(nWhich)
+    , aColor(rColor)
+    , maComplexColor(rComplexColor)
+    , aFilterColor(COL_TRANSPARENT)
+    , nShadingValue(ShadingPattern::CLEAR)
+    , nGraphicTransparency(0)
+    , eGraphicPos(GPOS_NONE)
+    , bLoadAgain(true)
+{
+}
+
 SvxBrushItem::SvxBrushItem(const Graphic& rGraphic, SvxGraphicPosition ePos, 
sal_uInt16 _nWhich)
     : SfxPoolItem(_nWhich)
     , aColor(COL_TRANSPARENT)
@@ -2895,6 +2969,7 @@ SvxBrushItem::SvxBrushItem(OUString aLink, OUString 
aFilter,
 SvxBrushItem::SvxBrushItem(const SvxBrushItem& rItem)
     : SfxPoolItem(rItem)
     , aColor(rItem.aColor)
+    , maComplexColor(rItem.maComplexColor)
     , aFilterColor(rItem.aFilterColor)
     , nShadingValue(rItem.nShadingValue)
     , xGraphicObject(rItem.xGraphicObject ? new 
GraphicObject(*rItem.xGraphicObject) : nullptr)
@@ -2909,6 +2984,7 @@ SvxBrushItem::SvxBrushItem(const SvxBrushItem& rItem)
 SvxBrushItem::SvxBrushItem(SvxBrushItem&& rItem)
     : SfxPoolItem(std::move(rItem))
     , aColor(std::move(rItem.aColor))
+    , maComplexColor(std::move(rItem.maComplexColor))
     , aFilterColor(std::move(rItem.aFilterColor))
     , nShadingValue(std::move(rItem.nShadingValue))
     , xGraphicObject(std::move(rItem.xGraphicObject))
@@ -2968,6 +3044,15 @@ bool SvxBrushItem::QueryValue( uno::Any& rVal, sal_uInt8 
nMemberId ) const
         case MID_BACK_COLOR_TRANSPARENCY:
             rVal <<= SvxBrushItem::TransparencyToPercent(255 - 
aColor.GetAlpha());
         break;
+
+        case MID_BACKGROUND_COMPLEX_COLOR:
+        {
+            auto xComplexColor = 
model::color::createXComplexColor(maComplexColor);
+            rVal <<= xComplexColor;
+            break;
+        }
+        break;
+
         case MID_GRAPHIC_POSITION:
             rVal <<= 
static_cast<style::GraphicLocation>(static_cast<sal_Int16>(eGraphicPos));
         break;
@@ -3041,6 +3126,17 @@ bool SvxBrushItem::PutValue( const uno::Any& rVal, 
sal_uInt8 nMemberId )
         }
         break;
 
+        case MID_BACKGROUND_COMPLEX_COLOR:
+        {
+            css::uno::Reference<css::util::XComplexColor> xComplexColor;
+            if (!(rVal >>= xComplexColor))
+                return false;
+
+            if (xComplexColor.is())
+                maComplexColor = 
model::color::getFromXComplexColor(xComplexColor);
+        }
+        break;
+
         case MID_GRAPHIC_POSITION:
         {
             style::GraphicLocation eLocation;
@@ -3164,8 +3260,12 @@ bool SvxBrushItem::operator==( const SfxPoolItem& rAttr 
) const
     assert(SfxPoolItem::operator==(rAttr));
 
     const SvxBrushItem& rCmp = static_cast<const SvxBrushItem&>(rAttr);
-    bool bEqual = ( aColor == rCmp.aColor && aFilterColor == rCmp.aFilterColor 
&&
-        eGraphicPos == rCmp.eGraphicPos && nGraphicTransparency == 
rCmp.nGraphicTransparency);
+    bool bEqual =
+        aColor == rCmp.aColor &&
+        maComplexColor == rCmp.maComplexColor &&
+        aFilterColor == rCmp.aFilterColor &&
+        eGraphicPos == rCmp.eGraphicPos &&
+        nGraphicTransparency == rCmp.nGraphicTransparency;
 
     if ( bEqual )
     {
diff --git a/editeng/source/items/textitem.cxx 
b/editeng/source/items/textitem.cxx
index 1112bcf1a548..3e7cc6c6a736 100644
--- a/editeng/source/items/textitem.cxx
+++ b/editeng/source/items/textitem.cxx
@@ -939,7 +939,8 @@ void SvxFontHeightItem::dumpAsXml(xmlTextWriterPtr pWriter) 
const
 // class SvxTextLineItem ------------------------------------------------
 
 SvxTextLineItem::SvxTextLineItem( const FontLineStyle eSt, const sal_uInt16 
nId )
-    : SfxEnumItem( nId, eSt ), mColor( COL_TRANSPARENT )
+    : SfxEnumItem(nId, eSt)
+    , maColor(COL_TRANSPARENT)
 {
 }
 
@@ -981,8 +982,8 @@ bool SvxTextLineItem::GetPresentation
 )   const
 {
     rText = GetValueTextByPos( GetValue() );
-    if( !mColor.IsTransparent() )
-        rText += cpDelim + ::GetColorString( mColor );
+    if( !maColor.IsTransparent() )
+        rText += cpDelim + ::GetColorString(maColor);
     return true;
 }
 
@@ -1005,14 +1006,19 @@ bool SvxTextLineItem::QueryValue( uno::Any& rVal, 
sal_uInt8 nMemberId ) const
         rVal <<= static_cast<sal_Int16>(GetValue());
         break;
     case MID_TL_COLOR:
-        rVal <<= mColor;
+        rVal <<= maColor;
         break;
+    case MID_TL_COMPLEX_COLOR:
+    {
+        auto xComplexColor = model::color::createXComplexColor(maComplexColor);
+        rVal <<= xComplexColor;
+        break;
+    }
     case MID_TL_HASCOLOR:
-        rVal <<= mColor.GetAlpha() == 255;
+        rVal <<= maColor.GetAlpha() == 255;
         break;
     }
     return true;
-
 }
 
 bool SvxTextLineItem::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId )
@@ -1042,14 +1048,24 @@ bool SvxTextLineItem::PutValue( const uno::Any& rVal, 
sal_uInt8 nMemberId )
         {
             // Keep transparence, because it contains the information
             // whether the font color or the stored color should be used
-            sal_uInt8 nAlpha = mColor.GetAlpha();
-            mColor = nCol;
-            mColor.SetAlpha( nAlpha );
+            sal_uInt8 nAlpha = maColor.GetAlpha();
+            maColor = nCol;
+            maColor.SetAlpha( nAlpha );
         }
     }
     break;
+    case MID_TL_COMPLEX_COLOR:
+    {
+        css::uno::Reference<css::util::XComplexColor> xComplexColor;
+        if (!(rVal >>= xComplexColor))
+            return false;
+
+        if (xComplexColor.is())
+            maComplexColor = model::color::getFromXComplexColor(xComplexColor);
+    }
+    break;
     case MID_TL_HASCOLOR:
-        mColor.SetAlpha( Any2Bool( rVal ) ? 255 : 0 );
+        maColor.SetAlpha( Any2Bool( rVal ) ? 255 : 0 );
     break;
     }
     return bRet;
@@ -1058,7 +1074,8 @@ bool SvxTextLineItem::PutValue( const uno::Any& rVal, 
sal_uInt8 nMemberId )
 bool SvxTextLineItem::operator==( const SfxPoolItem& rItem ) const
 {
     return SfxEnumItem::operator==( rItem ) &&
-           GetColor() == static_cast<const SvxTextLineItem&>(rItem).GetColor();
+           maColor == static_cast<const SvxTextLineItem&>(rItem).maColor &&
+           maComplexColor == static_cast<const 
SvxTextLineItem&>(rItem).maComplexColor;
 }
 
 // class SvxUnderlineItem ------------------------------------------------
@@ -1616,11 +1633,6 @@ void SvxColorItem::dumpAsXml(xmlTextWriterPtr pWriter) 
const
     (void)xmlTextWriterEndElement(pWriter);
 }
 
-void SvxColorItem::SetValue( const Color& rNewCol )
-{
-    mColor = rNewCol;
-}
-
 // class SvxKerningItem --------------------------------------------------
 
 SvxKerningItem::SvxKerningItem( const short nKern, const sal_uInt16 nId ) :
diff --git a/include/editeng/borderline.hxx b/include/editeng/borderline.hxx
index affd513e853e..eb7d2f0f4f8e 100644
--- a/include/editeng/borderline.hxx
+++ b/include/editeng/borderline.hxx
@@ -27,6 +27,7 @@
 #include <tools/mapunit.hxx>
 #include <editeng/editengdllapi.h>
 #include <svtools/borderline.hxx>
+#include <docmodel/color/ComplexColor.hxx>
 
 class IntlWrapper;
 
@@ -154,6 +155,7 @@ class EDITENG_DLLPUBLIC SvxBorderLine final
     Color (*m_pColorGapFn)(Color);
     BorderWidthImpl m_aWidthImpl;
     Color m_aColor;
+    model::ComplexColor m_aComplexColor;
     SvxBorderLineStyle   m_nStyle;
     bool m_bMirrorWidths;
     bool m_bUseLeftTop;
@@ -165,7 +167,21 @@ public:
             Color (*pColorOutFn)( Color ) = &darkColor,
             Color (*pColorInFn)( Color ) = &darkColor );
 
-    const Color&    GetColor() const { return m_aColor; }
+    const Color & GetColor() const { return m_aColor; }
+    void SetColor(const Color & rColor ) { m_aColor = rColor; }
+
+    model::ComplexColor const& getComplexColor() const
+    {
+        return m_aComplexColor;
+    }
+    void setComplexColor(model::ComplexColor const& rComplexColor)
+    {
+        m_aComplexColor = rComplexColor;
+    }
+
+    bool setComplexColorFromAny(css::uno::Any const& rValue);
+
+
     Color           GetColorOut( bool bLeftOrTop = true ) const;
     Color           GetColorIn( bool bLeftOrTop = true ) const;
     bool            HasGapColor() const { return m_pColorGapFn != nullptr; }
@@ -208,7 +224,6 @@ public:
 
     SvxBorderLineStyle  GetBorderLineStyle() const { return m_nStyle; }
 
-    void            SetColor( const Color &rColor ) { m_aColor = rColor; }
     void            SetBorderLineStyle( SvxBorderLineStyle nNew );
     void            ScaleMetrics( tools::Long nMult, tools::Long nDiv );
 
diff --git a/include/editeng/boxitem.hxx b/include/editeng/boxitem.hxx
index 7b1058f570a9..4e35aad3a56c 100644
--- a/include/editeng/boxitem.hxx
+++ b/include/editeng/boxitem.hxx
@@ -105,6 +105,23 @@ public:
         return mpRightBorderLine.get();
     }
 
+    editeng::SvxBorderLine* GetTop()
+    {
+        return mpTopBorderLine.get();
+    }
+    editeng::SvxBorderLine* GetBottom()
+    {
+        return mpBottomBorderLine.get();
+    }
+    editeng::SvxBorderLine* GetLeft()
+    {
+        return mpLeftBorderLine.get();
+    }
+    editeng::SvxBorderLine* GetRight()
+    {
+        return mpRightBorderLine.get();
+    }
+
     const   editeng::SvxBorderLine* GetLine( SvxBoxItemLine nLine ) const;
 
     //The Pointers are being copied!
diff --git a/include/editeng/brushitem.hxx b/include/editeng/brushitem.hxx
index 522bf92e1bfa..b995c7fa0637 100644
--- a/include/editeng/brushitem.hxx
+++ b/include/editeng/brushitem.hxx
@@ -16,15 +16,13 @@
  *   except in compliance with the License. You may obtain a copy of
  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
  */
-#ifndef INCLUDED_EDITENG_BRUSHITEM_HXX
-#define INCLUDED_EDITENG_BRUSHITEM_HXX
+#pragma once
 
 #include <tools/color.hxx>
 #include <svl/poolitem.hxx>
 #include <editeng/editengdllapi.h>
 #include <memory>
-
-// class SvxBrushItem ----------------------------------------------------
+#include <docmodel/color/ComplexColor.hxx>
 
 class Graphic;
 class GraphicObject;
@@ -43,6 +41,7 @@ enum SvxGraphicPosition
 class EDITENG_DLLPUBLIC SvxBrushItem final : public SfxPoolItem
 {
     Color               aColor;
+    model::ComplexColor maComplexColor;
     Color               aFilterColor;
     sal_Int32           nShadingValue;
     mutable std::unique_ptr<GraphicObject> xGraphicObject;
@@ -59,7 +58,8 @@ public:
     static SfxPoolItem* CreateDefault();
 
     explicit SvxBrushItem( sal_uInt16 nWhich );
-    SvxBrushItem( const Color& rColor, sal_uInt16 nWhich  );
+    SvxBrushItem(Color const& rColor, sal_uInt16 nWhich);
+    SvxBrushItem(Color const& rColor, model::ComplexColor const& 
rComplexColor, sal_uInt16 nWhich);
 
     SvxBrushItem( const Graphic& rGraphic,
                   SvxGraphicPosition ePos, sal_uInt16 nWhich );
@@ -91,6 +91,16 @@ public:
     Color&          GetColor()                      { return aColor; }
     void            SetColor( const Color& rCol)    { aColor = rCol; }
 
+    model::ComplexColor getComplexColor() const
+    {
+        return maComplexColor;
+    }
+
+    void setComplexColor(model::ComplexColor const& rComplexColor)
+    {
+        maComplexColor = rComplexColor;
+    }
+
     const Color&    GetFiltColor() const             { return aFilterColor; }
     void            SetFiltColor( const Color& rCol) { aFilterColor = rCol; }
 
@@ -117,6 +127,4 @@ public:
     void dumpAsXml(xmlTextWriterPtr pWriter) const override;
 };
 
-#endif // INCLUDED_EDITENG_BRUSHITEM_HXX
-
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/include/editeng/colritem.hxx b/include/editeng/colritem.hxx
index dca36a5b9fda..e70b27b577e5 100644
--- a/include/editeng/colritem.hxx
+++ b/include/editeng/colritem.hxx
@@ -58,7 +58,19 @@ public:
     {
         return mColor;
     }
-    void SetValue(const Color& rNewColor);
+    void SetValue(const Color& rNewColor)
+    {
+        mColor = rNewColor;
+    }
+
+    const Color& getColor() const
+    {
+        return mColor;
+    }
+    void setColor(const Color& rNewColor)
+    {
+        mColor = rNewColor;
+    }
 
     model::ComplexColor const& getComplexColor() const { return 
maComplexColor; }
     void setComplexColor(model::ComplexColor const& rComplexColor) { 
maComplexColor = rComplexColor; }
diff --git a/include/editeng/memberids.h b/include/editeng/memberids.h
index e5f1f075290a..b44a1486ac16 100644
--- a/include/editeng/memberids.h
+++ b/include/editeng/memberids.h
@@ -92,6 +92,7 @@
 #define MID_TL_STYLE        1
 #define MID_TL_COLOR        2
 #define MID_TL_HASCOLOR     3
+#define MID_TL_COMPLEX_COLOR 4
 
 //SvxCrossedOutItem
 #define MID_CROSSED_OUT     0
@@ -150,12 +151,16 @@
 #define RIGHT_BORDER_DISTANCE   7
 #define TOP_BORDER_DISTANCE     8
 #define BOTTOM_BORDER_DISTANCE  9
-#define MID_LEFT_BORDER             10
-#define MID_RIGHT_BORDER            11
-#define MID_TOP_BORDER              12
-#define MID_BOTTOM_BORDER           13
-#define LINE_STYLE                  14
-#define LINE_WIDTH                  15
+#define MID_LEFT_BORDER          10
+#define MID_RIGHT_BORDER         11
+#define MID_TOP_BORDER           12
+#define MID_BOTTOM_BORDER        13
+#define LINE_STYLE               14
+#define LINE_WIDTH               15
+#define MID_BORDER_BOTTOM_COLOR  16
+#define MID_BORDER_LEFT_COLOR    17
+#define MID_BORDER_RIGHT_COLOR   18
+#define MID_BORDER_TOP_COLOR     19
 
 //BrushItem
 #define MID_BACK_COLOR          0
@@ -169,6 +174,7 @@
 #define MID_BACK_COLOR_R_G_B    8
 #define MID_BACK_COLOR_TRANSPARENCY 9
 #define MID_SHADING_VALUE       10
+#define MID_BACKGROUND_COMPLEX_COLOR 11
 
 //SvxFormatBreakItem
 #define MID_BREAK_BEFORE        0
diff --git a/include/editeng/udlnitem.hxx b/include/editeng/udlnitem.hxx
index e190348bb6ac..ecbec7a17b8d 100644
--- a/include/editeng/udlnitem.hxx
+++ b/include/editeng/udlnitem.hxx
@@ -16,13 +16,13 @@
  *   except in compliance with the License. You may obtain a copy of
  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
  */
-#ifndef INCLUDED_EDITENG_UDLNITEM_HXX
-#define INCLUDED_EDITENG_UDLNITEM_HXX
+#pragma once
 
+#include <editeng/editengdllapi.h>
 #include <svl/eitem.hxx>
 #include <tools/color.hxx>
 #include <tools/fontenum.hxx>
-#include <editeng/editengdllapi.h>
+#include <docmodel/color/ComplexColor.hxx>
 
 // class SvxTextLineItem ------------------------------------------------
 
@@ -30,7 +30,9 @@
 
 class EDITENG_DLLPUBLIC SvxTextLineItem : public SfxEnumItem<FontLineStyle>
 {
-    Color mColor;
+    Color maColor;
+    model::ComplexColor maComplexColor;
+
 public:
     SvxTextLineItem( const FontLineStyle eSt,
                      const sal_uInt16 nId );
@@ -61,8 +63,18 @@ public:
     void                    SetLineStyle( FontLineStyle eNew )
                                 { SetValue(eNew); }
 
-    const Color&            GetColor() const                { return mColor; }
-    void                    SetColor( const Color& rCol )   { mColor = rCol; }
+    const Color& GetColor() const { return maColor; }
+    void SetColor(const Color& rColor) { maColor = rColor; }
+
+    const model::ComplexColor& getComplexColor() const
+    {
+        return maComplexColor;
+    }
+
+    void setComplexColor(model::ComplexColor const& rComplexColor)
+    {
+        maComplexColor = rComplexColor;
+    }
 };
 
 // class SvxUnderlineItem ------------------------------------------------
@@ -97,6 +109,4 @@ public:
     virtual OUString   GetValueTextByPos( sal_uInt16 nPos ) const override;
 };
 
-#endif // INCLUDED_EDITENG_UDLNITEM_HXX
-
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/include/svx/frmsel.hxx b/include/svx/frmsel.hxx
index 498b4857c352..9264a36d8f2a 100644
--- a/include/svx/frmsel.hxx
+++ b/include/svx/frmsel.hxx
@@ -151,7 +151,7 @@ public:
     /** Sets the passed line widths to all selected frame borders (in twips). 
*/
     void                SetStyleToSelection( tools::Long nWidth, 
SvxBorderLineStyle nStyle );
     /** Sets the passed color to all selected frame borders. */
-    void                SetColorToSelection( const Color& rColor );
+    void SetColorToSelection(const Color& rColor, model::ComplexColor const& 
rComplexColor);
 
     SvxBorderLineStyle getCurrentStyleLineStyle() const;
 
diff --git a/svx/source/dialog/frmsel.cxx b/svx/source/dialog/frmsel.cxx
index fed0d59d0d6d..31dce82e0a84 100644
--- a/svx/source/dialog/frmsel.cxx
+++ b/svx/source/dialog/frmsel.cxx
@@ -1025,9 +1025,11 @@ void FrameSelector::SetStyleToSelection( tools::Long 
nWidth, SvxBorderLineStyle
         mxImpl->SetBorderState( **aIt, FrameBorderState::Show );
 }
 
-void FrameSelector::SetColorToSelection( const Color& rColor )
+void FrameSelector::SetColorToSelection(const Color& rColor, 
model::ComplexColor const& rComplexColor)
 {
-    mxImpl->maCurrStyle.SetColor( rColor );
+    mxImpl->maCurrStyle.SetColor(rColor);
+    mxImpl->maCurrStyle.setComplexColor(rComplexColor);
+
     for( SelFrameBorderIter aIt( mxImpl->maEnabBorders ); aIt.Is(); ++aIt )
         mxImpl->SetBorderState( **aIt, FrameBorderState::Show );
 }
diff --git a/svx/source/unodraw/unobrushitemhelper.cxx 
b/svx/source/unodraw/unobrushitemhelper.cxx
index 65d80cf282ca..ff475e8b7077 100644
--- a/svx/source/unodraw/unobrushitemhelper.cxx
+++ b/svx/source/unodraw/unobrushitemhelper.cxx
@@ -124,7 +124,9 @@ void setSvxBrushItemAsFillAttributesToTargetSet(const 
SvxBrushItem& rBrush, SfxI
         const Color aColor(rBrush.GetColor().GetRGBColor());
 
         rToSet.Put(XFillStyleItem(drawing::FillStyle_SOLID));
-        rToSet.Put(XFillColorItem(OUString(), aColor));
+        XFillColorItem aFillColorItem(OUString(), aColor);
+        aFillColorItem.setComplexColor(rBrush.getComplexColor());
+        rToSet.Put(aFillColorItem);
 
         // #125189# nTransparency is in range [0..254], convert to [0..100] 
which is used in
         // XFillTransparenceItem (caution with the range which is in an 
*item-specific* range)
@@ -141,10 +143,11 @@ void setSvxBrushItemAsFillAttributesToTargetSet(const 
SvxBrushItem& rBrush, SfxI
         // is needed when e.g. first transparency is set to 0xff and then a 
Graphic gets set.
         // When not changing the FillStyle, the next 
getSvxBrushItemFromSourceSet *will* return
         // to drawing::FillStyle_SOLID with the rescued color.
-        const Color aColor(rBrush.GetColor().GetRGBColor());
+        const Color aColor = rBrush.GetColor().GetRGBColor();
 
         rToSet.Put(XFillStyleItem(drawing::FillStyle_NONE));
-        rToSet.Put(XFillColorItem(OUString(), aColor));
+        XFillColorItem aFillColorItem(OUString(), aColor);
+        rToSet.Put(aFillColorItem);
     }
 }
 
@@ -169,7 +172,9 @@ static sal_uInt16 getTransparenceForSvxBrushItem(const 
SfxItemSet& rSourceSet, b
 
 static std::unique_ptr<SvxBrushItem> getSvxBrushItemForSolid(const SfxItemSet& 
rSourceSet, bool bSearchInParents, sal_uInt16 nBackgroundID)
 {
-    Color aFillColor(rSourceSet.Get(XATTR_FILLCOLOR, 
bSearchInParents).GetColorValue());
+    auto const& rFillColorItem = rSourceSet.Get(XATTR_FILLCOLOR, 
bSearchInParents);
+    model::ComplexColor aFillComplexColor = rFillColorItem.getComplexColor();
+    Color aFillColor = rFillColorItem.GetColorValue();
 
     // get evtl. mixed transparence
     const sal_uInt16 
nFillTransparence(getTransparenceForSvxBrushItem(rSourceSet, bSearchInParents));
@@ -184,7 +189,7 @@ static std::unique_ptr<SvxBrushItem> 
getSvxBrushItemForSolid(const SfxItemSet& r
         aFillColor.SetAlpha(255 - aTargetTrans);
     }
 
-    return std::make_unique<SvxBrushItem>(aFillColor, nBackgroundID);
+    return std::make_unique<SvxBrushItem>(aFillColor, aFillComplexColor, 
nBackgroundID);
 }
 
 std::unique_ptr<SvxBrushItem> getSvxBrushItemFromSourceSet(const SfxItemSet& 
rSourceSet, sal_uInt16 nBackgroundID, bool bSearchInParents, bool 
bXMLImportHack)
diff --git a/sw/inc/unoprnms.hxx b/sw/inc/unoprnms.hxx
index a6184b15645c..f98e8b7b2c07 100644
--- a/sw/inc/unoprnms.hxx
+++ b/sw/inc/unoprnms.hxx
@@ -121,6 +121,8 @@ inline constexpr OUStringLiteral 
UNO_NAME_CHAR_HEIGHT_COMPLEX = u"CharHeightComp
 inline constexpr OUStringLiteral UNO_NAME_CHAR_LOCALE_COMPLEX = 
u"CharLocaleComplex";
 inline constexpr OUStringLiteral UNO_NAME_CHAR_AUTO_KERNING = 
u"CharAutoKerning";
 inline constexpr OUStringLiteral UNO_NAME_CHAR_UNDERLINE_COLOR = 
u"CharUnderlineColor";
+inline constexpr OUStringLiteral UNO_NAME_CHAR_UNDERLINE_COMPLEX_COLOR
+    = u"CharUnderlineComplexColor";
 inline constexpr OUStringLiteral UNO_NAME_CHAR_UNDERLINE_HAS_COLOR = 
u"CharUnderlineHasColor";
 inline constexpr OUStringLiteral UNO_NAME_CHAR_ESCAPEMENT = u"CharEscapement";
 inline constexpr OUStringLiteral UNO_NAME_CHAR_CASE_MAP = u"CharCaseMap";
@@ -146,6 +148,8 @@ inline constexpr OUStringLiteral 
UNO_NAME_TOC_PARAGRAPH_OUTLINE_LEVEL = u"TOCPar
 inline constexpr OUStringLiteral UNO_NAME_CHAR_FLASH = u"CharFlash";
 inline constexpr OUStringLiteral UNO_NAME_CHAR_KERNING = u"CharKerning";
 inline constexpr OUStringLiteral UNO_NAME_CHAR_BACK_COLOR = u"CharBackColor";
+inline constexpr OUStringLiteral UNO_NAME_CHAR_BACKGROUND_COMPLEX_COLOR
+    = u"CharBackgroundComplexColor";
 inline constexpr OUStringLiteral UNO_NAME_CHAR_BACK_TRANSPARENT = 
u"CharBackTransparent";
 inline constexpr OUStringLiteral UNO_NAME_CHAR_COMBINE_IS_ON = 
u"CharCombineIsOn";
 inline constexpr OUStringLiteral UNO_NAME_CHAR_COMBINE_PREFIX = 
u"CharCombinePrefix";
@@ -192,7 +196,10 @@ inline constexpr OUStringLiteral 
UNO_NAME_PARA_LINE_NUMBER_COUNT = u"ParaLineNum
 inline constexpr OUStringLiteral UNO_NAME_PARA_LINE_NUMBER_START_VALUE
     = u"ParaLineNumberStartValue";
 inline constexpr OUStringLiteral UNO_NAME_BACK_COLOR = u"BackColor";
+inline constexpr OUStringLiteral UNO_NAME_BACKGROUND_COMPLEX_COLOR = 
u"BackgroundComplexColor";
 inline constexpr OUStringLiteral UNO_NAME_PARA_BACK_COLOR = u"ParaBackColor";
+inline constexpr OUStringLiteral UNO_NAME_PARA_BACKGROUND_COMPLEX_COLOR
+    = u"ParaBackgroundComplexColor";
 inline constexpr OUStringLiteral UNO_NAME_PARA_WIDOWS = u"ParaWidows";
 inline constexpr OUStringLiteral UNO_NAME_PARA_ORPHANS = u"ParaOrphans";
 inline constexpr OUStringLiteral UNO_NAME_PARA_BACK_TRANSPARENT = 
u"ParaBackTransparent";
@@ -377,6 +384,10 @@ inline constexpr OUStringLiteral 
UNO_NAME_LEFT_BORDER_DISTANCE = u"LeftBorderDis
 inline constexpr OUStringLiteral UNO_NAME_RIGHT_BORDER_DISTANCE = 
u"RightBorderDistance";
 inline constexpr OUStringLiteral UNO_NAME_TOP_BORDER_DISTANCE = 
u"TopBorderDistance";
 inline constexpr OUStringLiteral UNO_NAME_BOTTOM_BORDER_DISTANCE = 
u"BottomBorderDistance";
+inline constexpr OUStringLiteral UNO_NAME_BORDER_BOTTOM_COMPLEX_COLOR = 
u"BottomBorderComplexColor";
+inline constexpr OUStringLiteral UNO_NAME_BORDER_LEFT_COMPLEX_COLOR = 
u"LeftBorderComplexColor";
+inline constexpr OUStringLiteral UNO_NAME_BORDER_RIGHT_COMPLEX_COLOR = 
u"RightBorderComplexColor";
+inline constexpr OUStringLiteral UNO_NAME_BORDER_TOP_COMPLEX_COLOR = 
u"TopBorderComplexColor";
 inline constexpr OUStringLiteral UNO_NAME_TABLE_BORDER = u"TableBorder";
 inline constexpr OUStringLiteral UNO_NAME_TABLE_COLUMN_SEPARATORS = 
u"TableColumnSeparators";
 inline constexpr OUStringLiteral UNO_NAME_TABLE_COLUMN_RELATIVE_SUM = 
u"TableColumnRelativeSum";
@@ -834,6 +845,7 @@ inline constexpr OUStringLiteral 
UNO_NAME_PARA_LIST_LABEL_STRING = u"ListLabelSt
 inline constexpr OUStringLiteral UNO_NAME_PARA_LIST_AUTO_FORMAT = 
u"ListAutoFormat";
 inline constexpr OUStringLiteral UNO_NAME_CHAR_OVERLINE = u"CharOverline";
 inline constexpr OUStringLiteral UNO_NAME_CHAR_OVERLINE_COLOR = 
u"CharOverlineColor";
+inline constexpr OUStringLiteral UNO_NAME_CHAR_OVERLINE_COMPLEX_COLOR = 
u"CharOverlineComplexColor";
 inline constexpr OUStringLiteral UNO_NAME_CHAR_OVERLINE_HAS_COLOR = 
u"CharOverlineHasColor";
 inline constexpr OUStringLiteral UNO_NAME_OUTLINE_CONTENT_VISIBLE = 
u"OutlineContentVisible";
 inline constexpr OUStringLiteral UNO_NAME_OUTLINE_LEVEL = u"OutlineLevel";
@@ -875,6 +887,14 @@ inline constexpr OUStringLiteral 
UNO_NAME_CHAR_LEFT_BORDER_DISTANCE = u"CharLeft
 inline constexpr OUStringLiteral UNO_NAME_CHAR_RIGHT_BORDER_DISTANCE = 
u"CharRightBorderDistance";
 inline constexpr OUStringLiteral UNO_NAME_CHAR_TOP_BORDER_DISTANCE = 
u"CharTopBorderDistance";
 inline constexpr OUStringLiteral UNO_NAME_CHAR_BOTTOM_BORDER_DISTANCE = 
u"CharBottomBorderDistance";
+inline constexpr OUStringLiteral UNO_NAME_CHAR_BORDER_LEFT_COMPLEX_COLOR
+    = u"CharLeftBorderComplexColor";
+inline constexpr OUStringLiteral UNO_NAME_CHAR_BORDER_RIGHT_COMPLEX_COLOR
+    = u"CharRightBorderComplexColor";
+inline constexpr OUStringLiteral UNO_NAME_CHAR_BORDER_TOP_COMPLEX_COLOR
+    = u"CharTopBorderComplexColor";
+inline constexpr OUStringLiteral UNO_NAME_CHAR_BORDER_BOTTOM_COMPLEX_COLOR
+    = u"CharBottomBorderComplexColor";
 inline constexpr OUStringLiteral UNO_NAME_CHAR_SHADOW_FORMAT = 
u"CharShadowFormat";
 inline constexpr OUStringLiteral UNO_NAME_SHADOW_TRANSPARENCE = 
u"ShadowTransparence";
 inline constexpr OUStringLiteral UNO_NAME_DOC_INTEROP_GRAB_BAG = 
u"InteropGrabBag";
diff --git a/sw/source/core/docnode/ndtbl1.cxx 
b/sw/source/core/docnode/ndtbl1.cxx
index 7fa9dd53e2d9..49b93463a429 100644
--- a/sw/source/core/docnode/ndtbl1.cxx
+++ b/sw/source/core/docnode/ndtbl1.cxx
@@ -1012,10 +1012,10 @@ void SwDoc::SetTabLineStyle( const SwCursor& rCursor,
             SwFrameFormat *pFormat = pCell->GetFormat();
             std::unique_ptr<SvxBoxItem> aBox(pFormat->GetBox().Clone());
 
-            SvxBorderLine* pTop = const_cast<SvxBorderLine*>(aBox->GetTop());
-            SvxBorderLine* pBot = 
const_cast<SvxBorderLine*>(aBox->GetBottom());
-            SvxBorderLine* pLeft = const_cast<SvxBorderLine*>(aBox->GetLeft());
-            SvxBorderLine* pRight = 
const_cast<SvxBorderLine*>(aBox->GetRight());
+            SvxBorderLine* pTop = aBox->GetTop();
+            SvxBorderLine* pBot = aBox->GetBottom();
+            SvxBorderLine* pLeft = aBox->GetLeft();
+            SvxBorderLine* pRight = aBox->GetRight();
 
             if ( !pBorderLine && bSetLine )
             {
diff --git a/sw/source/core/model/ThemeColorChanger.cxx 
b/sw/source/core/model/ThemeColorChanger.cxx
index 4edf802f3309..fb3175e929cf 100644
--- a/sw/source/core/model/ThemeColorChanger.cxx
+++ b/sw/source/core/model/ThemeColorChanger.cxx
@@ -18,17 +18,22 @@
 #include <ndtxt.hxx>
 #include <format.hxx>
 #include <charatr.hxx>
+#include <paratr.hxx>
+#include <frmatr.hxx>
 #include <DocumentContentOperationsManager.hxx>
 #include <IDocumentDrawModelAccess.hxx>
 #include <IDocumentUndoRedo.hxx>
 #include <UndoThemeChange.hxx>
 
+#include <svx/xflclit.hxx>
+
 #include <sal/config.h>
 #include <svx/svdpage.hxx>
 #include <svx/svditer.hxx>
 #include <docmodel/uno/UnoComplexColor.hxx>
 #include <docmodel/theme/Theme.hxx>
 #include <editeng/unoprnms.hxx>
+#include <editeng/boxitem.hxx>
 #include <com/sun/star/text/XTextRange.hpp>
 #include <com/sun/star/container/XEnumerationAccess.hpp>
 #include <com/sun/star/container/XEnumeration.hpp>
@@ -38,6 +43,25 @@ namespace sw
 {
 namespace
 {
+bool changeBorderLine(editeng::SvxBorderLine* pBorderLine, model::ColorSet 
const& rColorSet)
+{
+    if (!pBorderLine)
+        return false;
+
+    model::ComplexColor const& rComplexColor = pBorderLine->getComplexColor();
+    if (rComplexColor.meType == model::ColorType::Scheme)
+    {
+        auto eThemeType = rComplexColor.meSchemeType;
+        if (eThemeType != model::ThemeColorType::Unknown)
+        {
+            Color aColor = rColorSet.resolveColor(rComplexColor);
+            pBorderLine->SetColor(aColor);
+            return true;
+        }
+    }
+    return false;
+}
+
 /** Handler for ModelTraverser that recalculates and updates the theme colors.
  *
  * It checks all the SdrObjects and updates fill, line and text theme colors.
@@ -67,6 +91,7 @@ public:
         for (size_t i = 0; i < rHints.Count(); ++i)
         {
             const SwTextAttr* pTextAttr = rHints.Get(i);
+            SwPaM aPam(*pTextNode, pTextAttr->GetStart(), *pTextNode, 
pTextAttr->GetAnyEnd());
             if (pTextAttr->Which() == RES_TXTATR_AUTOFMT)
             {
                 SwFormatAutoFormat const& 
rAutoFormatPool(pTextAttr->GetAutoFormat());
@@ -81,9 +106,36 @@ public:
                         auto pNew = pItem->Clone();
                         pNew->SetValue(aNewColor);
 
-                        SwPaM aPam(*pTextNode, pTextAttr->GetStart(), 
*pTextNode,
-                                   pTextAttr->GetAnyEnd());
-                        
mrDocument.GetDocumentContentOperationsManager().InsertPoolItem(
+                        
mrDocument.getIDocumentContentOperations().InsertPoolItem(
+                            aPam, *pNew, SetAttrMode::APICALL | 
SetAttrMode::NO_CURSOR_CHANGE);
+                    }
+                }
+                if (const SvxUnderlineItem* pItem
+                    = pStyleHandle->GetItemIfSet(RES_CHRATR_UNDERLINE))
+                {
+                    model::ComplexColor const& rComplexColor = 
pItem->getComplexColor();
+                    auto eSchemeType = rComplexColor.meSchemeType;
+                    if (eSchemeType != model::ThemeColorType::Unknown)
+                    {
+                        Color aNewColor = 
mrColorSet.resolveColor(rComplexColor);
+                        auto pNew = pItem->Clone();
+                        pNew->SetColor(aNewColor);
+
+                        
mrDocument.getIDocumentContentOperations().InsertPoolItem(
+                            aPam, *pNew, SetAttrMode::APICALL | 
SetAttrMode::NO_CURSOR_CHANGE);
+                    }
+                }
+                if (const SvxOverlineItem* pItem = 
pStyleHandle->GetItemIfSet(RES_CHRATR_OVERLINE))
+                {
+                    model::ComplexColor const& rComplexColor = 
pItem->getComplexColor();
+                    auto eSchemeType = rComplexColor.meSchemeType;
+                    if (eSchemeType != model::ThemeColorType::Unknown)
+                    {
+                        Color aNewColor = 
mrColorSet.resolveColor(rComplexColor);
+                        auto pNew = pItem->Clone();
+                        pNew->SetColor(aNewColor);
+
+                        
mrDocument.getIDocumentContentOperations().InsertPoolItem(
                             aPam, *pNew, SetAttrMode::APICALL | 
SetAttrMode::NO_CURSOR_CHANGE);
                     }
                 }
@@ -91,12 +143,102 @@ public:
         }
     }
 
+    void updateParagraphAttibutes(SwTextNode* pTextNode)
+    {
+        if (!pTextNode->HasSwAttrSet())
+            return;
+
+        SwAttrSet const& aAttrSet = pTextNode->GetSwAttrSet();
+
+        if (const SvxColorItem* pItem = 
aAttrSet.GetItemIfSet(RES_CHRATR_COLOR, false))
+        {
+            model::ComplexColor const& rComplexColor = 
pItem->getComplexColor();
+            if (rComplexColor.meType == model::ColorType::Scheme)
+            {
+                auto eSchemeType = rComplexColor.meSchemeType;
+                if (eSchemeType != model::ThemeColorType::Unknown)
+                {
+                    Color aNewColor = mrColorSet.resolveColor(rComplexColor);
+                    std::unique_ptr<SvxColorItem> pNewItem(pItem->Clone());
+                    pNewItem->setColor(aNewColor);
+                    pTextNode->SetAttr(*pNewItem);
+                }
+            }
+        }
+
+        if (const SvxUnderlineItem* pItem = 
aAttrSet.GetItemIfSet(RES_CHRATR_UNDERLINE, false))
+        {
+            model::ComplexColor const& rComplexColor = 
pItem->getComplexColor();
+            if (rComplexColor.meType == model::ColorType::Scheme)
+            {
+                auto eSchemeType = rComplexColor.meSchemeType;
+                if (eSchemeType != model::ThemeColorType::Unknown)
+                {
+                    Color aNewColor = mrColorSet.resolveColor(rComplexColor);
+                    std::unique_ptr<SvxUnderlineItem> pNewItem(pItem->Clone());
+                    pNewItem->SetColor(aNewColor);
+                    pTextNode->SetAttr(*pNewItem);
+                }
+            }
+        }
+
+        if (const SvxOverlineItem* pItem = 
aAttrSet.GetItemIfSet(RES_CHRATR_OVERLINE, false))
+        {
+            model::ComplexColor const& rComplexColor = 
pItem->getComplexColor();
+            if (rComplexColor.meType == model::ColorType::Scheme)
+            {
+                auto eSchemeType = rComplexColor.meSchemeType;
+                if (eSchemeType != model::ThemeColorType::Unknown)
+                {
+                    Color aNewColor = mrColorSet.resolveColor(rComplexColor);
+                    std::unique_ptr<SvxOverlineItem> pNewItem(pItem->Clone());
+                    pNewItem->SetColor(aNewColor);
+                    pTextNode->SetAttr(*pNewItem);
+                }
+            }
+        }
+
+        if (const XFillColorItem* pItem = 
aAttrSet.GetItemIfSet(XATTR_FILLCOLOR, false))
+        {
+            model::ComplexColor const& rComplexColor = 
pItem->getComplexColor();
+            if (rComplexColor.meType == model::ColorType::Scheme)
+            {
+                auto eSchemeType = rComplexColor.meSchemeType;
+                if (eSchemeType != model::ThemeColorType::Unknown)
+                {
+                    Color aNewColor = mrColorSet.resolveColor(rComplexColor);
+                    std::unique_ptr<XFillColorItem> pNewItem(pItem->Clone());
+                    pNewItem->SetColorValue(aNewColor);
+                    pTextNode->SetAttr(*pNewItem);
+                }
+            }
+        }
+
+        if (const SvxBoxItem* pItem = aAttrSet.GetItemIfSet(RES_BOX, false))
+        {
+            std::unique_ptr<SvxBoxItem> pNewItem(pItem->Clone());
+
+            bool bChanged = false;
+
+            bChanged = changeBorderLine(pNewItem->GetBottom(), mrColorSet) || 
bChanged;
+            bChanged = changeBorderLine(pNewItem->GetTop(), mrColorSet) || 
bChanged;
+            bChanged = changeBorderLine(pNewItem->GetLeft(), mrColorSet) || 
bChanged;
+            bChanged = changeBorderLine(pNewItem->GetRight(), mrColorSet) || 
bChanged;
+
+            if (bChanged)
+            {
+                pTextNode->SetAttr(*pNewItem);
+            }
+        }
+    }
+
     void handleNode(SwNode* pNode) override
     {
         if (!pNode->IsTextNode())
             return;
 
         updateHints(pNode->GetTextNode());
+        updateParagraphAttibutes(pNode->GetTextNode());
     }
 
     void handleSdrObject(SdrObject* pObject) override
@@ -117,24 +259,81 @@ public:
     }
 };
 
-void changeColor(SwFormat* pFormat, model::ColorSet const& rColorSet, SwDoc* 
pDocument)
+bool changeOverlineColor(SwAttrSet const& rSet, SfxItemSet& rNewSet,
+                         model::ColorSet const& rColorSet)
 {
-    const SwAttrSet& rAttrSet = pFormat->GetAttrSet();
-    std::unique_ptr<SfxItemSet> pNewSet = rAttrSet.Clone();
+    SvxOverlineItem aItem(rSet.Get(RES_CHRATR_OVERLINE, false));
+    model::ComplexColor const& rComplexColor = aItem.getComplexColor();
+    if (rComplexColor.meType != model::ColorType::Scheme)
+        return false;
+    auto eThemeType = rComplexColor.meSchemeType;
+    if (eThemeType == model::ThemeColorType::Unknown)
+        return false;
+    Color aColor = rColorSet.resolveColor(rComplexColor);
+    aItem.SetColor(aColor);
+    rNewSet.Put(aItem);
+    return true;
+}
+
+bool changeUnderlineColor(SwAttrSet const& rSet, SfxItemSet& rNewSet,
+                          model::ColorSet const& rColorSet)
+{
+    SvxUnderlineItem aItem(rSet.Get(RES_CHRATR_UNDERLINE, false));
+    model::ComplexColor const& rComplexColor = aItem.getComplexColor();
+    if (rComplexColor.meType != model::ColorType::Scheme)
+        return false;
+    auto eThemeType = rComplexColor.meSchemeType;
+    if (eThemeType == model::ThemeColorType::Unknown)
+        return false;
+    Color aColor = rColorSet.resolveColor(rComplexColor);
+    aItem.SetColor(aColor);
+    rNewSet.Put(aItem);
+    return true;
+}
 
-    SvxColorItem aColorItem(rAttrSet.GetColor());
+bool changeColor(SwAttrSet const& rSet, SfxItemSet& rNewSet, model::ColorSet 
const& rColorSet)
+{
+    SvxColorItem aColorItem(rSet.GetColor(false));
     model::ComplexColor const& rComplexColor = aColorItem.getComplexColor();
     if (rComplexColor.meType != model::ColorType::Scheme)
-        return;
+        return false;
     auto eThemeType = rComplexColor.meSchemeType;
-    if (eThemeType != model::ThemeColorType::Unknown)
-    {
-        Color aColor = rColorSet.getColor(eThemeType);
-        aColor = rComplexColor.applyTransformations(aColor);
-        aColorItem.SetValue(aColor);
-        pNewSet->Put(aColorItem);
-        pDocument->ChgFormat(*pFormat, *pNewSet);
-    }
+    if (eThemeType == model::ThemeColorType::Unknown)
+        return false;
+    Color aColor = rColorSet.resolveColor(rComplexColor);
+    aColorItem.SetValue(aColor);
+    rNewSet.Put(aColorItem);
+    return true;
+}
+
+bool changeBackground(SwAttrSet const& rSet, SfxItemSet& rNewSet, 
model::ColorSet const& rColorSet)
+{
+    XFillColorItem aFillItem(rSet.Get(XATTR_FILLCOLOR, false));
+    model::ComplexColor const& rComplexColor = aFillItem.getComplexColor();
+    if (rComplexColor.meType != model::ColorType::Scheme)
+        return false;
+    auto eThemeType = rComplexColor.getSchemeType();
+    if (eThemeType == model::ThemeColorType::Unknown)
+        return false;
+    Color aColor = rColorSet.resolveColor(rComplexColor);
+    aFillItem.SetColorValue(aColor);
+    rNewSet.Put(aFillItem);
+    return true;
+}
+
+bool changeBox(SwAttrSet const& rSet, SfxItemSet& rNewSet, model::ColorSet 
const& rColorSet)
+{
+    SvxBoxItem aBoxItem(rSet.GetBox(false));
+    bool bChange = false;
+
+    bChange = changeBorderLine(aBoxItem.GetBottom(), rColorSet) || bChange;
+    bChange = changeBorderLine(aBoxItem.GetTop(), rColorSet) || bChange;
+    bChange = changeBorderLine(aBoxItem.GetLeft(), rColorSet) || bChange;
+    bChange = changeBorderLine(aBoxItem.GetRight(), rColorSet) || bChange;
+
+    if (bChange)
+        rNewSet.Put(aBoxItem);
+    return bChange;
 }
 
 } // end anonymous namespace
@@ -171,16 +370,68 @@ void ThemeColorChanger::apply(model::ColorSet const& 
rColorSet)
         = std::make_unique<sw::UndoThemeChange>(*pDocument, pOldColorSet, 
pNewColorSet);
     pDocument->GetIDocumentUndoRedo().AppendUndo(std::move(pUndoThemeChange));
 
+    // Page styles
+    for (size_t nIndex = 0; nIndex < pDocument->GetPageDescCnt(); ++nIndex)
+    {
+        auto& rPageDesc = pDocument->GetPageDesc(nIndex);
+        SwFrameFormat& rPageFormat = rPageDesc.GetMaster();
+        const SwAttrSet& rAttrSet = rPageFormat.GetAttrSet();
+        std::unique_ptr<SfxItemSet> pNewSet = rAttrSet.Clone();
+
+        bool bChanged = false;
+        bChanged = bChanged || changeBackground(rAttrSet, *pNewSet, rColorSet);
+        bChanged = bChanged || changeBox(rAttrSet, *pNewSet, rColorSet);
+
+        if (bChanged)
+        {
+            rPageFormat.SetFormatAttr(*pNewSet);
+            pDocument->ChgPageDesc(nIndex, rPageDesc);
+        }
+    }
+
     SfxStyleSheetBasePool* pPool = mpDocSh->GetStyleSheetPool();
     SwDocStyleSheet* pStyle;
 
+    // Frame style color change
+    pStyle = 
static_cast<SwDocStyleSheet*>(pPool->First(SfxStyleFamily::Frame));
+    while (pStyle)
+    {
+        SwFrameFormat* pFrameFormat = pStyle->GetFrameFormat();
+        if (pFrameFormat)
+        {
+            const SwAttrSet& rAttrSet = pFrameFormat->GetAttrSet();
+            std::unique_ptr<SfxItemSet> pNewSet = rAttrSet.Clone();
+
+            bool bChanged = false;
+            bChanged = changeBackground(rAttrSet, *pNewSet, rColorSet) || 
bChanged;
+            bChanged = changeBox(rAttrSet, *pNewSet, rColorSet) || bChanged;
+
+            if (bChanged)
+                pDocument->ChgFormat(*pFrameFormat, *pNewSet);
+        }
+        pStyle = static_cast<SwDocStyleSheet*>(pPool->Next());
+    }
+
     // Paragraph style color change
     pStyle = static_cast<SwDocStyleSheet*>(pPool->First(SfxStyleFamily::Para));
     while (pStyle)
     {
         SwTextFormatColl* pTextFormatCollection = pStyle->GetCollection();
         if (pTextFormatCollection)
-            changeColor(pTextFormatCollection, rColorSet, pDocument);
+        {
+            const SwAttrSet& rAttrSet = pTextFormatCollection->GetAttrSet();
+            std::unique_ptr<SfxItemSet> pNewSet = rAttrSet.Clone();
+
+            bool bChanged = false;
+            bChanged = changeColor(rAttrSet, *pNewSet, rColorSet) || bChanged;
+            bChanged = changeOverlineColor(rAttrSet, *pNewSet, rColorSet) || 
bChanged;
+            bChanged = changeUnderlineColor(rAttrSet, *pNewSet, rColorSet) || 
bChanged;
+            bChanged = changeBox(rAttrSet, *pNewSet, rColorSet) || bChanged;
+            bChanged = changeBackground(rAttrSet, *pNewSet, rColorSet) || 
bChanged;
+
+            if (bChanged)
+                pDocument->ChgFormat(*pTextFormatCollection, *pNewSet);
+        }
         pStyle = static_cast<SwDocStyleSheet*>(pPool->Next());
     }
 
@@ -190,7 +441,17 @@ void ThemeColorChanger::apply(model::ColorSet const& 
rColorSet)
     {
         SwCharFormat* pCharFormat = pStyle->GetCharFormat();
         if (pCharFormat)
-            changeColor(pCharFormat, rColorSet, pDocument);
+        {
+            const SwAttrSet& rAttrSet = pCharFormat->GetAttrSet();
+            std::unique_ptr<SfxItemSet> pNewSet = rAttrSet.Clone();
+
+            bool bChanged = false;
+            bChanged = changeColor(rAttrSet, *pNewSet, rColorSet) || bChanged;
+            bChanged = changeOverlineColor(rAttrSet, *pNewSet, rColorSet) || 
bChanged;
+            bChanged = changeUnderlineColor(rAttrSet, *pNewSet, rColorSet) || 
bChanged;
+            if (bChanged)
+                pDocument->ChgFormat(*pCharFormat, *pNewSet);
+        }
         pStyle = static_cast<SwDocStyleSheet*>(pPool->Next());
     }
 
diff --git a/sw/source/core/unocore/unomap.cxx 
b/sw/source/core/unocore/unomap.cxx
index fef78327d779..4594f10f33e1 100644
--- a/sw/source/core/unocore/unomap.cxx
+++ b/sw/source/core/unocore/unomap.cxx
@@ -162,6 +162,7 @@ o3tl::span<const SfxItemPropertyMapEntry> 
SwUnoPropertyMapProvider::GetPropertyM
                 static SfxItemPropertyMapEntry const aCellMap_Impl[] =
                 {
                     { UNO_NAME_BACK_COLOR, RES_BACKGROUND,    
cppu::UnoType<sal_Int32>::get(),           PROPERTY_NONE , MID_BACK_COLOR       
},
+                    { UNO_NAME_BACKGROUND_COMPLEX_COLOR, RES_BACKGROUND, 
cppu::UnoType<css::util::XComplexColor>::get(), PROPERTY_NONE, 
MID_BACKGROUND_COMPLEX_COLOR },
                     { UNO_NAME_BACK_GRAPHIC_URL, RES_BACKGROUND,      
cppu::UnoType<OUString>::get(), PROPERTY_NONE ,MID_GRAPHIC_URL    },
                     { UNO_NAME_BACK_GRAPHIC, RES_BACKGROUND,      
cppu::UnoType<graphic::XGraphic>::get(), PROPERTY_NONE, MID_GRAPHIC    },
                     { UNO_NAME_BACK_GRAPHIC_FILTER, RES_BACKGROUND,       
cppu::UnoType<OUString>::get(), PROPERTY_NONE ,MID_GRAPHIC_FILTER    },
@@ -177,6 +178,10 @@ o3tl::span<const SfxItemPropertyMapEntry> 
SwUnoPropertyMapProvider::GetPropertyM
                     { UNO_NAME_RIGHT_BORDER_DISTANCE, RES_BOX,                
cppu::UnoType<sal_Int32>::get(),   0, RIGHT_BORDER_DISTANCE |CONVERT_TWIPS },
                     { UNO_NAME_TOP_BORDER_DISTANCE, RES_BOX,              
cppu::UnoType<sal_Int32>::get(),   0, TOP_BORDER_DISTANCE   |CONVERT_TWIPS },
                     { UNO_NAME_BOTTOM_BORDER_DISTANCE, RES_BOX,               
cppu::UnoType<sal_Int32>::get(),   0, BOTTOM_BORDER_DISTANCE|CONVERT_TWIPS },
+                    { UNO_NAME_BORDER_LEFT_COMPLEX_COLOR, RES_BOX,   
cppu::UnoType<css::util::XComplexColor>::get(),  0, MID_BORDER_LEFT_COLOR },
+                    { UNO_NAME_BORDER_RIGHT_COMPLEX_COLOR, RES_BOX,  
cppu::UnoType<css::util::XComplexColor>::get(),  0, MID_BORDER_RIGHT_COLOR },
+                    { UNO_NAME_BORDER_TOP_COMPLEX_COLOR, RES_BOX,    
cppu::UnoType<css::util::XComplexColor>::get(),  0, MID_BORDER_TOP_COLOR },
+                    { UNO_NAME_BORDER_BOTTOM_COMPLEX_COLOR, RES_BOX, 
cppu::UnoType<css::util::XComplexColor>::get(),  0, MID_BORDER_BOTTOM_COLOR },
                     { UNO_NAME_USER_DEFINED_ATTRIBUTES, 
RES_UNKNOWNATR_CONTAINER, cppu::UnoType<css::container::XNameContainer>::get(), 
PropertyAttribute::MAYBEVOID, 0 },
                     { UNO_NAME_TEXT_SECTION, FN_UNO_TEXT_SECTION, 
cppu::UnoType<css::text::XTextSection>::get(),  
PropertyAttribute::MAYBEVOID|PropertyAttribute::READONLY ,0 },
                     { UNO_NAME_IS_PROTECTED, RES_PROTECT,            
cppu::UnoType<bool>::get(), 0, MID_PROTECT_CONTENT},
@@ -356,7 +361,8 @@ o3tl::span<const SfxItemPropertyMapEntry> 
SwUnoPropertyMapProvider::GetPropertyM
                     { UNO_NAME_BACK_GRAPHIC, RES_BACKGROUND,      
cppu::UnoType<graphic::XGraphic>::get(), PROPERTY_NONE, MID_GRAPHIC    },
                     { UNO_NAME_BACK_GRAPHIC_FILTER, RES_BACKGROUND,       
cppu::UnoType<OUString>::get(), PROPERTY_NONE ,MID_GRAPHIC_FILTER    },
                     { UNO_NAME_BACK_GRAPHIC_LOCATION, RES_BACKGROUND,         
cppu::UnoType<css::style::GraphicLocation>::get(),          PROPERTY_NONE 
,MID_GRAPHIC_POSITION},
-                    { UNO_NAME_BACK_COLOR, RES_BACKGROUND,            
cppu::UnoType<sal_Int32>::get(),           PROPERTY_NONE ,MID_BACK_COLOR        
},
+                    { UNO_NAME_BACK_COLOR, RES_BACKGROUND, 
cppu::UnoType<sal_Int32>::get(), PROPERTY_NONE ,MID_BACK_COLOR },
+                    { UNO_NAME_BACKGROUND_COMPLEX_COLOR, RES_BACKGROUND, 
cppu::UnoType<css::util::XComplexColor>::get(), PROPERTY_NONE, 
MID_BACKGROUND_COMPLEX_COLOR },
                     { UNO_NAME_BACK_TRANSPARENT, RES_BACKGROUND,      
cppu::UnoType<bool>::get(),         PROPERTY_NONE ,MID_GRAPHIC_TRANSPARENT      
 },
                     { UNO_NAME_PARA_STYLEHEADING,                 
WID_PARA_HEAD,          cppu::UnoType<OUString>::get()  , 0,     0},
                     { UNO_NAME_PARA_STYLESEPARATOR,           WID_PARA_SEP,    
       cppu::UnoType<OUString>::get()  , 0,     0},
@@ -396,6 +402,7 @@ o3tl::span<const SfxItemPropertyMapEntry> 
SwUnoPropertyMapProvider::GetPropertyM
                     { UNO_NAME_BACK_GRAPHIC_FILTER, RES_BACKGROUND,       
cppu::UnoType<OUString>::get(), PROPERTY_NONE ,MID_GRAPHIC_FILTER    },
                     { UNO_NAME_BACK_GRAPHIC_LOCATION, RES_BACKGROUND,         
cppu::UnoType<css::style::GraphicLocation>::get(),          PROPERTY_NONE 
,MID_GRAPHIC_POSITION},
                     { UNO_NAME_BACK_COLOR, RES_BACKGROUND,            
cppu::UnoType<sal_Int32>::get(),           PROPERTY_NONE ,MID_BACK_COLOR        
},
+                    { UNO_NAME_BACKGROUND_COMPLEX_COLOR, RES_BACKGROUND, 
cppu::UnoType<css::util::XComplexColor>::get(), PROPERTY_NONE 
,MID_BACKGROUND_COMPLEX_COLOR },
                     { UNO_NAME_BACK_TRANSPARENT, RES_BACKGROUND,      
cppu::UnoType<bool>::get(),         PROPERTY_NONE ,MID_GRAPHIC_TRANSPARENT      
 },
                     { UNO_NAME_PARA_STYLEHEADING,     WID_PARA_HEAD,  
cppu::UnoType<OUString>::get()  , 0,     0},
                     { UNO_NAME_PARA_STYLELEVEL1,  WID_PARA_LEV1,  
cppu::UnoType<OUString>::get()  , 0,     0},
@@ -441,6 +448,7 @@ o3tl::span<const SfxItemPropertyMapEntry> 
SwUnoPropertyMapProvider::GetPropertyM
                     { UNO_NAME_BACK_GRAPHIC_FILTER, RES_BACKGROUND,       
cppu::UnoType<OUString>::get(), PROPERTY_NONE ,MID_GRAPHIC_FILTER    },
                     { UNO_NAME_BACK_GRAPHIC_LOCATION, RES_BACKGROUND,         
cppu::UnoType<css::style::GraphicLocation>::get(),          PROPERTY_NONE 
,MID_GRAPHIC_POSITION},
                     { UNO_NAME_BACK_COLOR, RES_BACKGROUND,            
cppu::UnoType<sal_Int32>::get(),           PROPERTY_NONE ,MID_BACK_COLOR        
},
+                    { UNO_NAME_BACKGROUND_COMPLEX_COLOR, RES_BACKGROUND, 
cppu::UnoType<css::util::XComplexColor>::get(), PROPERTY_NONE 
,MID_BACKGROUND_COMPLEX_COLOR },
                     { UNO_NAME_BACK_TRANSPARENT, RES_BACKGROUND,      
cppu::UnoType<bool>::get(),         PROPERTY_NONE ,MID_GRAPHIC_TRANSPARENT      
 },
                     { UNO_NAME_PARA_STYLEHEADING,     WID_PARA_HEAD,  
cppu::UnoType<OUString>::get()  , 0,     0},
                     { UNO_NAME_PARA_STYLELEVEL1,  WID_PARA_LEV1,  
cppu::UnoType<OUString>::get()  , 0,     0},
@@ -478,6 +486,7 @@ o3tl::span<const SfxItemPropertyMapEntry> 
SwUnoPropertyMapProvider::GetPropertyM
                     { UNO_NAME_BACK_GRAPHIC_FILTER, RES_BACKGROUND,       
cppu::UnoType<OUString>::get(), PROPERTY_NONE ,MID_GRAPHIC_FILTER    },
                     { UNO_NAME_BACK_GRAPHIC_LOCATION, RES_BACKGROUND,         
cppu::UnoType<css::style::GraphicLocation>::get(),          PROPERTY_NONE 
,MID_GRAPHIC_POSITION},
                     { UNO_NAME_BACK_COLOR, RES_BACKGROUND,            
cppu::UnoType<sal_Int32>::get(),           PROPERTY_NONE ,MID_BACK_COLOR        
},
+                    { UNO_NAME_BACKGROUND_COMPLEX_COLOR, RES_BACKGROUND, 
cppu::UnoType<css::util::XComplexColor>::get(), PROPERTY_NONE, 
MID_BACKGROUND_COMPLEX_COLOR },
                     { UNO_NAME_BACK_TRANSPARENT, RES_BACKGROUND,      
cppu::UnoType<bool>::get(),         PROPERTY_NONE ,MID_GRAPHIC_TRANSPARENT      
 },
                     { UNO_NAME_PARA_STYLEHEADING,     WID_PARA_HEAD,  
cppu::UnoType<OUString>::get()  , 0,     0},
                     { UNO_NAME_PARA_STYLELEVEL1,  WID_PARA_LEV1,  
cppu::UnoType<OUString>::get()  , 0,     0},
@@ -507,6 +516,7 @@ o3tl::span<const SfxItemPropertyMapEntry> 
SwUnoPropertyMapProvider::GetPropertyM
                     { UNO_NAME_BACK_GRAPHIC_FILTER, RES_BACKGROUND,       
cppu::UnoType<OUString>::get(), PROPERTY_NONE ,MID_GRAPHIC_FILTER    },
                     { UNO_NAME_BACK_GRAPHIC_LOCATION, RES_BACKGROUND,         
cppu::UnoType<css::style::GraphicLocation>::get(),          PROPERTY_NONE 
,MID_GRAPHIC_POSITION},
                     { UNO_NAME_BACK_COLOR, RES_BACKGROUND,            
cppu::UnoType<sal_Int32>::get(),           PROPERTY_NONE ,MID_BACK_COLOR        
},
+                    { UNO_NAME_BACKGROUND_COMPLEX_COLOR, RES_BACKGROUND, 
cppu::UnoType<css::util::XComplexColor>::get(), PROPERTY_NONE, 
MID_BACKGROUND_COMPLEX_COLOR },
                     { UNO_NAME_BACK_TRANSPARENT, RES_BACKGROUND,      
cppu::UnoType<bool>::get(),         PROPERTY_NONE ,MID_GRAPHIC_TRANSPARENT      
 },
                     { UNO_NAME_PARA_STYLEHEADING,     WID_PARA_HEAD,  
cppu::UnoType<OUString>::get()  , 0,     0},
                     { UNO_NAME_PARA_STYLELEVEL1,  WID_PARA_LEV1,  
cppu::UnoType<OUString>::get()  , 0,     0},
@@ -534,6 +544,7 @@ o3tl::span<const SfxItemPropertyMapEntry> 
SwUnoPropertyMapProvider::GetPropertyM
                     { UNO_NAME_BACK_GRAPHIC_FILTER, RES_BACKGROUND,       
cppu::UnoType<OUString>::get(), PROPERTY_NONE ,MID_GRAPHIC_FILTER    },
                     { UNO_NAME_BACK_GRAPHIC_LOCATION, RES_BACKGROUND,         
cppu::UnoType<css::style::GraphicLocation>::get(),          PROPERTY_NONE 
,MID_GRAPHIC_POSITION},
                     { UNO_NAME_BACK_COLOR, RES_BACKGROUND,            
cppu::UnoType<sal_Int32>::get(),           PROPERTY_NONE ,MID_BACK_COLOR        
},
+                    { UNO_NAME_BACKGROUND_COMPLEX_COLOR, RES_BACKGROUND, 
cppu::UnoType<css::util::XComplexColor>::get(), PROPERTY_NONE, 
MID_BACKGROUND_COMPLEX_COLOR },
                     { UNO_NAME_BACK_TRANSPARENT, RES_BACKGROUND,      
cppu::UnoType<bool>::get(),         PROPERTY_NONE ,MID_GRAPHIC_TRANSPARENT      
 },
                     { UNO_NAME_PARA_STYLEHEADING,     WID_PARA_HEAD,  
cppu::UnoType<OUString>::get()  , 0,     0},
                     { UNO_NAME_PARA_STYLELEVEL1,  WID_PARA_LEV1,  
cppu::UnoType<OUString>::get()  , 0,     0},
@@ -547,6 +558,7 @@ o3tl::span<const SfxItemPropertyMapEntry> 
SwUnoPropertyMapProvider::GetPropertyM
                 static SfxItemPropertyMapEntry const 
aTableRowPropertyMap_Impl[] =
                 {
                     { UNO_NAME_BACK_COLOR, RES_BACKGROUND, 
cppu::UnoType<sal_Int32>::get(), PROPERTY_NONE ,MID_BACK_COLOR         },
+                    { UNO_NAME_BACKGROUND_COMPLEX_COLOR, RES_BACKGROUND, 
cppu::UnoType<css::util::XComplexColor>::get(), PROPERTY_NONE, 
MID_BACKGROUND_COMPLEX_COLOR },
                     { UNO_NAME_BACK_GRAPHIC_URL, RES_BACKGROUND,      
cppu::UnoType<OUString>::get(), PROPERTY_NONE ,MID_GRAPHIC_URL    },
                     { UNO_NAME_BACK_GRAPHIC, RES_BACKGROUND,      
cppu::UnoType<graphic::XGraphic>::get(), PROPERTY_NONE, MID_GRAPHIC    },
                     { UNO_NAME_BACK_GRAPHIC_FILTER, RES_BACKGROUND,       
cppu::UnoType<OUString>::get(), PROPERTY_NONE ,MID_GRAPHIC_FILTER    },
@@ -602,6 +614,7 @@ o3tl::span<const SfxItemPropertyMapEntry> 
SwUnoPropertyMapProvider::GetPropertyM
                     { UNO_NAME_BACK_GRAPHIC_FILTER, RES_BACKGROUND,       
cppu::UnoType<OUString>::get(), PROPERTY_NONE ,MID_GRAPHIC_FILTER    },
                     { UNO_NAME_BACK_GRAPHIC_LOCATION, RES_BACKGROUND,         
cppu::UnoType<css::style::GraphicLocation>::get(),          PROPERTY_NONE 
,MID_GRAPHIC_POSITION},
                     { UNO_NAME_BACK_COLOR, RES_BACKGROUND,            
cppu::UnoType<sal_Int32>::get(),           PROPERTY_NONE ,MID_BACK_COLOR        
},
+                    { UNO_NAME_BACKGROUND_COMPLEX_COLOR, RES_BACKGROUND, 
cppu::UnoType<css::util::XComplexColor>::get(), PROPERTY_NONE, 
MID_BACKGROUND_COMPLEX_COLOR },
                     { UNO_NAME_BACK_TRANSPARENT, RES_BACKGROUND,      
cppu::UnoType<bool>::get(),         PROPERTY_NONE ,MID_GRAPHIC_TRANSPARENT      
 },
                     { UNO_NAME_PARA_STYLEHEADING,     WID_PARA_HEAD,  
cppu::UnoType<OUString>::get()  , 0,     0},
                     { UNO_NAME_PARA_STYLELEVEL1,  WID_PARA_LEV1,  
cppu::UnoType<OUString>::get()  , 0,     0},
@@ -1446,7 +1459,8 @@ o3tl::span<const SfxItemPropertyMapEntry> 
SwUnoPropertyMapProvider::GetPropertyM
                 static SfxItemPropertyMapEntry const aCellStyleMap[] =
                 {
                     // SvxBrushItem
-                    { UNO_NAME_BACK_COLOR,             RES_BACKGROUND,    
cppu::UnoType<sal_Int32>::get(),               PROPERTY_NONE,  0                
                    },
+                    { UNO_NAME_BACK_COLOR,             RES_BACKGROUND,   
cppu::UnoType<sal_Int32>::get(),                PROPERTY_NONE, MID_BACK_COLOR },
+                    { UNO_NAME_BACKGROUND_COMPLEX_COLOR, RES_BACKGROUND, 
cppu::UnoType<css::util::XComplexColor>::get(), PROPERTY_NONE, 
MID_BACKGROUND_COMPLEX_COLOR },
                     // SvxBoxItem
                     { UNO_NAME_LEFT_BORDER,            RES_BOX,           
cppu::UnoType<css::table::BorderLine>::get(),  PROPERTY_NONE,  
LEFT_BORDER|CONVERT_TWIPS            },
                     { UNO_NAME_RIGHT_BORDER,           RES_BOX,           
cppu::UnoType<css::table::BorderLine>::get(),  PROPERTY_NONE,  
RIGHT_BORDER|CONVERT_TWIPS           },
@@ -1457,6 +1471,10 @@ o3tl::span<const SfxItemPropertyMapEntry> 
SwUnoPropertyMapProvider::GetPropertyM
                     { UNO_NAME_RIGHT_BORDER_DISTANCE,  RES_BOX,           
cppu::UnoType<sal_Int32>::get(),               PROPERTY_NONE,  
RIGHT_BORDER_DISTANCE |CONVERT_TWIPS },
                     { UNO_NAME_TOP_BORDER_DISTANCE,    RES_BOX,           
cppu::UnoType<sal_Int32>::get(),               PROPERTY_NONE,  
TOP_BORDER_DISTANCE   |CONVERT_TWIPS },
                     { UNO_NAME_BOTTOM_BORDER_DISTANCE, RES_BOX,           
cppu::UnoType<sal_Int32>::get(),               PROPERTY_NONE,  
BOTTOM_BORDER_DISTANCE|CONVERT_TWIPS },
+                    { UNO_NAME_BORDER_LEFT_COMPLEX_COLOR,   RES_BOX,      
cppu::UnoType<css::util::XComplexColor>::get(),  PROPERTY_NONE, 
MID_BORDER_LEFT_COLOR },
+                    { UNO_NAME_BORDER_RIGHT_COMPLEX_COLOR,  RES_BOX,      
cppu::UnoType<css::util::XComplexColor>::get(),  PROPERTY_NONE, 
MID_BORDER_RIGHT_COLOR },
+                    { UNO_NAME_BORDER_TOP_COMPLEX_COLOR,    RES_BOX,      
cppu::UnoType<css::util::XComplexColor>::get(),  PROPERTY_NONE, 
MID_BORDER_TOP_COLOR },
+                    { UNO_NAME_BORDER_BOTTOM_COMPLEX_COLOR, RES_BOX,      
cppu::UnoType<css::util::XComplexColor>::get(),  PROPERTY_NONE, 
MID_BORDER_BOTTOM_COLOR },
                     // SwFormatVertOrient
                     { UNO_NAME_VERT_ORIENT,            RES_VERT_ORIENT,   
cppu::UnoType<sal_Int16>::get(),               PROPERTY_NONE,  
MID_VERTORIENT_ORIENT                },
                     // SvxFrameDirectionItem
@@ -1479,6 +1497,7 @@ o3tl::span<const SfxItemPropertyMapEntry> 
SwUnoPropertyMapProvider::GetPropertyM
                     // SvxUnderlineItem
                     { UNO_NAME_CHAR_UNDERLINE,      RES_CHRATR_UNDERLINE, 
cppu::UnoType<sal_Int16>::get(),               PROPERTY_NONE,  MID_TL_STYLE     
                    },
                     { UNO_NAME_CHAR_UNDERLINE_COLOR, 
RES_CHRATR_UNDERLINE,cppu::UnoType<sal_Int32>::get(),               
PROPERTY_NONE,  MID_TL_COLOR                         },
+                    { UNO_NAME_CHAR_UNDERLINE_COMPLEX_COLOR, 
RES_CHRATR_UNDERLINE, cppu::UnoType<css::util::XComplexColor>::get(), 
PROPERTY_NONE, MID_TL_COMPLEX_COLOR },
                     { UNO_NAME_CHAR_UNDERLINE_HAS_COLOR, RES_CHRATR_UNDERLINE, 
cppu::UnoType<bool>::get(),               PROPERTY_NONE,  MID_TL_HASCOLOR       
               },
                     // standard font
                     // SvxFontHeightItem
diff --git a/sw/source/core/unocore/unomap1.cxx 
b/sw/source/core/unocore/unomap1.cxx
index 36ecc6cd7b57..31ad710c2fd5 100644
--- a/sw/source/core/unocore/unomap1.cxx
+++ b/sw/source/core/unocore/unomap1.cxx
@@ -177,6 +177,7 @@ o3tl::span<const SfxItemPropertyMapEntry> 
SwUnoPropertyMapProvider::GetCharStyle
         { UNO_NAME_CHAR_AUTO_KERNING, RES_CHRATR_AUTOKERN  ,  
cppu::UnoType<bool>::get()  ,       PROPERTY_NONE,     0},
         { UNO_NAME_CHAR_BACK_TRANSPARENT, RES_CHRATR_BACKGROUND,  
cppu::UnoType<bool>::get(),         PROPERTY_NONE ,MID_GRAPHIC_TRANSPARENT      
 },
         { UNO_NAME_CHAR_BACK_COLOR, RES_CHRATR_BACKGROUND,    
cppu::UnoType<sal_Int32>::get(),           PROPERTY_NONE ,MID_BACK_COLOR        
},
+        { UNO_NAME_CHAR_BACKGROUND_COMPLEX_COLOR, RES_CHRATR_BACKGROUND, 
cppu::UnoType<css::util::XComplexColor>::get(), PROPERTY_NONE 
,MID_BACKGROUND_COMPLEX_COLOR },
         { UNO_NAME_CHAR_HIGHLIGHT, RES_CHRATR_HIGHLIGHT, 
cppu::UnoType<sal_Int32>::get(), PROPERTY_NONE, MID_BACK_COLOR },
         { UNO_NAME_CHAR_CASE_MAP, RES_CHRATR_CASEMAP,     
cppu::UnoType<sal_Int16>::get(),           PROPERTY_NONE, 0},
         { UNO_NAME_CHAR_COLOR, RES_CHRATR_COLOR, 
cppu::UnoType<sal_Int32>::get(), PROPERTY_NONE, 0 },
@@ -195,9 +196,11 @@ o3tl::span<const SfxItemPropertyMapEntry> 
SwUnoPropertyMapProvider::GetCharStyle
         CTL_FONT_PROPERTIES
         { UNO_NAME_CHAR_UNDERLINE, RES_CHRATR_UNDERLINE ,  
cppu::UnoType<sal_Int16>::get(),      PROPERTY_NONE, MID_TL_STYLE},
         { UNO_NAME_CHAR_UNDERLINE_COLOR, RES_CHRATR_UNDERLINE ,  
cppu::UnoType<sal_Int32>::get(),            PROPERTY_NONE, MID_TL_COLOR},
+        { UNO_NAME_CHAR_UNDERLINE_COMPLEX_COLOR, RES_CHRATR_UNDERLINE ,  
cppu::UnoType<css::util::XComplexColor>::get(), PROPERTY_NONE, 
MID_TL_COMPLEX_COLOR },
         { UNO_NAME_CHAR_UNDERLINE_HAS_COLOR, RES_CHRATR_UNDERLINE ,  
cppu::UnoType<bool>::get(),              PROPERTY_NONE, MID_TL_HASCOLOR},
         { UNO_NAME_CHAR_OVERLINE, RES_CHRATR_OVERLINE ,  
cppu::UnoType<sal_Int16>::get(),    PROPERTY_NONE, MID_TL_STYLE},
         { UNO_NAME_CHAR_OVERLINE_COLOR, RES_CHRATR_OVERLINE ,  
cppu::UnoType<sal_Int32>::get(),              PROPERTY_NONE, MID_TL_COLOR},
+        { UNO_NAME_CHAR_OVERLINE_COMPLEX_COLOR, RES_CHRATR_OVERLINE, 
cppu::UnoType<css::util::XComplexColor>::get(), PROPERTY_NONE, 
MID_TL_COMPLEX_COLOR },
         { UNO_NAME_CHAR_OVERLINE_HAS_COLOR, RES_CHRATR_OVERLINE ,  
cppu::UnoType<bool>::get(),            PROPERTY_NONE, MID_TL_HASCOLOR},
         { UNO_NAME_CHAR_KERNING, RES_CHRATR_KERNING    ,  
cppu::UnoType<sal_Int16>::get()  ,         PROPERTY_NONE,  CONVERT_TWIPS},
         { UNO_NAME_CHAR_NO_HYPHENATION, RES_CHRATR_NOHYPHEN   ,   
cppu::UnoType<bool>::get()  ,       PROPERTY_NONE,     0},
@@ -227,6 +230,10 @@ o3tl::span<const SfxItemPropertyMapEntry> 
SwUnoPropertyMapProvider::GetCharStyle
         { UNO_NAME_CHAR_RIGHT_BORDER_DISTANCE, RES_CHRATR_BOX, 
cppu::UnoType<sal_Int32>::get(), PROPERTY_NONE, RIGHT_BORDER_DISTANCE 
|CONVERT_TWIPS },
         { UNO_NAME_CHAR_TOP_BORDER_DISTANCE, RES_CHRATR_BOX, 
cppu::UnoType<sal_Int32>::get(), PROPERTY_NONE, TOP_BORDER_DISTANCE 
|CONVERT_TWIPS },
         { UNO_NAME_CHAR_BOTTOM_BORDER_DISTANCE, RES_CHRATR_BOX, 
cppu::UnoType<sal_Int32>::get(), PROPERTY_NONE, 
BOTTOM_BORDER_DISTANCE|CONVERT_TWIPS },
+        { UNO_NAME_CHAR_BORDER_LEFT_COMPLEX_COLOR, RES_CHRATR_BOX,   
cppu::UnoType<css::util::XComplexColor>::get(),  PROPERTY_NONE, 
MID_BORDER_LEFT_COLOR },
+        { UNO_NAME_CHAR_BORDER_RIGHT_COMPLEX_COLOR, RES_CHRATR_BOX,  
cppu::UnoType<css::util::XComplexColor>::get(),  PROPERTY_NONE, 
MID_BORDER_RIGHT_COLOR },
+        { UNO_NAME_CHAR_BORDER_TOP_COMPLEX_COLOR, RES_CHRATR_BOX,    
cppu::UnoType<css::util::XComplexColor>::get(),  PROPERTY_NONE, 
MID_BORDER_TOP_COLOR },
+        { UNO_NAME_CHAR_BORDER_BOTTOM_COMPLEX_COLOR, RES_CHRATR_BOX, 
cppu::UnoType<css::util::XComplexColor>::get(),  PROPERTY_NONE, 
MID_BORDER_BOTTOM_COLOR },
         { UNO_NAME_CHAR_SHADOW_FORMAT, RES_CHRATR_SHADOW, 
cppu::UnoType<css::table::ShadowFormat>::get(), PROPERTY_NONE, CONVERT_TWIPS},
         { UNO_NAME_LINK_STYLE, FN_UNO_LINK_STYLE, 
cppu::UnoType<OUString>::get(), PROPERTY_NONE, 0},
     };
@@ -242,6 +249,7 @@ o3tl::span<const SfxItemPropertyMapEntry>  
SwUnoPropertyMapProvider::GetAutoChar
         { UNO_NAME_CHAR_AUTO_KERNING, RES_CHRATR_AUTOKERN  ,  
cppu::UnoType<bool>::get()  ,       PROPERTY_NONE,     0},
         { UNO_NAME_CHAR_BACK_TRANSPARENT, RES_CHRATR_BACKGROUND,  
cppu::UnoType<bool>::get(),         PROPERTY_NONE ,MID_GRAPHIC_TRANSPARENT      
 },
         { UNO_NAME_CHAR_BACK_COLOR, RES_CHRATR_BACKGROUND,    
cppu::UnoType<sal_Int32>::get(),           PROPERTY_NONE ,MID_BACK_COLOR        
},
+        { UNO_NAME_CHAR_BACKGROUND_COMPLEX_COLOR, RES_CHRATR_BACKGROUND, 
cppu::UnoType<css::util::XComplexColor>::get(), PROPERTY_NONE, 
MID_BACKGROUND_COMPLEX_COLOR },
         { UNO_NAME_CHAR_HIGHLIGHT, RES_CHRATR_HIGHLIGHT, 
cppu::UnoType<sal_Int32>::get(), PROPERTY_NONE, MID_BACK_COLOR },
         { UNO_NAME_CHAR_CASE_MAP, RES_CHRATR_CASEMAP,     
cppu::UnoType<sal_Int16>::get(),           PROPERTY_NONE, 0},
         { UNO_NAME_CHAR_COLOR, RES_CHRATR_COLOR,      
cppu::UnoType<sal_Int32>::get(),           PROPERTY_NONE, 0},
@@ -260,9 +268,11 @@ o3tl::span<const SfxItemPropertyMapEntry>  
SwUnoPropertyMapProvider::GetAutoChar
         CTL_FONT_PROPERTIES
         { UNO_NAME_CHAR_UNDERLINE, RES_CHRATR_UNDERLINE ,  
cppu::UnoType<sal_Int16>::get(),      PROPERTY_NONE, MID_TL_STYLE},
         { UNO_NAME_CHAR_UNDERLINE_COLOR, RES_CHRATR_UNDERLINE ,  
cppu::UnoType<sal_Int32>::get(),            PROPERTY_NONE, MID_TL_COLOR},
+        { UNO_NAME_CHAR_UNDERLINE_COMPLEX_COLOR, RES_CHRATR_UNDERLINE, 
cppu::UnoType<css::util::XComplexColor>::get(), PROPERTY_NONE, 
MID_TL_COMPLEX_COLOR },
         { UNO_NAME_CHAR_UNDERLINE_HAS_COLOR, RES_CHRATR_UNDERLINE ,  
cppu::UnoType<bool>::get(),              PROPERTY_NONE, MID_TL_HASCOLOR},
         { UNO_NAME_CHAR_OVERLINE, RES_CHRATR_OVERLINE ,  
cppu::UnoType<sal_Int16>::get(),      PROPERTY_NONE, MID_TL_STYLE},
         { UNO_NAME_CHAR_OVERLINE_COLOR, RES_CHRATR_OVERLINE ,  
cppu::UnoType<sal_Int32>::get(),            PROPERTY_NONE, MID_TL_COLOR},
+        { UNO_NAME_CHAR_OVERLINE_COMPLEX_COLOR, RES_CHRATR_OVERLINE, 
cppu::UnoType<css::util::XComplexColor>::get(), PROPERTY_NONE, 
MID_TL_COMPLEX_COLOR },
         { UNO_NAME_CHAR_OVERLINE_HAS_COLOR, RES_CHRATR_OVERLINE ,  
cppu::UnoType<bool>::get(),              PROPERTY_NONE, MID_TL_HASCOLOR},
         { UNO_NAME_CHAR_KERNING, RES_CHRATR_KERNING    ,  
cppu::UnoType<sal_Int16>::get()  ,         PROPERTY_NONE,  CONVERT_TWIPS},
         { UNO_NAME_CHAR_NO_HYPHENATION, RES_CHRATR_NOHYPHEN   ,   
cppu::UnoType<bool>::get()  ,       PROPERTY_NONE,     0},
@@ -339,6 +349,7 @@ o3tl::span<const SfxItemPropertyMapEntry> 
SwUnoPropertyMapProvider::GetFrameStyl
         { UNO_NAME_ANCHOR_PAGE_NO, RES_ANCHOR,            
cppu::UnoType<sal_Int16>::get(),           PROPERTY_NONE, MID_ANCHOR_PAGENUM    
   },
         { UNO_NAME_ANCHOR_TYPE, RES_ANCHOR,           
cppu::UnoType<css::text::TextContentAnchorType>::get(),            
PROPERTY_NONE, MID_ANCHOR_ANCHORTYPE},
         { UNO_NAME_BACK_COLOR, RES_BACKGROUND,            
cppu::UnoType<sal_Int32>::get(),           PROPERTY_NONE ,MID_BACK_COLOR        
},
+        { UNO_NAME_BACKGROUND_COMPLEX_COLOR, RES_BACKGROUND, 
cppu::UnoType<css::util::XComplexColor>::get(), PROPERTY_NONE 
,MID_BACKGROUND_COMPLEX_COLOR },
         { UNO_NAME_BACK_COLOR_R_G_B, RES_BACKGROUND,      
cppu::UnoType<sal_Int32>::get(), PROPERTY_NONE ,MID_BACK_COLOR_R_G_B},
         { UNO_NAME_BACK_COLOR_TRANSPARENCY, RES_BACKGROUND,      
cppu::UnoType<sal_Int8>::get(), PROPERTY_NONE ,MID_BACK_COLOR_TRANSPARENCY},
         { UNO_NAME_FRAME_INTEROP_GRAB_BAG, RES_FRMATR_GRABBAG, cppu::UnoType< 
cppu::UnoSequenceType<css::beans::PropertyValue> >::get(), PROPERTY_NONE, 0},
@@ -403,6 +414,10 @@ o3tl::span<const SfxItemPropertyMapEntry> 
SwUnoPropertyMapProvider::GetFrameStyl
         { UNO_NAME_RIGHT_BORDER_DISTANCE, RES_BOX,                
cppu::UnoType<sal_Int32>::get(),   0, RIGHT_BORDER_DISTANCE |CONVERT_TWIPS },
         { UNO_NAME_TOP_BORDER_DISTANCE, RES_BOX,              
cppu::UnoType<sal_Int32>::get(),   0, TOP_BORDER_DISTANCE   |CONVERT_TWIPS },
         { UNO_NAME_BOTTOM_BORDER_DISTANCE, RES_BOX,               
cppu::UnoType<sal_Int32>::get(),   0, BOTTOM_BORDER_DISTANCE|CONVERT_TWIPS },
+        { UNO_NAME_BORDER_LEFT_COMPLEX_COLOR, RES_BOX,   
cppu::UnoType<css::util::XComplexColor>::get(),  0, MID_BORDER_LEFT_COLOR },
+        { UNO_NAME_BORDER_RIGHT_COMPLEX_COLOR, RES_BOX,  
cppu::UnoType<css::util::XComplexColor>::get(),  0, MID_BORDER_RIGHT_COLOR },
+        { UNO_NAME_BORDER_TOP_COMPLEX_COLOR, RES_BOX,    
cppu::UnoType<css::util::XComplexColor>::get(),  0, MID_BORDER_TOP_COLOR },
+        { UNO_NAME_BORDER_BOTTOM_COMPLEX_COLOR, RES_BOX, 
cppu::UnoType<css::util::XComplexColor>::get(),  0, MID_BORDER_BOTTOM_COLOR },
         { UNO_NAME_USER_DEFINED_ATTRIBUTES, RES_UNKNOWNATR_CONTAINER, 
cppu::UnoType<css::container::XNameContainer>::get(), 
PropertyAttribute::MAYBEVOID, 0 },
         { UNO_NAME_IS_PHYSICAL, FN_UNO_IS_PHYSICAL,     
cppu::UnoType<bool>::get(), PropertyAttribute::READONLY, 0},
         { UNO_NAME_IS_AUTO_UPDATE, FN_UNO_IS_AUTO_UPDATE, 
cppu::UnoType<bool>::get(), PROPERTY_NONE, 0},
@@ -431,7 +446,8 @@ o3tl::span<const SfxItemPropertyMapEntry> 
SwUnoPropertyMapProvider::GetPageStyle
 {
     static SfxItemPropertyMapEntry const aPageStyleMap   [] =
     {
-        { UNO_NAME_BACK_COLOR, RES_BACKGROUND,            
cppu::UnoType<sal_Int32>::get(),           PROPERTY_NONE ,MID_BACK_COLOR        
},
+        { UNO_NAME_BACK_COLOR, RES_BACKGROUND,            
cppu::UnoType<sal_Int32>::get(), PROPERTY_NONE, MID_BACK_COLOR },
+        { UNO_NAME_BACKGROUND_COMPLEX_COLOR, RES_BACKGROUND, 
cppu::UnoType<css::util::XComplexColor>::get(), PROPERTY_NONE, 
MID_BACKGROUND_COMPLEX_COLOR },
         { UNO_NAME_BACK_GRAPHIC_URL, RES_BACKGROUND,      
cppu::UnoType<OUString>::get(), PROPERTY_NONE ,MID_GRAPHIC_URL    },
         { UNO_NAME_BACK_GRAPHIC, RES_BACKGROUND, 
cppu::UnoType<graphic::XGraphic>::get(), PROPERTY_NONE, MID_GRAPHIC },
         { UNO_NAME_BACK_GRAPHIC_FILTER, RES_BACKGROUND,       
cppu::UnoType<OUString>::get(), PROPERTY_NONE ,MID_GRAPHIC_FILTER    },
@@ -449,6 +465,10 @@ o3tl::span<const SfxItemPropertyMapEntry> 
SwUnoPropertyMapProvider::GetPageStyle
         { UNO_NAME_RIGHT_BORDER_DISTANCE, RES_BOX,                
cppu::UnoType<sal_Int32>::get(),   0, RIGHT_BORDER_DISTANCE |CONVERT_TWIPS },
         { UNO_NAME_TOP_BORDER_DISTANCE, RES_BOX,              
cppu::UnoType<sal_Int32>::get(),   0, TOP_BORDER_DISTANCE   |CONVERT_TWIPS },
         { UNO_NAME_BOTTOM_BORDER_DISTANCE, RES_BOX,               
cppu::UnoType<sal_Int32>::get(),   0, BOTTOM_BORDER_DISTANCE|CONVERT_TWIPS },
+        { UNO_NAME_BORDER_LEFT_COMPLEX_COLOR, RES_BOX,   
cppu::UnoType<css::util::XComplexColor>::get(),  0, MID_BORDER_LEFT_COLOR },
+        { UNO_NAME_BORDER_RIGHT_COMPLEX_COLOR, RES_BOX,  
cppu::UnoType<css::util::XComplexColor>::get(),  0, MID_BORDER_RIGHT_COLOR },
+        { UNO_NAME_BORDER_TOP_COMPLEX_COLOR, RES_BOX,    
cppu::UnoType<css::util::XComplexColor>::get(),  0, MID_BORDER_TOP_COLOR },
+        { UNO_NAME_BORDER_BOTTOM_COMPLEX_COLOR, RES_BOX, 
cppu::UnoType<css::util::XComplexColor>::get(),  0, MID_BORDER_BOTTOM_COLOR },
         { UNO_NAME_SHADOW_FORMAT, RES_SHADOW,             
cppu::UnoType<css::table::ShadowFormat>::get(),   PROPERTY_NONE, CONVERT_TWIPS},
         { UNO_NAME_SHADOW_TRANSPARENCE, RES_SHADOW,       
cppu::UnoType<sal_Int16>::get(),       PROPERTY_NONE, MID_SHADOW_TRANSPARENCE},
 
@@ -631,7 +651,8 @@ o3tl::span<const SfxItemPropertyMapEntry> 
SwUnoPropertyMapProvider::GetTableProp
 {
     static SfxItemPropertyMapEntry const aTablePropertyMap_Impl[] =
     {
-        { UNO_NAME_BACK_COLOR, RES_BACKGROUND,        
cppu::UnoType<sal_Int32>::get(),           PROPERTY_NONE,MID_BACK_COLOR         
},
+        { UNO_NAME_BACK_COLOR, RES_BACKGROUND,        
cppu::UnoType<sal_Int32>::get(), PROPERTY_NONE,MID_BACK_COLOR },
+        { UNO_NAME_BACKGROUND_COMPLEX_COLOR, RES_BACKGROUND, 
cppu::UnoType<css::util::XComplexColor>::get(), PROPERTY_NONE, 
MID_BACKGROUND_COMPLEX_COLOR},
         { UNO_NAME_BREAK_TYPE, RES_BREAK,                 
cppu::UnoType<css::style::BreakType>::get(),       PROPERTY_NONE, 0},
         { UNO_NAME_BACK_GRAPHIC_URL, RES_BACKGROUND,      
cppu::UnoType<OUString>::get(), PROPERTY_NONE ,MID_GRAPHIC_URL    },
         { UNO_NAME_BACK_GRAPHIC, RES_BACKGROUND, 
cppu::UnoType<graphic::XGraphic>::get(), PROPERTY_NONE, MID_GRAPHIC },
@@ -684,7 +705,8 @@ o3tl::span<const SfxItemPropertyMapEntry> 
SwUnoPropertyMapProvider::GetRangeProp
     {
         COMMON_CRSR_PARA_PROPERTIES_WITHOUT_FN_01
         TABSTOPS_MAP_ENTRY
-        { UNO_NAME_BACK_COLOR, FN_UNO_TABLE_CELL_BACKGROUND,  
cppu::UnoType<sal_Int32>::get(),   PropertyAttribute::MAYBEVOID, MID_BACK_COLOR 
 },
+        { UNO_NAME_BACK_COLOR, FN_UNO_TABLE_CELL_BACKGROUND, 
cppu::UnoType<sal_Int32>::get(), PropertyAttribute::MAYBEVOID, MID_BACK_COLOR  
},
+        { UNO_NAME_BACKGROUND_COMPLEX_COLOR, FN_UNO_TABLE_CELL_BACKGROUND, 
cppu::UnoType<sal_Int32>::get(), PropertyAttribute::MAYBEVOID, 
MID_BACKGROUND_COMPLEX_COLOR  },
         { UNO_NAME_BACK_GRAPHIC_URL, RES_BACKGROUND,      
cppu::UnoType<OUString>::get(), PropertyAttribute::MAYBEVOID ,MID_GRAPHIC_URL   
 },
         { UNO_NAME_BACK_GRAPHIC, RES_BACKGROUND, 
cppu::UnoType<graphic::XGraphic>::get(), PROPERTY_NONE, MID_GRAPHIC },
         { UNO_NAME_BACK_GRAPHIC_FILTER, RES_BACKGROUND,       
cppu::UnoType<OUString>::get(), PropertyAttribute::MAYBEVOID 
,MID_GRAPHIC_FILTER    },
@@ -719,6 +741,7 @@ o3tl::span<const SfxItemPropertyMapEntry> 
SwUnoPropertyMapProvider::GetSectionPr
         { UNO_NAME_BACK_GRAPHIC_FILTER, RES_BACKGROUND,       
cppu::UnoType<OUString>::get(), PROPERTY_NONE ,MID_GRAPHIC_FILTER    },
         { UNO_NAME_BACK_GRAPHIC_LOCATION, RES_BACKGROUND,         
cppu::UnoType<css::style::GraphicLocation>::get(),          PROPERTY_NONE 
,MID_GRAPHIC_POSITION},
         { UNO_NAME_BACK_COLOR, RES_BACKGROUND,            
cppu::UnoType<sal_Int32>::get(),           PROPERTY_NONE ,MID_BACK_COLOR        
},
+        { UNO_NAME_BACKGROUND_COMPLEX_COLOR, RES_BACKGROUND, 
cppu::UnoType<css::util::XComplexColor>::get(), PROPERTY_NONE, 
MID_BACKGROUND_COMPLEX_COLOR },
         { UNO_NAME_BACK_TRANSPARENT, RES_BACKGROUND,      
cppu::UnoType<bool>::get(),         PROPERTY_NONE ,MID_GRAPHIC_TRANSPARENT      
 },
         { UNO_LINK_DISPLAY_NAME, FN_PARAM_LINK_DISPLAY_NAME,  
cppu::UnoType<OUString>::get(), PropertyAttribute::READONLY, 0xbf},
         { UNO_NAME_USER_DEFINED_ATTRIBUTES, RES_UNKNOWNATR_CONTAINER, 
cppu::UnoType<css::container::XNameContainer>::get(), 
PropertyAttribute::MAYBEVOID, 0 },
@@ -916,6 +939,7 @@ o3tl::span<const SfxItemPropertyMapEntry> 
SwUnoPropertyMapProvider::GetTextTable
 
         // attributes from PROPERTY_MAP_TABLE_CELL:
         { UNO_NAME_BACK_COLOR, FN_UNO_TABLE_CELL_BACKGROUND,    
cppu::UnoType<sal_Int32>::get(),           PROPERTY_NONE , MID_BACK_COLOR       
},
+        { UNO_NAME_BACKGROUND_COMPLEX_COLOR, FN_UNO_TABLE_CELL_BACKGROUND, 
cppu::UnoType<css::util::XComplexColor>::get(), PROPERTY_NONE , 
MID_BACKGROUND_COMPLEX_COLOR },
         { UNO_NAME_BACK_GRAPHIC_URL, RES_BACKGROUND,      
cppu::UnoType<OUString>::get(), PROPERTY_NONE ,MID_GRAPHIC_URL    },
         { UNO_NAME_BACK_GRAPHIC, RES_BACKGROUND, 
cppu::UnoType<graphic::XGraphic>::get(), PROPERTY_NONE, MID_GRAPHIC },
         { UNO_NAME_BACK_GRAPHIC_FILTER, RES_BACKGROUND,       
cppu::UnoType<OUString>::get(), PROPERTY_NONE ,MID_GRAPHIC_FILTER    },
diff --git a/sw/source/core/unocore/unomapproperties.hxx 
b/sw/source/core/unocore/unomapproperties.hxx
index 5e53bcf6a6b4..7d889755918b 100644
--- a/sw/source/core/unocore/unomapproperties.hxx
+++ b/sw/source/core/unocore/unomapproperties.hxx
@@ -121,8 +121,10 @@
         { UNO_NAME_PARA_HYPHENATION_ZONE,               RES_PARATR_HYPHENZONE, 
        cppu::UnoType<sal_Int16>::get(),         PropertyAttribute::MAYBEVOID, 
MID_HYPHEN_ZONE}, \
         { UNO_NAME_CHAR_AUTO_KERNING,                   RES_CHRATR_AUTOKERN,   
        cppu::UnoType<bool>::get(),       PropertyAttribute::MAYBEVOID, 0       
                               }, \
         { UNO_NAME_CHAR_BACK_COLOR,                     RES_CHRATR_BACKGROUND, 
        cppu::UnoType<sal_Int32>::get(),         PropertyAttribute::MAYBEVOID, 
MID_BACK_COLOR                         }, \
+        { UNO_NAME_CHAR_BACKGROUND_COMPLEX_COLOR,       RES_CHRATR_BACKGROUND, 
        cppu::UnoType<css::util::XComplexColor>::get(), PROPERTY_NONE, 
MID_BACKGROUND_COMPLEX_COLOR },\
         { UNO_NAME_CHAR_HIGHLIGHT,                      RES_CHRATR_HIGHLIGHT,  
        cppu::UnoType<sal_Int32>::get(), PropertyAttribute::MAYBEVOID, 
MID_BACK_COLOR                         }, \
         { UNO_NAME_PARA_BACK_COLOR,                     RES_BACKGROUND,        
        cppu::UnoType<sal_Int32>::get(),         PropertyAttribute::MAYBEVOID, 
MID_BACK_COLOR                         }, \
+        { UNO_NAME_PARA_BACKGROUND_COMPLEX_COLOR,       RES_BACKGROUND,        
        cppu::UnoType<css::util::XComplexColor>::get(), PROPERTY_NONE , 
MID_BACKGROUND_COMPLEX_COLOR },\
         { UNO_NAME_CHAR_CASE_MAP,                       RES_CHRATR_CASEMAP,    
        cppu::UnoType<sal_Int16>::get(),         PropertyAttribute::MAYBEVOID, 
0                                      }, \
         { UNO_NAME_CHAR_COLOR,                          RES_CHRATR_COLOR,      
        cppu::UnoType<sal_Int32>::get(),         PropertyAttribute::MAYBEVOID, 
0                                      }, \
         { UNO_NAME_CHAR_COLOR_THEME,                    RES_CHRATR_COLOR,      
        cppu::UnoType<sal_Int16>::get(),         PropertyAttribute::MAYBEVOID, 
MID_COLOR_THEME_INDEX }, \
@@ -138,9 +140,11 @@
         { UNO_NAME_CHAR_HIDDEN,                         RES_CHRATR_HIDDEN,     
        cppu::UnoType<bool>::get(),       PropertyAttribute::MAYBEVOID, 0       
                               }, \
         { UNO_NAME_CHAR_UNDERLINE,                      RES_CHRATR_UNDERLINE,  
        cppu::UnoType<sal_Int16>::get(),         PropertyAttribute::MAYBEVOID, 
MID_TL_STYLE                           }, \
         { UNO_NAME_CHAR_UNDERLINE_COLOR,                RES_CHRATR_UNDERLINE,  
        cppu::UnoType<sal_Int32>::get(),         PropertyAttribute::MAYBEVOID, 
MID_TL_COLOR                           }, \
+        { UNO_NAME_CHAR_UNDERLINE_COMPLEX_COLOR,        RES_CHRATR_UNDERLINE,  
        cppu::UnoType<css::util::XComplexColor>::get(), 
PropertyAttribute::MAYBEVOID, MID_TL_COMPLEX_COLOR }, \
         { UNO_NAME_CHAR_UNDERLINE_HAS_COLOR,            RES_CHRATR_UNDERLINE,  
        cppu::UnoType<bool>::get(),       PropertyAttribute::MAYBEVOID, 
MID_TL_HASCOLOR                        }, \
         { UNO_NAME_CHAR_OVERLINE,                       RES_CHRATR_OVERLINE,   
        cppu::UnoType<sal_Int16>::get(),         PropertyAttribute::MAYBEVOID, 
MID_TL_STYLE                           }, \
         { UNO_NAME_CHAR_OVERLINE_COLOR,                 RES_CHRATR_OVERLINE,   
        cppu::UnoType<sal_Int32>::get(),         PropertyAttribute::MAYBEVOID, 
MID_TL_COLOR                           }, \
+        { UNO_NAME_CHAR_OVERLINE_COMPLEX_COLOR,         RES_CHRATR_OVERLINE,   
        cppu::UnoType<css::util::XComplexColor>::get(), 
PropertyAttribute::MAYBEVOID, MID_TL_COMPLEX_COLOR }, \
         { UNO_NAME_CHAR_OVERLINE_HAS_COLOR,             RES_CHRATR_OVERLINE,   
        cppu::UnoType<bool>::get(),       PropertyAttribute::MAYBEVOID, 
MID_TL_HASCOLOR                        }, \
         { UNO_NAME_PARA_GRAPHIC_URL,                    RES_BACKGROUND,        
        cppu::UnoType<OUString>::get(),      PropertyAttribute::MAYBEVOID, 
MID_GRAPHIC_URL                        }, \
         { UNO_NAME_PARA_GRAPHIC,                        RES_BACKGROUND,        
        cppu::UnoType<css::graphic::XGraphic>::get(),      
PropertyAttribute::MAYBEVOID, MID_GRAPHIC                        }, \
@@ -198,6 +202,10 @@
         { UNO_NAME_RIGHT_BORDER_DISTANCE,               RES_BOX,               
        cppu::UnoType<sal_Int32>::get(),         PropertyAttribute::MAYBEVOID, 
RIGHT_BORDER_DISTANCE  | CONVERT_TWIPS }, \
         { UNO_NAME_TOP_BORDER_DISTANCE,                 RES_BOX,               
        cppu::UnoType<sal_Int32>::get(),         PropertyAttribute::MAYBEVOID, 
TOP_BORDER_DISTANCE    | CONVERT_TWIPS }, \
         { UNO_NAME_BOTTOM_BORDER_DISTANCE,              RES_BOX,               
        cppu::UnoType<sal_Int32>::get(),         PropertyAttribute::MAYBEVOID, 
BOTTOM_BORDER_DISTANCE | CONVERT_TWIPS }, \
+        { UNO_NAME_BORDER_LEFT_COMPLEX_COLOR,           RES_BOX,               
        cppu::UnoType<css::util::XComplexColor>::get(),  
PropertyAttribute::MAYBEVOID, MID_BORDER_LEFT_COLOR }, \
+        { UNO_NAME_BORDER_RIGHT_COMPLEX_COLOR,          RES_BOX,               
        cppu::UnoType<css::util::XComplexColor>::get(),  
PropertyAttribute::MAYBEVOID, MID_BORDER_RIGHT_COLOR }, \
+        { UNO_NAME_BORDER_TOP_COMPLEX_COLOR,            RES_BOX,               
        cppu::UnoType<css::util::XComplexColor>::get(),  
PropertyAttribute::MAYBEVOID, MID_BORDER_TOP_COLOR }, \
+        { UNO_NAME_BORDER_BOTTOM_COMPLEX_COLOR,         RES_BOX,               
        cppu::UnoType<css::util::XComplexColor>::get(),  
PropertyAttribute::MAYBEVOID, MID_BORDER_BOTTOM_COLOR }, \
         { UNO_NAME_PARA_USER_DEFINED_ATTRIBUTES,        
RES_UNKNOWNATR_CONTAINER,      
cppu::UnoType<css::container::XNameContainer>::get(),    
PropertyAttribute::MAYBEVOID, 0                                      }, \
         { UNO_NAME_TEXT_USER_DEFINED_ATTRIBUTES,        
RES_TXTATR_UNKNOWN_CONTAINER,  
cppu::UnoType<css::container::XNameContainer>::get(),    
PropertyAttribute::MAYBEVOID, 0                                      }, \
         { UNO_NAME_PARA_SHADOW_FORMAT,                  RES_SHADOW,            
        cppu::UnoType<css::table::ShadowFormat>::get(),     PROPERTY_NONE,      
          CONVERT_TWIPS                          }, \
@@ -273,6 +281,7 @@
     { UNO_NAME_ANCHOR_FRAME, RES_ANCHOR,             
cppu::UnoType<css::text::XTextFrame>::get(),    PropertyAttribute::MAYBEVOID, 
MID_ANCHOR_ANCHORFRAME},             \
     ANCHOR_TYPES_PROPERTY\
     { UNO_NAME_BACK_COLOR, RES_BACKGROUND,            
cppu::UnoType<sal_Int32>::get(),           PROPERTY_NONE ,MID_BACK_COLOR        
},                      \
+    { UNO_NAME_BACKGROUND_COMPLEX_COLOR, RES_BACKGROUND, 
cppu::UnoType<css::util::XComplexColor>::get(), PROPERTY_NONE 
,MID_BACKGROUND_COMPLEX_COLOR }, \
     { UNO_NAME_BACK_COLOR_R_G_B, RES_BACKGROUND,      
cppu::UnoType<sal_Int32>::get(), PROPERTY_NONE ,MID_BACK_COLOR_R_G_B},    \
     { UNO_NAME_BACK_COLOR_TRANSPARENCY, RES_BACKGROUND,      
cppu::UnoType<sal_Int8>::get(), PROPERTY_NONE ,MID_BACK_COLOR_TRANSPARENCY},    
\
     { UNO_NAME_FRAME_INTEROP_GRAB_BAG, RES_FRMATR_GRABBAG, cppu::UnoType< 
cppu::UnoSequenceType<css::beans::PropertyValue> >::get(), PROPERTY_NONE, 0}, \
@@ -327,6 +336,10 @@
     { UNO_NAME_RIGHT_BORDER_DISTANCE, RES_BOX,                
cppu::UnoType<sal_Int32>::get(),   0, RIGHT_BORDER_DISTANCE |CONVERT_TWIPS },   
             \
     { UNO_NAME_TOP_BORDER_DISTANCE, RES_BOX,              
cppu::UnoType<sal_Int32>::get(),   0, TOP_BORDER_DISTANCE   |CONVERT_TWIPS },   
         \
     { UNO_NAME_BOTTOM_BORDER_DISTANCE, RES_BOX,               
cppu::UnoType<sal_Int32>::get(),   0, BOTTOM_BORDER_DISTANCE|CONVERT_TWIPS },   
         \
+    { UNO_NAME_BORDER_LEFT_COMPLEX_COLOR,   RES_BOX, 
cppu::UnoType<css::util::XComplexColor>::get(), 0, MID_BORDER_LEFT_COLOR }, \
+    { UNO_NAME_BORDER_RIGHT_COMPLEX_COLOR,  RES_BOX, 
cppu::UnoType<css::util::XComplexColor>::get(), 0, MID_BORDER_RIGHT_COLOR },  \
+    { UNO_NAME_BORDER_TOP_COMPLEX_COLOR,    RES_BOX, 
cppu::UnoType<css::util::XComplexColor>::get(), 0, MID_BORDER_TOP_COLOR },  \
+    { UNO_NAME_BORDER_BOTTOM_COMPLEX_COLOR, RES_BOX, 
cppu::UnoType<css::util::XComplexColor>::get(), 0, MID_BORDER_BOTTOM_COLOR },  \
     { UNO_LINK_DISPLAY_NAME, FN_PARAM_LINK_DISPLAY_NAME,  
cppu::UnoType<OUString>::get(), PropertyAttribute::READONLY, 0xbf}, \
     { UNO_NAME_USER_DEFINED_ATTRIBUTES, RES_UNKNOWNATR_CONTAINER, 
cppu::UnoType<css::container::XNameContainer>::get(), 
PropertyAttribute::MAYBEVOID, 0 },\
     { UNO_NAME_Z_ORDER, FN_UNO_Z_ORDER,           
cppu::UnoType<sal_Int32>::get(),       PROPERTY_NONE, 0}, \
@@ -363,8 +376,10 @@
                     { UNO_NAME_CHAR_AUTO_KERNING, RES_CHRATR_AUTOKERN  ,  
cppu::UnoType<bool>::get()  ,       PROPERTY_NONE,     0},\
                     { UNO_NAME_CHAR_BACK_TRANSPARENT, RES_CHRATR_BACKGROUND, 
cppu::UnoType<bool>::get(),          PROPERTY_NONE ,MID_GRAPHIC_TRANSPARENT     
  },\
                     { UNO_NAME_CHAR_BACK_COLOR, RES_CHRATR_BACKGROUND,    
cppu::UnoType<sal_Int32>::get(),           PROPERTY_NONE ,MID_BACK_COLOR        
},\
+                    { UNO_NAME_CHAR_BACKGROUND_COMPLEX_COLOR, 
RES_CHRATR_BACKGROUND, cppu::UnoType<css::util::XComplexColor>::get(), 
PROPERTY_NONE, MID_BACKGROUND_COMPLEX_COLOR },\
                     { UNO_NAME_CHAR_HIGHLIGHT, RES_CHRATR_HIGHLIGHT, 
cppu::UnoType<sal_Int32>::get(), PROPERTY_NONE ,MID_BACK_COLOR },\
                     { UNO_NAME_PARA_BACK_COLOR, RES_BACKGROUND,       
cppu::UnoType<sal_Int32>::get(),           PROPERTY_NONE ,MID_BACK_COLOR        
},\
+                    { UNO_NAME_PARA_BACKGROUND_COMPLEX_COLOR, RES_BACKGROUND, 
cppu::UnoType<css::util::XComplexColor>::get(), PROPERTY_NONE , 
MID_BACKGROUND_COMPLEX_COLOR },\
                     { UNO_NAME_PARA_BACK_TRANSPARENT, RES_BACKGROUND,         
cppu::UnoType<bool>::get(),         PROPERTY_NONE ,MID_GRAPHIC_TRANSPARENT      
 },\
                     { UNO_NAME_PARA_GRAPHIC_URL, RES_BACKGROUND,      
cppu::UnoType<OUString>::get(), PROPERTY_NONE ,MID_GRAPHIC_URL    },\
                     { UNO_NAME_PARA_GRAPHIC, RES_BACKGROUND,      
cppu::UnoType<css::graphic::XGraphic>::get(), PROPERTY_NONE ,MID_GRAPHIC    },\
@@ -388,9 +403,11 @@
                     { UNO_NAME_CHAR_UNDERLINE, RES_CHRATR_UNDERLINE ,  
cppu::UnoType<sal_Int16>::get(),      PROPERTY_NONE, MID_TL_STYLE},\
                     { UNO_NAME_CHAR_UNDERLINE_COLOR, RES_CHRATR_UNDERLINE ,  
cppu::UnoType<sal_Int32>::get(),            PROPERTY_NONE, MID_TL_COLOR},\
                     { UNO_NAME_CHAR_UNDERLINE_HAS_COLOR, RES_CHRATR_UNDERLINE 
,  cppu::UnoType<bool>::get(),              PROPERTY_NONE, MID_TL_HASCOLOR},\
+                    { UNO_NAME_CHAR_UNDERLINE_COMPLEX_COLOR, 
RES_CHRATR_UNDERLINE, cppu::UnoType<css::util::XComplexColor>::get(), 
PropertyAttribute::MAYBEVOID, MID_TL_COMPLEX_COLOR }, \
                     { UNO_NAME_CHAR_OVERLINE, RES_CHRATR_OVERLINE ,  
cppu::UnoType<sal_Int16>::get(),      PROPERTY_NONE, MID_TL_STYLE},\
                     { UNO_NAME_CHAR_OVERLINE_COLOR, RES_CHRATR_OVERLINE ,  
cppu::UnoType<sal_Int32>::get(),            PROPERTY_NONE, MID_TL_COLOR},\
                     { UNO_NAME_CHAR_OVERLINE_HAS_COLOR, RES_CHRATR_OVERLINE ,  
cppu::UnoType<bool>::get(),              PROPERTY_NONE, MID_TL_HASCOLOR},\
+                    { UNO_NAME_CHAR_OVERLINE_COMPLEX_COLOR, 
RES_CHRATR_OVERLINE, cppu::UnoType<css::util::XComplexColor>::get(), 
PropertyAttribute::MAYBEVOID, MID_TL_COMPLEX_COLOR }, \
                     { UNO_NAME_PARA_LEFT_MARGIN, RES_LR_SPACE,            
cppu::UnoType<sal_Int32>::get(), PROPERTY_NONE, MID_TXT_LMARGIN|CONVERT_TWIPS},\
                     { UNO_NAME_PARA_RIGHT_MARGIN, RES_LR_SPACE,           
cppu::UnoType<sal_Int32>::get(), PROPERTY_NONE, MID_R_MARGIN|CONVERT_TWIPS},\
                     { UNO_NAME_PARA_LEFT_MARGIN_RELATIVE, RES_LR_SPACE,        
  cppu::UnoType<sal_Int16>::get(), PROPERTY_NONE,        MID_L_REL_MARGIN},\
@@ -443,6 +460,10 @@
                     { UNO_NAME_RIGHT_BORDER_DISTANCE, RES_BOX,                
cppu::UnoType<sal_Int32>::get(),   0, RIGHT_BORDER_DISTANCE |CONVERT_TWIPS },\
                     { UNO_NAME_TOP_BORDER_DISTANCE, RES_BOX,              
cppu::UnoType<sal_Int32>::get(),   0, TOP_BORDER_DISTANCE   |CONVERT_TWIPS },\
                     { UNO_NAME_BOTTOM_BORDER_DISTANCE, RES_BOX,               
cppu::UnoType<sal_Int32>::get(),   0, BOTTOM_BORDER_DISTANCE|CONVERT_TWIPS },\

... etc. - the rest is truncated

Reply via email to