Repository.mk                                  |    1 
 RepositoryModule_build.mk                      |    1 
 RepositoryModule_host.mk                       |    1 
 bin/update_pch                                 |   31 ++---
 cui/Library_cui.mk                             |    1 
 cui/inc/pch/precompiled_cui.hxx                |   14 +-
 cui/source/tabpages/chardlg.cxx                |   12 +-
 cui/source/tabpages/tpcolor.cxx                |   10 +
 docmodel/Library_docmodel.mk                   |   39 ++++++
 docmodel/Makefile                              |    7 +
 docmodel/Module_docmodel.mk                    |   18 +++
 docmodel/README.md                             |    5 
 docmodel/inc/pch/precompiled_docmodel.cxx      |   12 ++
 docmodel/inc/pch/precompiled_docmodel.hxx      |   34 +++++
 docmodel/source/uno/UnoThemeColor.cxx          |   40 ++++++
 editeng/CppunitTest_editeng_core.mk            |    1 
 editeng/Library_editeng.mk                     |    1 
 editeng/inc/pch/precompiled_editeng.hxx        |    7 -
 editeng/source/items/textitem.cxx              |  105 ++++++++++-------
 editeng/source/uno/unotext.cxx                 |   22 +++
 include/docmodel/dllapi.h                      |   21 +++
 include/docmodel/theme/ThemeColor.hxx          |  146 +++++++++++++++++++++++++
 include/docmodel/theme/ThemeColorType.hxx      |   42 +++++++
 include/docmodel/uno/UnoThemeColor.hxx         |   55 +++++++++
 include/editeng/colritem.hxx                   |   54 ---------
 include/svx/ColorSets.hxx                      |   32 -----
 include/svx/xcolit.hxx                         |    9 -
 offapi/UnoApi_offapi.mk                        |    1 
 offapi/com/sun/star/util/XThemeColor.idl       |   26 ++++
 oox/CppunitTest_oox_drawingml.mk               |    1 
 oox/CppunitTest_oox_shape.mk                   |    1 
 oox/CppunitTest_oox_tokenmap.mk                |    1 
 oox/Library_oox.mk                             |    1 
 oox/inc/pch/precompiled_oox.hxx                |   69 ++++++++---
 oox/source/export/ThemeExport.cxx              |   28 ++--
 sd/CppunitTest_sd_uiimpress.mk                 |    1 
 sd/CppunitTest_sd_uimpress.mk                  |    1 
 sd/Library_sd.mk                               |    1 
 sd/inc/pch/precompiled_sd.hxx                  |   68 ++++++++++-
 sd/source/core/stlsheet.cxx                    |   18 ++-
 sd/source/filter/eppt/pptx-epptooxml.cxx       |    2 
 sd/source/ui/func/fuconstr.cxx                 |    4 
 sd/source/ui/view/drtxtob1.cxx                 |   29 ++--
 sd/source/ui/view/drviews2.cxx                 |    7 -
 solenv/gbuild/extensions/pre_MergedLibsList.mk |    1 
 solenv/qa/python/gbuildtojson.py               |    2 
 svx/CppunitTest_svx_removewhichrange.mk        |    1 
 svx/CppunitTest_svx_styles.mk                  |    1 
 svx/CppunitTest_svx_unit.mk                    |    1 
 svx/Library_svxcore.mk                         |    1 
 svx/inc/pch/precompiled_svx.hxx                |   29 ++--
 svx/source/styles/ColorSets.cxx                |   14 +-
 svx/source/table/cell.cxx                      |   19 ++-
 svx/source/unodraw/unoshape.cxx                |   18 ++-
 svx/source/xoutdev/xattr.cxx                   |   47 ++++++--
 sw/CppunitTest_sw_apitests.mk                  |    1 
 sw/CppunitTest_sw_core_draw.mk                 |    1 
 sw/CppunitTest_sw_core_theme.mk                |    1 
 sw/CppunitTest_sw_macros_test.mk               |    1 
 sw/CppunitTest_sw_ooxmlimport.mk               |    1 
 sw/CppunitTest_sw_ooxmlimport2.mk              |    1 
 sw/CppunitTest_sw_tiledrendering.mk            |    1 
 sw/CppunitTest_sw_uwriter.mk                   |    1 
 sw/Library_sw.mk                               |    1 
 sw/layoutwriter_setup.mk                       |    1 
 sw/ooxmlexport_setup.mk                        |    1 
 sw/qa/core/theme/ThemeTest.cxx                 |   20 +--
 sw/source/uibase/sidebar/ThemePanel.cxx        |   13 +-
 sw/uiwriter_setup.mk                           |    1 
 sw/ww8export_setup.mk                          |    1 
 70 files changed, 883 insertions(+), 277 deletions(-)

New commits:
commit bd0f526f2d3e1ffe43a74672485815768eee6e9e
Author:     Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk>
AuthorDate: Wed Dec 28 09:43:46 2022 +0900
Commit:     Tomaž Vajngerl <qui...@gmail.com>
CommitDate: Thu Jan 12 23:15:58 2023 +0000

    introduce docmodel comp., model::ThemeColor, use it in SvxColorItem
    
    Added a new component docmodel, that has the document model types,
    which only depend on other basic components. This is needed so the
    types can be used in every relevant component - xmloff, oox, svx,
    editeng,...
    
    Introduces model::ThemeColor, which is a class used to store the
    theme color data, including transformations (svx::Transformation).
    For UNO use XThemeColor is added, and the implementation UnoThemeColor
    which wraps svx::ThemeColor, so it can be tranported around.
    
    Reactor all the code and tests to accomodate for this change.
    
    Change-Id: I7ce6752cdfaf5e4d3b8e4d90314afa469dd65cfc
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/144847
    Tested-by: Jenkins
    Reviewed-by: Tomaž Vajngerl <qui...@gmail.com>

diff --git a/Repository.mk b/Repository.mk
index ff20165796a5..89eb990b3354 100644
--- a/Repository.mk
+++ b/Repository.mk
@@ -401,6 +401,7 @@ $(eval $(call 
gb_Helper_register_libraries_for_install,OOOLIBS,ooo, \
        deploymentmisc \
        $(if $(filter-out MACOSX WNT,$(OS)),desktopbe1) \
        $(call gb_Helper_optional,SCRIPTING,dlgprov) \
+       docmodel \
        drawinglayercore \
        drawinglayer \
        editeng \
diff --git a/RepositoryModule_build.mk b/RepositoryModule_build.mk
index 2f3a06edd12a..2059c1f2a5a9 100644
--- a/RepositoryModule_build.mk
+++ b/RepositoryModule_build.mk
@@ -63,6 +63,7 @@ $(eval $(call gb_Module_add_moduledirs,cross_toolset,\
                configmgr \
                connectivity \
                cppcanvas \
+               docmodel \
                drawinglayer \
                editeng \
                emfio \
diff --git a/RepositoryModule_host.mk b/RepositoryModule_host.mk
index c0bd27b1c260..2fbee39dc610 100644
--- a/RepositoryModule_host.mk
+++ b/RepositoryModule_host.mk
@@ -74,6 +74,7 @@ $(eval $(call gb_Module_add_moduledirs,libreoffice,\
        cui \
        desktop \
        $(call gb_Helper_optional,DICTIONARIES,dictionaries) \
+       docmodel\
        drawinglayer \
        editeng \
        embeddedobj \
diff --git a/bin/update_pch b/bin/update_pch
index 1cb5cb9979a6..63a39ce51b0b 100755
--- a/bin/update_pch
+++ b/bin/update_pch
@@ -73,6 +73,7 @@ DEFAULTS = \
     'desktop.deploymentgui'             : ( 3, EXCLUDE, EXCLUDE, EXCLUDE), #   
5.7
     'desktop.deploymentmisc'            : ( 3, EXCLUDE, EXCLUDE, EXCLUDE), #   
3.4
     'desktop.sofficeapp'                : ( 6, EXCLUDE, INCLUDE, INCLUDE), #   
6.5
+    'docmodel.docmodel'                 : ( 3, EXCLUDE, EXCLUDE, INCLUDE), #   
3.8
     'drawinglayer.drawinglayer'         : ( 4, EXCLUDE, EXCLUDE, EXCLUDE), #   
7.4
     'editeng.editeng'                   : ( 5, EXCLUDE, INCLUDE, EXCLUDE), #  
13.0
     'forms.frm'                         : ( 2, EXCLUDE, EXCLUDE, EXCLUDE), #  
14.2
@@ -1191,8 +1192,8 @@ class TestMakefileParser(unittest.TestCase):
 
     def test_parse_multiline_eval(self):
         source = """$(eval $(call gb_Library_set_include,sal,\\
-       $$(INCLUDE) \\
-       -I$(SRCDIR)/sal/inc \\
+    $$(INCLUDE) \\
+    -I$(SRCDIR)/sal/inc \\
 ))
 """
         lines = source.split('\n')
@@ -1203,9 +1204,9 @@ class TestMakefileParser(unittest.TestCase):
 
     def test_parse_multiline_eval_with_if(self):
         source = """$(eval $(call gb_Library_add_defs,sal,\\
-       $(if $(filter $(OS),iOS), \\
-               -DNO_CHILD_PROCESSES \\
-       ) \\
+    $(if $(filter $(OS),iOS), \\
+        -DNO_CHILD_PROCESSES \\
+    ) \\
 ))
 """
         lines = source.split('\n')
@@ -1216,7 +1217,7 @@ class TestMakefileParser(unittest.TestCase):
 
     def test_parse_multiline_add_with_if(self):
         source = """$(eval $(call gb_Library_add_exception_objects,sal,\\
-       sal/osl/unx/time \\
+    sal/osl/unx/time \\
         $(if $(filter DESKTOP,$(BUILD_TYPE)), sal/osl/unx/salinit) \\
 ))
 """
@@ -1230,11 +1231,11 @@ class TestMakefileParser(unittest.TestCase):
     def test_parse_if_else(self):
         source = """ifeq ($(OS),MACOSX)
 $(eval $(call gb_Library_add_exception_objects,sal,\\
-       sal/osl/mac/mac \\
+    sal/osl/mac/mac \\
 ))
 else
 $(eval $(call gb_Library_add_exception_objects,sal,\\
-       sal/osl/unx/uunxapi \\
+    sal/osl/unx/uunxapi \\
 ))
 endif
 """
@@ -1251,16 +1252,16 @@ endif
     def test_parse_nested_if(self):
         source = """ifeq ($(OS),MACOSX)
 $(eval $(call gb_Library_add_exception_objects,sal,\\
-       sal/osl/mac/mac \\
+    sal/osl/mac/mac \\
 ))
 else
 $(eval $(call gb_Library_add_exception_objects,sal,\\
-       sal/osl/unx/uunxapi \\
+    sal/osl/unx/uunxapi \\
 ))
 
 ifeq ($(OS),LINUX)
 $(eval $(call gb_Library_add_exception_objects,sal,\\
-       sal/textenc/context \\
+    sal/textenc/context \\
 ))
 endif
 endif
@@ -1280,16 +1281,16 @@ endif
     def test_parse_exclude_system(self):
         source = """ifeq ($(OS),MACOSX)
 $(eval $(call gb_Library_add_exception_objects,sal,\\
-       sal/osl/mac/mac \\
+    sal/osl/mac/mac \\
 ))
 else
 $(eval $(call gb_Library_add_exception_objects,sal,\\
-       sal/osl/unx/uunxapi \\
+    sal/osl/unx/uunxapi \\
 ))
 
 ifeq ($(OS),LINUX)
 $(eval $(call gb_Library_add_exception_objects,sal,\\
-       sal/textenc/context \\
+    sal/textenc/context \\
 ))
 endif
 endif
@@ -1306,7 +1307,7 @@ endif
     def test_parse_filter(self):
         source = """ifneq ($(filter $(OS),MACOSX iOS),)
 $(eval $(call gb_Library_add_exception_objects,sal,\\
-       sal/osl/unx/osxlocale \\
+    sal/osl/unx/osxlocale \\
 ))
 endif
 """
diff --git a/cui/Library_cui.mk b/cui/Library_cui.mk
index 85f779cc964d..03a1577ee66b 100644
--- a/cui/Library_cui.mk
+++ b/cui/Library_cui.mk
@@ -38,6 +38,7 @@ $(eval $(call gb_Library_use_libraries,cui,\
     comphelper \
     cppu \
     cppuhelper \
+    docmodel \
     drawinglayer \
     editeng \
     i18nlangtag \
diff --git a/cui/inc/pch/precompiled_cui.hxx b/cui/inc/pch/precompiled_cui.hxx
index 6553c5874b1a..7b7688c74ad9 100644
--- a/cui/inc/pch/precompiled_cui.hxx
+++ b/cui/inc/pch/precompiled_cui.hxx
@@ -13,7 +13,7 @@
  manual changes will be rewritten by the next run of update_pch.sh (which 
presumably
  also fixes all possible problems, so it's usually better to use it).
 
- Generated on 2022-08-13 18:00:55 using:
+ Generated on 2023-01-10 23:29:57 using:
  ./bin/update_pch cui cui --cutoff=8 --exclude:system --include:module 
--exclude:local
 
  If after updating build fails, use the following command to locate 
conflicting headers:
@@ -53,6 +53,7 @@
 #include <string>
 #include <string_view>
 #include <type_traits>
+#include <typeinfo>
 #include <unordered_map>
 #include <unordered_set>
 #include <utility>
@@ -114,7 +115,6 @@
 #include <vcl/customweld.hxx>
 #include <vcl/devicecoordinate.hxx>
 #include <vcl/dllapi.h>
-#include <comphelper/errcode.hxx>
 #include <vcl/event.hxx>
 #include <vcl/fntstyle.hxx>
 #include <vcl/font.hxx>
@@ -125,6 +125,7 @@
 #include <vcl/image.hxx>
 #include <vcl/imap.hxx>
 #include <vcl/imapobj.hxx>
+#include <vcl/kernarray.hxx>
 #include <vcl/keycod.hxx>
 #include <vcl/keycodes.hxx>
 #include <vcl/mapmod.hxx>
@@ -177,6 +178,7 @@
 #include <basegfx/range/b2drange.hxx>
 #include <basegfx/range/b2drectangle.hxx>
 #include <basegfx/range/basicrange.hxx>
+#include <basegfx/tuple/Size2D.hxx>
 #include <basegfx/tuple/Tuple2D.hxx>
 #include <basegfx/tuple/Tuple3D.hxx>
 #include <basegfx/tuple/b2dtuple.hxx>
@@ -186,6 +188,7 @@
 #include <basegfx/vector/b2dsize.hxx>
 #include <basegfx/vector/b2dvector.hxx>
 #include <basegfx/vector/b2enums.hxx>
+#include <basegfx/vector/b2isize.hxx>
 #include <basegfx/vector/b2ivector.hxx>
 #include <basic/basicdllapi.h>
 #include <basic/sbxdef.hxx>
@@ -261,6 +264,8 @@
 #include <com/sun/star/util/XAccounting.hpp>
 #include <comphelper/compbase.hxx>
 #include <comphelper/comphelperdllapi.h>
+#include <comphelper/diagnose_ex.hxx>
+#include <comphelper/errcode.hxx>
 #include <comphelper/interfacecontainer4.hxx>
 #include <comphelper/lok.hxx>
 #include <comphelper/processfactory.hxx>
@@ -276,6 +281,7 @@
 #include <cppuhelper/queryinterface.hxx>
 #include <cppuhelper/weak.hxx>
 #include <cppuhelper/weakref.hxx>
+#include <docmodel/theme/ThemeColorType.hxx>
 #include <drawinglayer/drawinglayerdllapi.h>
 #include <drawinglayer/geometry/viewinformation2d.hxx>
 #include <drawinglayer/primitive2d/CommonTypes.hxx>
@@ -297,6 +303,7 @@
 #include <editeng/svxfont.hxx>
 #include <i18nlangtag/lang.h>
 #include <i18nlangtag/languagetag.hxx>
+#include <i18nutil/i18nutildllapi.h>
 #include <i18nutil/searchopt.hxx>
 #include <i18nutil/transliteration.hxx>
 #include <o3tl/cow_wrapper.hxx>
@@ -401,7 +408,6 @@
 #include <tools/datetime.hxx>
 #include <tools/debug.hxx>
 #include <tools/degree.hxx>
-#include <comphelper/diagnose_ex.hxx>
 #include <tools/fldunit.hxx>
 #include <tools/fontenum.hxx>
 #include <tools/fract.hxx>
@@ -420,7 +426,6 @@
 #include <tools/toolsdllapi.h>
 #include <tools/urlobj.hxx>
 #include <tools/weakbase.h>
-#include <tools/weakbase.hxx>
 #include <typelib/typeclass.h>
 #include <typelib/typedescription.h>
 #include <typelib/uik.h>
@@ -434,6 +439,7 @@
 #include <unotools/resmgr.hxx>
 #include <unotools/syslocale.hxx>
 #include <unotools/unotoolsdllapi.h>
+#include <unotools/weakref.hxx>
 #endif // PCH_LEVEL >= 3
 #if PCH_LEVEL >= 4
 #include <cfgutil.hxx>
diff --git a/cui/source/tabpages/chardlg.cxx b/cui/source/tabpages/chardlg.cxx
index 3fff1a62352a..194dfd65f830 100644
--- a/cui/source/tabpages/chardlg.cxx
+++ b/cui/source/tabpages/chardlg.cxx
@@ -1596,12 +1596,14 @@ bool SvxCharEffectsPage::FillItemSetColor_Impl( 
SfxItemSet& rSet )
     {
         SvxColorItem aItem( aSelectedColor.m_aColor, nWhich );
 
-        if (aSelectedColor.m_nThemeIndex != -1)
+        // The color was picked from the theme palette, remember its index.
+        model::ThemeColorType eType = 
model::convertToThemeColorType(aSelectedColor.m_nThemeIndex);
+        if (eType != model::ThemeColorType::Unknown)
         {
-            // The color was picked from the theme palette, remember its index.
-            aItem.GetThemeColor().SetThemeIndex(aSelectedColor.m_nThemeIndex);
-            aItem.GetThemeColor().SetLumMod(aSelectedColor.m_nLumMod);
-            aItem.GetThemeColor().SetLumOff(aSelectedColor.m_nLumOff);
+            aItem.GetThemeColor().setType(eType);
+            aItem.GetThemeColor().clearTransformations();
+            
aItem.GetThemeColor().addTransformation({model::TransformationType::LumMod, 
aSelectedColor.m_nLumMod});
+            
aItem.GetThemeColor().addTransformation({model::TransformationType::LumOff, 
aSelectedColor.m_nLumOff});
         }
 
         rSet.Put(aItem);
diff --git a/cui/source/tabpages/tpcolor.cxx b/cui/source/tabpages/tpcolor.cxx
index 7790ff60a8c2..9c0b5b457525 100644
--- a/cui/source/tabpages/tpcolor.cxx
+++ b/cui/source/tabpages/tpcolor.cxx
@@ -245,17 +245,19 @@ bool SvxColorTabPage::FillItemSet( SfxItemSet* rSet )
        sColorName = "#" + 
aCurrentColor.m_aColor.AsRGBHexString().toAsciiUpperCase();
     maPaletteManager.AddRecentColor( aCurrentColor.m_aColor, sColorName );
     XFillColorItem aColorItem( sColorName, aCurrentColor.m_aColor );
-    if (aCurrentColor.m_nThemeIndex != -1)
+    model::ThemeColorType eType = 
model::convertToThemeColorType(aCurrentColor.m_nThemeIndex);
+    if (eType != model::ThemeColorType::Unknown)
     {
-        aColorItem.GetThemeColor().SetThemeIndex(aCurrentColor.m_nThemeIndex);
+        aColorItem.GetThemeColor().setType(eType);
     }
+    aColorItem.GetThemeColor().clearTransformations();
     if (aCurrentColor.m_nLumMod != 10000)
     {
-        aColorItem.GetThemeColor().SetLumMod(aCurrentColor.m_nLumMod);
+        
aColorItem.GetThemeColor().addTransformation({model::TransformationType::LumMod,
 aCurrentColor.m_nLumMod});
     }
     if (aCurrentColor.m_nLumOff != 0)
     {
-        aColorItem.GetThemeColor().SetLumOff(aCurrentColor.m_nLumOff);
+        
aColorItem.GetThemeColor().addTransformation({model::TransformationType::LumOff,
 aCurrentColor.m_nLumOff});
     }
     rSet->Put( aColorItem );
     rSet->Put( XFillStyleItem( drawing::FillStyle_SOLID ) );
diff --git a/docmodel/Library_docmodel.mk b/docmodel/Library_docmodel.mk
new file mode 100644
index 000000000000..3e0d28dfda28
--- /dev/null
+++ b/docmodel/Library_docmodel.mk
@@ -0,0 +1,39 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t; fill-column: 
100 -*-
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+
+$(eval $(call gb_Library_Library,docmodel))
+
+$(eval $(call gb_Library_add_exception_objects,docmodel,\
+    docmodel/source/uno/UnoThemeColor \
+))
+
+$(eval $(call gb_Library_set_include,docmodel,\
+    $$(INCLUDE) \
+    -I$(SRCDIR)/docmodel/inc \
+))
+
+$(eval $(call gb_Library_add_defs,docmodel,\
+    -DDOCMODEL_DLLIMPLEMENTATION \
+))
+
+$(eval $(call 
gb_Library_set_precompiled_header,docmodel,docmodel/inc/pch/precompiled_docmodel))
+
+$(eval $(call gb_Library_use_sdk_api,docmodel))
+
+$(eval $(call gb_Library_use_libraries,docmodel,\
+    basegfx \
+    comphelper \
+    cppuhelper \
+    cppu \
+    sal \
+    vcl \
+    tl \
+))
+
+# vim: set noet sw=4 ts=4:
diff --git a/docmodel/Makefile b/docmodel/Makefile
new file mode 100644
index 000000000000..ccb1c85a04da
--- /dev/null
+++ b/docmodel/Makefile
@@ -0,0 +1,7 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+
+module_directory:=$(dir $(realpath $(firstword $(MAKEFILE_LIST))))
+
+include $(module_directory)/../solenv/gbuild/partial_build.mk
+
+# vim: set noet sw=4 ts=4:
diff --git a/docmodel/Module_docmodel.mk b/docmodel/Module_docmodel.mk
new file mode 100644
index 000000000000..7e55ff74ad60
--- /dev/null
+++ b/docmodel/Module_docmodel.mk
@@ -0,0 +1,18 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+
+$(eval $(call gb_Module_Module,docmodel))
+
+$(eval $(call gb_Module_add_targets,docmodel,\
+    Library_docmodel \
+))
+
+
+
+# vim: set noet sw=4 ts=4:
diff --git a/docmodel/README.md b/docmodel/README.md
new file mode 100644
index 000000000000..c8d08b133b1e
--- /dev/null
+++ b/docmodel/README.md
@@ -0,0 +1,5 @@
+# Document Model Types and Objects
+
+Contains document model types, that don't require many depenencies except
+basic types found in basegfx and tools. The purpose of this types and
+objects is to be available in all common components.
diff --git a/docmodel/inc/pch/precompiled_docmodel.cxx 
b/docmodel/inc/pch/precompiled_docmodel.cxx
new file mode 100644
index 000000000000..f8a84e17d6c3
--- /dev/null
+++ b/docmodel/inc/pch/precompiled_docmodel.cxx
@@ -0,0 +1,12 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include "precompiled_docmodel.hxx"
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/docmodel/inc/pch/precompiled_docmodel.hxx 
b/docmodel/inc/pch/precompiled_docmodel.hxx
new file mode 100644
index 000000000000..1942b8737a17
--- /dev/null
+++ b/docmodel/inc/pch/precompiled_docmodel.hxx
@@ -0,0 +1,34 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+/*
+ This file has been autogenerated by update_pch.sh. It is possible to edit it
+ manually (such as when an include file has been moved/renamed/removed). All 
such
+ manual changes will be rewritten by the next run of update_pch.sh (which 
presumably
+ also fixes all possible problems, so it's usually better to use it).
+
+ Generated on 2023-01-10 23:20:14 using:
+ bin/update_pch docmodel docmodel --cutoff=3 --exclude:system --exclude:module 
--include:local
+
+ If after updating build fails, use the following command to locate 
conflicting headers:
+ ./bin/update_pch_bisect ./docmodel/inc/pch/precompiled_docmodel.hxx "make 
docmodel.build" --find-conflicts
+*/
+
+#include <sal/config.h>
+#if PCH_LEVEL >= 1
+#endif // PCH_LEVEL >= 1
+#if PCH_LEVEL >= 2
+#include <sal/types.h>
+#endif // PCH_LEVEL >= 2
+#if PCH_LEVEL >= 3
+#endif // PCH_LEVEL >= 3
+#if PCH_LEVEL >= 4
+#endif // PCH_LEVEL >= 4
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/docmodel/source/uno/UnoThemeColor.cxx 
b/docmodel/source/uno/UnoThemeColor.cxx
new file mode 100644
index 000000000000..f6374b54933b
--- /dev/null
+++ b/docmodel/source/uno/UnoThemeColor.cxx
@@ -0,0 +1,40 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ */
+
+#include <docmodel/uno/UnoThemeColor.hxx>
+#include <cppuhelper/queryinterface.hxx>
+
+using namespace css;
+
+// css::lang::XUnoTunnel
+UNO3_GETIMPLEMENTATION_IMPL(UnoThemeColor);
+
+sal_Int16 UnoThemeColor::getType() { return 
sal_uInt16(maThemeColor.getType()); }
+
+namespace model::theme
+{
+uno::Reference<util::XThemeColor> createXThemeColor(model::ThemeColor const& 
rThemeColor)
+{
+    return new UnoThemeColor(rThemeColor);
+}
+
+void setFromXThemeColor(model::ThemeColor& rThemeColor,
+                        uno::Reference<util::XThemeColor> const& rxColorTheme)
+{
+    UnoThemeColor* pUnoThemeColor = 
comphelper::getFromUnoTunnel<UnoThemeColor>(rxColorTheme);
+    if (pUnoThemeColor)
+    {
+        rThemeColor = pUnoThemeColor->getThemeColor();
+    }
+}
+
+} // end model::theme
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/editeng/CppunitTest_editeng_core.mk 
b/editeng/CppunitTest_editeng_core.mk
index 3b3a999e8fa0..9b79048b637a 100644
--- a/editeng/CppunitTest_editeng_core.mk
+++ b/editeng/CppunitTest_editeng_core.mk
@@ -22,6 +22,7 @@ $(eval $(call gb_CppunitTest_use_libraries,editeng_core, \
     comphelper \
     cppu \
     cppuhelper \
+    docmodel \
     i18nlangtag \
     i18nutil \
     lng \
diff --git a/editeng/Library_editeng.mk b/editeng/Library_editeng.mk
index 6602793e3e02..7f7f3581b62f 100644
--- a/editeng/Library_editeng.mk
+++ b/editeng/Library_editeng.mk
@@ -138,6 +138,7 @@ $(eval $(call gb_Library_add_exception_objects,editeng,\
 $(eval $(call gb_Library_use_libraries,editeng,\
     xo \
     basegfx \
+    docmodel \
     lng \
     svt \
     tk \
diff --git a/editeng/inc/pch/precompiled_editeng.hxx 
b/editeng/inc/pch/precompiled_editeng.hxx
index 8472a893b5a1..3f5d71018ac5 100644
--- a/editeng/inc/pch/precompiled_editeng.hxx
+++ b/editeng/inc/pch/precompiled_editeng.hxx
@@ -13,7 +13,7 @@
  manual changes will be rewritten by the next run of update_pch.sh (which 
presumably
  also fixes all possible problems, so it's usually better to use it).
 
- Generated on 2022-09-03 23:10:43 using:
+ Generated on 2023-01-10 23:29:32 using:
  ./bin/update_pch editeng editeng --cutoff=5 --exclude:system --include:module 
--exclude:local
 
  If after updating build fails, use the following command to locate 
conflicting headers:
@@ -107,7 +107,6 @@
 #include <vcl/bitmapex.hxx>
 #include <vcl/checksum.hxx>
 #include <vcl/dllapi.h>
-#include <comphelper/errcode.hxx>
 #include <vcl/font.hxx>
 #include <vcl/gfxlink.hxx>
 #include <vcl/graph.hxx>
@@ -128,6 +127,7 @@
 #if PCH_LEVEL >= 3
 #include <basegfx/basegfxdllapi.h>
 #include <basegfx/color/bcolor.hxx>
+#include <basegfx/matrix/b2dhommatrix.hxx>
 #include <basegfx/numeric/ftools.hxx>
 #include <basegfx/point/b2dpoint.hxx>
 #include <basegfx/point/b2ipoint.hxx>
@@ -136,6 +136,7 @@
 #include <basegfx/range/Range2D.hxx>
 #include <basegfx/range/b2drange.hxx>
 #include <basegfx/range/basicrange.hxx>
+#include <basegfx/tuple/Size2D.hxx>
 #include <basegfx/tuple/Tuple2D.hxx>
 #include <basegfx/tuple/Tuple3D.hxx>
 #include <basegfx/tuple/b2dtuple.hxx>
@@ -145,6 +146,7 @@
 #include <basegfx/vector/b2dsize.hxx>
 #include <basegfx/vector/b2dvector.hxx>
 #include <basegfx/vector/b2enums.hxx>
+#include <basegfx/vector/b2isize.hxx>
 #include <basegfx/vector/b2ivector.hxx>
 #include <com/sun/star/awt/Key.hpp>
 #include <com/sun/star/awt/KeyGroup.hpp>
@@ -190,6 +192,7 @@
 #include <com/sun/star/xml/sax/XFastTokenHandler.hpp>
 #include <comphelper/comphelperdllapi.h>
 #include <comphelper/diagnose_ex.hxx>
+#include <comphelper/errcode.hxx>
 #include <comphelper/processfactory.hxx>
 #include <comphelper/string.hxx>
 #include <cppu/cppudllapi.h>
diff --git a/editeng/source/items/textitem.cxx 
b/editeng/source/items/textitem.cxx
index 30b780f1b855..bf6017cdcf6d 100644
--- a/editeng/source/items/textitem.cxx
+++ b/editeng/source/items/textitem.cxx
@@ -1353,38 +1353,6 @@ bool SvxContourItem::GetPresentation
     return true;
 }
 
-SvxThemeColor::SvxThemeColor()
-    : maThemeIndex(-1)
-    , mnLumMod(10000)
-    , mnLumOff(0)
-    , mnTintOrShade(0)
-{
-}
-
-bool SvxThemeColor::operator==(const SvxThemeColor& rThemeColor) const
-{
-    return maThemeIndex == rThemeColor.maThemeIndex &&
-        mnLumMod == rThemeColor.mnLumMod &&
-        mnLumOff == rThemeColor.mnLumOff &&
-        mnTintOrShade  == rThemeColor.mnTintOrShade;
-}
-
-void SvxThemeColor::dumpAsXml(xmlTextWriterPtr pWriter) const
-{
-    (void)xmlTextWriterStartElement(pWriter, BAD_CAST("SvxThemeColor"));
-
-    (void)xmlTextWriterWriteAttribute(pWriter, BAD_CAST("theme-index"),
-                                      
BAD_CAST(OString::number(maThemeIndex).getStr()));
-    (void)xmlTextWriterWriteAttribute(pWriter, BAD_CAST("lum-mod"),
-                                      
BAD_CAST(OString::number(mnLumMod).getStr()));
-    (void)xmlTextWriterWriteAttribute(pWriter, BAD_CAST("lum-off"),
-                                      
BAD_CAST(OString::number(mnLumOff).getStr()));
-    (void)xmlTextWriterWriteAttribute(pWriter, BAD_CAST("tint-or-shade"),
-                                      
BAD_CAST(OString::number(mnTintOrShade).getStr()));
-
-    (void)xmlTextWriterEndElement(pWriter);
-}
-
 // class SvxColorItem ----------------------------------------------------
 SvxColorItem::SvxColorItem( const sal_uInt16 nId ) :
     SfxPoolItem(nId),
@@ -1429,22 +1397,42 @@ bool SvxColorItem::QueryValue( uno::Any& rVal, 
sal_uInt8 nMemberId ) const
         }
         case MID_COLOR_THEME_INDEX:
         {
-            rVal <<= maThemeColor.GetThemeIndex();
+            rVal <<= sal_Int16(maThemeColor.getType());
             break;
         }
         case MID_COLOR_TINT_OR_SHADE:
         {
-            rVal <<= maThemeColor.GetTintOrShade();
+            sal_Int16 nValue = 0;
+            for (auto const& rTransform : maThemeColor.getTransformations())
+            {
+                if (rTransform.meType == model::TransformationType::Tint)
+                    nValue = rTransform.mnValue;
+                else if (rTransform.meType == model::TransformationType::Shade)
+                    nValue = -rTransform.mnValue;
+            }
+            rVal <<= nValue;
             break;
         }
         case MID_COLOR_LUM_MOD:
         {
-            rVal <<= maThemeColor.GetLumMod();
+            sal_Int16 nValue = 10000;
+            for (auto const& rTransform : maThemeColor.getTransformations())
+            {
+                if (rTransform.meType == model::TransformationType::LumMod)
+                    nValue = rTransform.mnValue;
+            }
+            rVal <<= nValue;
             break;
         }
         case MID_COLOR_LUM_OFF:
         {
-            rVal <<= maThemeColor.GetLumOff();
+            sal_Int16 nValue = 0;
+            for (auto const& rTransform : maThemeColor.getTransformations())
+            {
+                if (rTransform.meType == model::TransformationType::LumOff)
+                    nValue = rTransform.mnValue;
+            }
+            rVal <<= nValue;
             break;
         }
         default:
@@ -1482,31 +1470,43 @@ bool SvxColorItem::PutValue( const uno::Any& rVal, 
sal_uInt8 nMemberId )
             sal_Int16 nIndex = -1;
             if (!(rVal >>= nIndex))
                 return false;
-            maThemeColor.SetThemeIndex(nIndex);
+            maThemeColor.setType(model::convertToThemeColorType(nIndex));
         }
         break;
         case MID_COLOR_TINT_OR_SHADE:
         {
-            sal_Int16 nTintShade = -1;
+            sal_Int16 nTintShade = 0;
             if (!(rVal >>= nTintShade))
                 return false;
-            maThemeColor.SetTintOrShade(nTintShade);
+
+            
maThemeColor.removeTransformations(model::TransformationType::Tint);
+            
maThemeColor.removeTransformations(model::TransformationType::Shade);
+
+            if (nTintShade > 0)
+                
maThemeColor.addTransformation({model::TransformationType::Tint, nTintShade});
+            else if (nTintShade < 0)
+            {
+                sal_Int16 nShade = o3tl::narrowing<sal_Int16>(-nTintShade);
+                
maThemeColor.addTransformation({model::TransformationType::Shade, nShade});
+            }
         }
         break;
         case MID_COLOR_LUM_MOD:
         {
-            sal_Int16 nLumMod = -1;
+            sal_Int16 nLumMod = 10000;
             if (!(rVal >>= nLumMod))
                 return false;
-            maThemeColor.SetLumMod(nLumMod);
+            
maThemeColor.removeTransformations(model::TransformationType::LumMod);
+            maThemeColor.addTransformation({model::TransformationType::LumMod, 
nLumMod});
         }
         break;
         case MID_COLOR_LUM_OFF:
         {
-            sal_Int16 nLumOff = -1;
+            sal_Int16 nLumOff = 0;
             if (!(rVal >>= nLumOff))
                 return false;
-            maThemeColor.SetLumOff(nLumOff);
+            
maThemeColor.removeTransformations(model::TransformationType::LumOff);
+            maThemeColor.addTransformation({model::TransformationType::LumOff, 
nLumOff});
         }
         break;
         default:
@@ -1549,12 +1549,25 @@ void SvxColorItem::dumpAsXml(xmlTextWriterPtr pWriter) 
const
     GetPresentation( SfxItemPresentation::Complete, MapUnit::Map100thMM, 
MapUnit::Map100thMM, aStr, aIntlWrapper);
     (void)xmlTextWriterWriteAttribute(pWriter, BAD_CAST("presentation"), 
BAD_CAST(OUStringToOString(aStr, RTL_TEXTENCODING_UTF8).getStr()));
 
-    maThemeColor.dumpAsXml(pWriter);
+    (void)xmlTextWriterStartElement(pWriter, BAD_CAST("theme-color"));
 
-    (void)xmlTextWriterEndElement(pWriter);
-}
+    (void)xmlTextWriterWriteAttribute(pWriter, BAD_CAST("theme-index"),
+                                      
BAD_CAST(OString::number(sal_Int16(maThemeColor.getType())).getStr()));
+
+    for (auto const& rTransform : maThemeColor.getTransformations())
+    {
+        (void)xmlTextWriterStartElement(pWriter, BAD_CAST("transformation"));
+        (void)xmlTextWriterWriteAttribute(pWriter, BAD_CAST("type"),
+                                      
BAD_CAST(OString::number(sal_Int16(rTransform.meType)).getStr()));
+        (void)xmlTextWriterWriteAttribute(pWriter, BAD_CAST("value"),
+                                      
BAD_CAST(OString::number(rTransform.mnValue).getStr()));
+        (void)xmlTextWriterEndElement(pWriter);
+    }
 
+    (void)xmlTextWriterEndElement(pWriter);
 
+    (void)xmlTextWriterEndElement(pWriter);
+}
 
 void SvxColorItem::SetValue( const Color& rNewCol )
 {
diff --git a/editeng/source/uno/unotext.cxx b/editeng/source/uno/unotext.cxx
index 8d6b2aa9ec53..e5877a7d2e5a 100644
--- a/editeng/source/uno/unotext.cxx
+++ b/editeng/source/uno/unotext.cxx
@@ -1142,23 +1142,39 @@ bool SvxUnoTextRangeBase::_getOnePropertyStates(const 
SfxItemSet* pSet, const Sf
             switch (pMap->nMemberId)
             {
                 case MID_COLOR_THEME_INDEX:
-                    if (pColor->GetThemeColor().GetThemeIndex() == -1)
+                    if (pColor->GetThemeColor().getType() == 
model::ThemeColorType::Unknown)
                     {
                         eItemState = SfxItemState::DEFAULT;
                     }
                     break;
                 case MID_COLOR_LUM_MOD:
-                    if (pColor->GetThemeColor().GetLumMod() == 10000)
+                {
+                    sal_Int16 nLumMod = 10000;
+                    for (auto const& rTransform : 
pColor->GetThemeColor().getTransformations())
+                    {
+                        if (rTransform.meType == 
model::TransformationType::LumMod)
+                            nLumMod = rTransform.mnValue;
+                    }
+                    if (nLumMod == 10000)
                     {
                         eItemState = SfxItemState::DEFAULT;
                     }
                     break;
+                }
                 case MID_COLOR_LUM_OFF:
-                    if (pColor->GetThemeColor().GetLumOff() == 0)
+                {
+                    sal_Int16 nLumOff = 0;
+                    for (auto const& rTransform : 
pColor->GetThemeColor().getTransformations())
+                    {
+                        if (rTransform.meType == 
model::TransformationType::LumOff)
+                            nLumOff = rTransform.mnValue;
+                    }
+                    if (nLumOff == 0)
                     {
                         eItemState = SfxItemState::DEFAULT;
                     }
                     break;
+                }
             }
         }
 
diff --git a/include/docmodel/dllapi.h b/include/docmodel/dllapi.h
new file mode 100644
index 000000000000..f90b7cc4c08e
--- /dev/null
+++ b/include/docmodel/dllapi.h
@@ -0,0 +1,21 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#pragma once
+
+#include <sal/types.h>
+
+#if defined(DOCMODEL_DLLIMPLEMENTATION)
+#define DOCMODEL_DLLPUBLIC SAL_DLLPUBLIC_EXPORT
+#else
+#define DOCMODEL_DLLPUBLIC SAL_DLLPUBLIC_IMPORT
+#endif
+#define DOCMODEL_DLLPRIVATE SAL_DLLPRIVATE
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/include/docmodel/theme/ThemeColor.hxx 
b/include/docmodel/theme/ThemeColor.hxx
new file mode 100644
index 000000000000..2069594713d8
--- /dev/null
+++ b/include/docmodel/theme/ThemeColor.hxx
@@ -0,0 +1,146 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ */
+
+#pragma once
+
+#include <docmodel/dllapi.h>
+#include <vector>
+#include <docmodel/theme/ThemeColorType.hxx>
+#include <tools/color.hxx>
+
+namespace model
+{
+/** Color transfomation type */
+enum class TransformationType
+{
+    Undefined,
+    Red,
+    RedMod,
+    RedOff,
+    Green,
+    GreenMod,
+    GreenOff,
+    Blue,
+    BlueMod,
+    BlueOff,
+    Alpha,
+    AlphaMod,
+    AlphaOff,
+    Hue,
+    HueMod,
+    HueOff,
+    Sat,
+    SatMod,
+    SatOff,
+    Lum,
+    LumMod,
+    LumOff,
+    Shade,
+    Tint,
+    Gray,
+    Comp,
+    Inv,
+    Gamma,
+    InvGamma
+};
+
+/** Definition of a color transformation.
+ *
+ * This just defines how a color should be transformed (changed). The
+ * type defines what kind of transformation should occur and the value
+ * defines by how much.
+ */
+struct DOCMODEL_DLLPUBLIC Transformation
+{
+    TransformationType meType = TransformationType::Undefined;
+    sal_Int16 mnValue = 0; /// percentage value -10000 to +10000
+
+    bool operator==(const Transformation& rTransformation) const
+    {
+        return meType == rTransformation.meType && mnValue == 
rTransformation.mnValue;
+    }
+};
+
+/** Definition of a theme color
+ *
+ * A theme color is defined by the type of theme color and a set of
+ * transformations that in addition manipulate the resulting color
+ * (i.e. tints, shades).
+ */
+class DOCMODEL_DLLPUBLIC ThemeColor
+{
+    ThemeColorType meType = ThemeColorType::Unknown;
+    std::vector<Transformation> maTransformations;
+
+public:
+    ThemeColor() = default;
+
+    ThemeColorType getType() const { return meType; }
+
+    void setType(ThemeColorType eType) { meType = eType; }
+
+    void clearTransformations() { maTransformations.clear(); }
+
+    void addTransformation(Transformation const& rTransform)
+    {
+        maTransformations.push_back(rTransform);
+    }
+
+    void removeTransformations(TransformationType eType)
+    {
+        maTransformations.erase(std::remove_if(maTransformations.begin(), 
maTransformations.end(),
+                                               [eType](Transformation const& 
rTransform) {
+                                                   return rTransform.meType == 
eType;
+                                               }),
+                                maTransformations.end());
+    }
+
+    std::vector<Transformation> const& getTransformations() const { return 
maTransformations; }
+
+    /** Applies the defined trasformations to the input color */
+    Color applyTransformations(Color const& rColor) const
+    {
+        Color aColor(rColor);
+
+        for (auto const& rTransform : maTransformations)
+        {
+            switch (rTransform.meType)
+            {
+                case TransformationType::Tint:
+                    aColor.ApplyTintOrShade(rTransform.mnValue);
+                    break;
+                case TransformationType::Shade:
+                    aColor.ApplyTintOrShade(-rTransform.mnValue);
+                    break;
+                case TransformationType::LumMod:
+                    aColor.ApplyLumModOff(rTransform.mnValue, 0);
+                    break;
+                case TransformationType::LumOff:
+                    aColor.ApplyLumModOff(10000, rTransform.mnValue);
+                    break;
+                default:
+                    break;
+            }
+        }
+        return aColor;
+    }
+
+    bool operator==(const ThemeColor& rThemeColor) const
+    {
+        return meType == rThemeColor.meType
+               && maTransformations.size() == 
rThemeColor.maTransformations.size()
+               && std::equal(maTransformations.begin(), 
maTransformations.end(),
+                             rThemeColor.maTransformations.begin());
+    }
+};
+
+} // end of namespace model
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/include/docmodel/theme/ThemeColorType.hxx 
b/include/docmodel/theme/ThemeColorType.hxx
new file mode 100644
index 000000000000..a8ed9a56a6dc
--- /dev/null
+++ b/include/docmodel/theme/ThemeColorType.hxx
@@ -0,0 +1,42 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ */
+
+#pragma once
+
+namespace model
+{
+/// Offsets into the color list of a theme.
+enum class ThemeColorType : sal_Int32
+{
+    Unknown = -1,
+    Dark1 = 0,
+    Light1 = 1,
+    Dark2 = 2,
+    Light2 = 3,
+    Accent1 = 4,
+    Accent2 = 5,
+    Accent3 = 6,
+    Accent4 = 7,
+    Accent5 = 8,
+    Accent6 = 9,
+    Hyperlink = 10,
+    FollowedHyperlink = 11,
+    LAST = FollowedHyperlink
+};
+
+constexpr ThemeColorType convertToThemeColorType(sal_Int32 nIndex)
+{
+    if (nIndex < 0 || nIndex > 11)
+        return ThemeColorType::Unknown;
+    return static_cast<ThemeColorType>(nIndex);
+}
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/include/docmodel/uno/UnoThemeColor.hxx 
b/include/docmodel/uno/UnoThemeColor.hxx
new file mode 100644
index 000000000000..50063ab981dd
--- /dev/null
+++ b/include/docmodel/uno/UnoThemeColor.hxx
@@ -0,0 +1,55 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#pragma once
+
+#include <cppuhelper/implbase.hxx>
+#include <cppuhelper/supportsservice.hxx>
+#include <comphelper/servicehelper.hxx>
+
+#include <com/sun/star/util/Color.hpp>
+#include <com/sun/star/util/XThemeColor.hpp>
+#include <com/sun/star/lang/XUnoTunnel.hpp>
+#include <com/sun/star/uno/XComponentContext.hpp>
+
+#include <utility>
+#include <docmodel/dllapi.h>
+#include <docmodel/theme/ThemeColor.hxx>
+
+class DOCMODEL_DLLPUBLIC UnoThemeColor final
+    : public cppu::WeakImplHelper<css::util::XThemeColor, 
css::lang::XUnoTunnel>
+{
+private:
+    model::ThemeColor maThemeColor;
+
+public:
+    UnoThemeColor(model::ThemeColor const& rThemeColor)
+        : maThemeColor(rThemeColor)
+    {
+    }
+
+    model::ThemeColor const& getThemeColor() const { return maThemeColor; }
+
+    // XThemeColor
+    sal_Int16 SAL_CALL getType() override;
+
+    UNO3_GETIMPLEMENTATION_DECL(UnoThemeColor)
+};
+
+namespace model::theme
+{
+DOCMODEL_DLLPUBLIC css::uno::Reference<css::util::XThemeColor>
+createXThemeColor(model::ThemeColor const& rThemeColor);
+
+DOCMODEL_DLLPUBLIC void
+setFromXThemeColor(model::ThemeColor& rThemeColor,
+                   css::uno::Reference<css::util::XThemeColor> const& 
rxThemeColor);
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/include/editeng/colritem.hxx b/include/editeng/colritem.hxx
index 05a7183c8582..d4090eb9e7eb 100644
--- a/include/editeng/colritem.hxx
+++ b/include/editeng/colritem.hxx
@@ -22,63 +22,17 @@
 #include <svl/poolitem.hxx>
 #include <tools/color.hxx>
 #include <editeng/editengdllapi.h>
+#include <docmodel/theme/ThemeColor.hxx>
 
 #define VERSION_USEAUTOCOLOR    1
 
-/// Represents theme metadata for a (tools) Color.
-class EDITENG_DLLPUBLIC SvxThemeColor
-{
-    sal_Int16 maThemeIndex;
-    /// Luminance Modulation: 100th percentage, defaults to 100%.
-    sal_Int16 mnLumMod;
-    /// Luminance Offset: 100th percentage, defaults to 0%.
-    sal_Int16 mnLumOff;
-
-    sal_Int16 mnTintOrShade;
-
-public:
-    explicit SvxThemeColor();
-    bool operator==(const SvxThemeColor& rThemeColor) const;
-
-    sal_Int16 GetThemeIndex() const
-    {
-        return maThemeIndex;
-    }
-
-    void SetThemeIndex(sal_Int16 nIndex)
-    {
-        maThemeIndex = nIndex;
-
-    }
-    void SetLumMod(sal_Int16 nLumMod) { mnLumMod = nLumMod; }
-
-    sal_Int16 GetLumMod() const { return mnLumMod; }
-
-    void SetLumOff(sal_Int16 nLumOff) { mnLumOff = nLumOff; }
-
-    sal_Int16 GetLumOff() const { return mnLumOff; }
-
-    sal_Int16 GetTintOrShade() const
-    {
-        return mnTintOrShade;
-    }
-
-    void SetTintOrShade(sal_Int16 nTintOrShade)
-    {
-        mnTintOrShade = nTintOrShade;
-    }
-
-    void dumpAsXml(xmlTextWriterPtr pWriter) const;
-};
-
 /** SvxColorItem item describes a color.
 */
 class EDITENG_DLLPUBLIC SvxColorItem final : public SfxPoolItem
 {
 private:
     Color mColor;
-    SvxThemeColor maThemeColor;
-
+    model::ThemeColor maThemeColor;
 
 public:
     static SfxPoolItem* CreateDefault();
@@ -105,9 +59,9 @@ public:
     }
     void SetValue(const Color& rNewColor);
 
-    SvxThemeColor& GetThemeColor() { return maThemeColor; }
+    model::ThemeColor& GetThemeColor() { return maThemeColor; }
 
-    const SvxThemeColor& GetThemeColor() const { return maThemeColor; }
+    const model::ThemeColor& GetThemeColor() const { return maThemeColor; }
 
     void dumpAsXml(xmlTextWriterPtr pWriter) const override;
 };
diff --git a/include/svx/ColorSets.hxx b/include/svx/ColorSets.hxx
index 115b7448a8a0..a5d41cc05a57 100644
--- a/include/svx/ColorSets.hxx
+++ b/include/svx/ColorSets.hxx
@@ -18,6 +18,7 @@
 #include <sal/log.hxx>
 #include <sal/types.h>
 #include <svx/svxdllapi.h>
+#include <docmodel/theme/ThemeColorType.hxx>
 #include <tools/color.hxx>
 
 typedef struct _xmlTextWriter* xmlTextWriterPtr;
@@ -26,31 +27,6 @@ class SdrPage;
 namespace svx
 {
 
-/// Offsets into the color list of a theme.
-enum class ThemeColorType : sal_Int32
-{
-    Unknown = -1,
-    Dark1 = 0,
-    Light1 = 1,
-    Dark2 = 2,
-    Light2 = 3,
-    Accent1 = 4,
-    Accent2 = 5,
-    Accent3 = 6,
-    Accent4 = 7,
-    Accent5 = 8,
-    Accent6 = 9,
-    Hyperlink = 10,
-    FollowedHyperlink = 11,
-    LAST = FollowedHyperlink
-};
-
-constexpr ThemeColorType convertToThemeColorType(sal_Int32 nIndex)
-{
-    if (nIndex < 0 || nIndex > 11)
-        return ThemeColorType::Unknown;
-    return static_cast<ThemeColorType>(nIndex);
-}
 
 class SVXCORE_DLLPUBLIC ColorSet
 {
@@ -67,9 +43,9 @@ public:
         return maName;
     }
 
-    Color getColor(ThemeColorType nType) const
+    Color getColor(model::ThemeColorType nType) const
     {
-        if (nType == ThemeColorType::Unknown)
+        if (nType == model::ThemeColorType::Unknown)
         {
             SAL_WARN("svx", "ColorSet::getColor with ThemeColorType::Unknown");
             return COL_AUTO;
@@ -279,7 +255,7 @@ public:
 
     std::vector<Color> GetColors() const;
 
-    Color GetColor(ThemeColorType eType) const;
+    Color GetColor(model::ThemeColorType eType) const;
 };
 
 } // end of namespace svx
diff --git a/include/svx/xcolit.hxx b/include/svx/xcolit.hxx
index 5b882f9a97a9..3ece0ef3b52b 100644
--- a/include/svx/xcolit.hxx
+++ b/include/svx/xcolit.hxx
@@ -22,18 +22,17 @@
 
 #include <tools/color.hxx>
 #include <editeng/colritem.hxx>
+#include <docmodel/theme/ThemeColor.hxx>
 
 #include <svx/svxdllapi.h>
 #include <svx/xit.hxx>
 
 class XColorList;
 
-
-
 class SVXCORE_DLLPUBLIC XColorItem : public NameOrIndex
 {
     Color   aColor;
-    SvxThemeColor maThemeColor;
+    model::ThemeColor maThemeColor;
 
 public:
             static SfxPoolItem* CreateDefault();
@@ -51,8 +50,8 @@ public:
     const Color&    GetColorValue() const;
     void            SetColorValue(const Color& rNew) { aColor = rNew; 
Detach(); }
 
-    SvxThemeColor& GetThemeColor() { return maThemeColor; }
-    const SvxThemeColor& GetThemeColor() const { return maThemeColor; }
+    model::ThemeColor& GetThemeColor() { return maThemeColor; }
+    const model::ThemeColor& GetThemeColor() const { return maThemeColor; }
 
     virtual void dumpAsXml(xmlTextWriterPtr pWriter) const override;
 };
diff --git a/offapi/UnoApi_offapi.mk b/offapi/UnoApi_offapi.mk
index 6d0b4c1b5954..4913d17747c6 100644
--- a/offapi/UnoApi_offapi.mk
+++ b/offapi/UnoApi_offapi.mk
@@ -4173,6 +4173,7 @@ $(eval $(call 
gb_UnoApi_add_idlfiles,offapi,com/sun/star/util,\
        XCloseBroadcaster \
        XCloseListener \
        XCloseable \
+       XThemeColor \
        XDataEditor \
        XDataEditorListener \
        XFlushListener \
diff --git a/offapi/com/sun/star/util/XThemeColor.idl 
b/offapi/com/sun/star/util/XThemeColor.idl
new file mode 100644
index 000000000000..7da38c4850a2
--- /dev/null
+++ b/offapi/com/sun/star/util/XThemeColor.idl
@@ -0,0 +1,26 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+
+module com {  module sun {  module star {  module util {
+
+
+/** Theme Color interface
+
+    @since LibreOffice 7.6
+*/
+interface XThemeColor
+{
+    /** Type of the theme color */
+    short getType();
+};
+
+}; }; }; };
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/oox/CppunitTest_oox_drawingml.mk b/oox/CppunitTest_oox_drawingml.mk
index 0ad75df13870..3a9e0d0a28f7 100644
--- a/oox/CppunitTest_oox_drawingml.mk
+++ b/oox/CppunitTest_oox_drawingml.mk
@@ -23,6 +23,7 @@ $(eval $(call gb_CppunitTest_use_libraries,oox_drawingml, \
     comphelper \
     cppu \
     cppuhelper \
+    docmodel \
     oox \
     sal \
     subsequenttest \
diff --git a/oox/CppunitTest_oox_shape.mk b/oox/CppunitTest_oox_shape.mk
index 2d3638763490..073a21133708 100644
--- a/oox/CppunitTest_oox_shape.mk
+++ b/oox/CppunitTest_oox_shape.mk
@@ -23,6 +23,7 @@ $(eval $(call gb_CppunitTest_use_libraries,oox_shape, \
     comphelper \
     cppu \
     cppuhelper \
+    docmodel \
     oox \
     sal \
     subsequenttest \
diff --git a/oox/CppunitTest_oox_tokenmap.mk b/oox/CppunitTest_oox_tokenmap.mk
index 46294ecab965..60557288646e 100644
--- a/oox/CppunitTest_oox_tokenmap.mk
+++ b/oox/CppunitTest_oox_tokenmap.mk
@@ -40,6 +40,7 @@ $(eval $(call gb_CppunitTest_use_libraries,oox_tokenmap,\
     comphelper \
     cppu \
     cppuhelper \
+    docmodel \
     editeng \
     expwrap \
     drawinglayer \
diff --git a/oox/Library_oox.mk b/oox/Library_oox.mk
index 67f4f6e1ec0f..9943c2e7eb38 100644
--- a/oox/Library_oox.mk
+++ b/oox/Library_oox.mk
@@ -46,6 +46,7 @@ $(eval $(call gb_Library_use_libraries,oox,\
     editeng \
     expwrap \
     drawinglayer \
+    docmodel \
     msfilter \
     sal \
     i18nlangtag \
diff --git a/oox/inc/pch/precompiled_oox.hxx b/oox/inc/pch/precompiled_oox.hxx
index 4281760d10cc..cba76097feed 100644
--- a/oox/inc/pch/precompiled_oox.hxx
+++ b/oox/inc/pch/precompiled_oox.hxx
@@ -13,7 +13,7 @@
  manual changes will be rewritten by the next run of update_pch.sh (which 
presumably
  also fixes all possible problems, so it's usually better to use it).
 
- Generated on 2021-09-28 05:37:38 using:
+ Generated on 2023-01-10 23:28:48 using:
  ./bin/update_pch oox oox --cutoff=6 --exclude:system --exclude:module 
--include:local
 
  If after updating build fails, use the following command to locate 
conflicting headers:
@@ -28,6 +28,7 @@
 #include <cmath>
 #include <cstddef>
 #include <cstdlib>
+#include <cstring>
 #include <functional>
 #include <iomanip>
 #include <limits.h>
@@ -36,9 +37,11 @@
 #include <math.h>
 #include <memory>
 #include <new>
+#include <numeric>
 #include <optional>
 #include <ostream>
 #include <set>
+#include <stack>
 #include <string.h>
 #include <string_view>
 #include <type_traits>
@@ -47,13 +50,12 @@
 #include <utility>
 #include <vector>
 #include <boost/algorithm/string.hpp>
+#include <boost/property_tree/ptree_fwd.hpp>
 #endif // PCH_LEVEL >= 1
 #if PCH_LEVEL >= 2
 #include <osl/diagnose.h>
-#include <osl/doublecheckedlocking.h>
 #include <osl/endian.h>
 #include <osl/file.hxx>
-#include <osl/getglobalmutex.hxx>
 #include <osl/interlck.h>
 #include <osl/mutex.hxx>
 #include <osl/thread.h>
@@ -67,6 +69,7 @@
 #include <rtl/math.hxx>
 #include <rtl/random.h>
 #include <rtl/ref.hxx>
+#include <rtl/strbuf.h>
 #include <rtl/strbuf.hxx>
 #include <rtl/string.h>
 #include <rtl/string.hxx>
@@ -79,14 +82,21 @@
 #include <rtl/ustring.h>
 #include <rtl/ustring.hxx>
 #include <sal/log.hxx>
+#include <sal/macros.h>
 #include <sal/saldllapi.h>
 #include <sal/types.h>
+#include <vcl/GraphicExternalLink.hxx>
+#include <vcl/animate/Animation.hxx>
 #include <vcl/bitmap.hxx>
+#include <vcl/bitmapex.hxx>
 #include <vcl/cairo.hxx>
 #include <vcl/devicecoordinate.hxx>
 #include <vcl/dllapi.h>
 #include <vcl/fntstyle.hxx>
 #include <vcl/font.hxx>
+#include <vcl/gfxlink.hxx>
+#include <vcl/graph.hxx>
+#include <vcl/kernarray.hxx>
 #include <vcl/mapmod.hxx>
 #include <vcl/metaactiontypes.hxx>
 #include <vcl/outdev.hxx>
@@ -105,7 +115,9 @@
 #include <vcl/rendercontext/State.hxx>
 #include <vcl/rendercontext/SystemTextColorFlags.hxx>
 #include <vcl/salnativewidgets.hxx>
+#include <vcl/settings.hxx>
 #include <vcl/vclreferencebase.hxx>
+#include <vcl/vectorgraphicdata.hxx>
 #include <vcl/wall.hxx>
 #endif // PCH_LEVEL >= 2
 #if PCH_LEVEL >= 3
@@ -113,8 +125,13 @@
 #include <basegfx/color/bcolor.hxx>
 #include <basegfx/matrix/b2dhommatrix.hxx>
 #include <basegfx/numeric/ftools.hxx>
+#include <basegfx/point/b2dpoint.hxx>
+#include <basegfx/point/b2ipoint.hxx>
 #include <basegfx/polygon/b2dpolypolygon.hxx>
+#include <basegfx/tuple/Tuple2D.hxx>
+#include <basegfx/tuple/b2dtuple.hxx>
 #include <basegfx/tuple/b3dtuple.hxx>
+#include <basegfx/vector/b2dsize.hxx>
 #include <basegfx/vector/b2enums.hxx>
 #include <com/sun/star/awt/DeviceInfo.hpp>
 #include <com/sun/star/awt/FontWeight.hpp>
@@ -122,15 +139,20 @@
 #include <com/sun/star/beans/NamedValue.hpp>
 #include <com/sun/star/beans/PropertyState.hpp>
 #include <com/sun/star/beans/PropertyValue.hpp>
+#include <com/sun/star/beans/PropertyValues.hpp>
 #include <com/sun/star/beans/XPropertySet.hpp>
-#include <com/sun/star/chart2/XChartDocument.hpp>
 #include <com/sun/star/container/XNameContainer.hpp>
 #include <com/sun/star/container/XNamed.hpp>
 #include <com/sun/star/drawing/EnhancedCustomShapeAdjustmentValue.hpp>
+#include <com/sun/star/drawing/EnhancedCustomShapeParameterPair.hpp>
+#include <com/sun/star/drawing/EnhancedCustomShapeSegment.hpp>
+#include <com/sun/star/drawing/EnhancedCustomShapeTextFrame.hpp>
 #include <com/sun/star/drawing/FillStyle.hpp>
 #include <com/sun/star/drawing/Hatch.hpp>
 #include <com/sun/star/drawing/LineCap.hpp>
 #include <com/sun/star/drawing/LineStyle.hpp>
+#include <com/sun/star/drawing/TextFitToSizeType.hpp>
+#include <com/sun/star/drawing/TextHorizontalAdjust.hpp>
 #include <com/sun/star/drawing/XDrawPage.hpp>
 #include <com/sun/star/drawing/XShape.hpp>
 #include <com/sun/star/drawing/XShapes.hpp>
@@ -147,6 +169,7 @@
 #include <com/sun/star/style/LineSpacingMode.hpp>
 #include <com/sun/star/style/ParagraphAdjust.hpp>
 #include <com/sun/star/text/WritingMode.hpp>
+#include <com/sun/star/text/WritingMode2.hpp>
 #include <com/sun/star/text/XText.hpp>
 #include <com/sun/star/uno/Any.h>
 #include <com/sun/star/uno/Any.hxx>
@@ -167,7 +190,9 @@
 #include <com/sun/star/xml/sax/XFastDocumentHandler.hpp>
 #include <com/sun/star/xml/sax/XFastSAXSerializable.hpp>
 #include <comphelper/comphelperdllapi.h>
+#include <comphelper/diagnose_ex.hxx>
 #include <comphelper/processfactory.hxx>
+#include <comphelper/propertyvalue.hxx>
 #include <comphelper/sequence.hxx>
 #include <comphelper/sequenceashashmap.hxx>
 #include <comphelper/storagehelper.hxx>
@@ -175,18 +200,15 @@
 #include <cppu/unotype.hxx>
 #include <cppuhelper/implbase.hxx>
 #include <cppuhelper/implbase_ex.hxx>
-#include <cppuhelper/supportsservice.hxx>
 #include <cppuhelper/weak.hxx>
 #include <cppuhelper/weakref.hxx>
-#include <drawingml/chart/chartcontextbase.hxx>
-#include <drawingml/chart/chartspacemodel.hxx>
-#include <drawingml/chart/converterbase.hxx>
-#include <drawingml/chart/objectformatter.hxx>
-#include <drawingml/chart/titlemodel.hxx>
+#include <docmodel/theme/ThemeColorType.hxx>
+#include <drawinglayer/primitive2d/Primitive2DContainer.hxx>
 #include <drawingml/colorchoicecontext.hxx>
 #include <drawingml/customshapeproperties.hxx>
 #include <drawingml/fillproperties.hxx>
 #include <drawingml/lineproperties.hxx>
+#include <drawingml/linepropertiescontext.hxx>
 #include <drawingml/misccontexts.hxx>
 #include <drawingml/shapepropertiescontext.hxx>
 #include <drawingml/table/tablestylepart.hxx>
@@ -200,25 +222,42 @@
 #include <i18nlangtag/lang.h>
 #include <o3tl/cow_wrapper.hxx>
 #include <o3tl/safeint.hxx>
+#include <o3tl/span.hxx>
+#include <o3tl/string_view.hxx>
 #include <o3tl/typed_flags_set.hxx>
 #include <o3tl/unit_conversion.hxx>
 #include <sax/fastattribs.hxx>
 #include <sax/fshelper.hxx>
 #include <sax/saxdllapi.h>
+#include <svl/eitem.hxx>
+#include <svl/itemset.hxx>
 #include <svl/poolitem.hxx>
+#include <svl/style.hxx>
 #include <svl/svldllapi.h>
 #include <svl/typedwhich.hxx>
+#include <svl/whichranges.hxx>
+#include <svx/ColorSets.hxx>
+#include <svx/itextprovider.hxx>
 #include <svx/msdffdef.hxx>
+#include <svx/sdtaditm.hxx>
+#include <svx/sdtaitm.hxx>
+#include <svx/sdtakitm.hxx>
+#include <svx/svddef.hxx>
+#include <svx/svdoattr.hxx>
 #include <svx/svdobjkind.hxx>
+#include <svx/svdotext.hxx>
+#include <svx/svdtext.hxx>
+#include <svx/svdtrans.hxx>
 #include <svx/svdtypes.hxx>
 #include <svx/svxdllapi.h>
 #include <tools/color.hxx>
+#include <tools/datetime.hxx>
 #include <tools/degree.hxx>
-#include <comphelper/diagnose_ex.hxx>
 #include <tools/fldunit.hxx>
 #include <tools/fontenum.hxx>
 #include <tools/fract.hxx>
 #include <tools/gen.hxx>
+#include <tools/helpers.hxx>
 #include <tools/link.hxx>
 #include <tools/long.hxx>
 #include <tools/mapunit.hxx>
@@ -243,14 +282,11 @@
 #include <oox/core/relations.hxx>
 #include <oox/core/xmlfilterbase.hxx>
 #include <oox/dllapi.h>
-#include <oox/drawingml/chart/chartconverter.hxx>
-#include <oox/drawingml/chart/datasourcemodel.hxx>
-#include <oox/drawingml/chart/modelbase.hxx>
 #include <oox/drawingml/clrscheme.hxx>
 #include <oox/drawingml/color.hxx>
 #include <oox/drawingml/drawingmltypes.hxx>
-#include <oox/drawingml/graphicshapecontext.hxx>
 #include <oox/drawingml/shape.hxx>
+#include <oox/drawingml/shapecontext.hxx>
 #include <oox/drawingml/shapepropertymap.hxx>
 #include <oox/drawingml/theme.hxx>
 #include <oox/export/utils.hxx>
@@ -261,16 +297,15 @@
 #include <oox/helper/containerhelper.hxx>
 #include <oox/helper/graphichelper.hxx>
 #include <oox/helper/helper.hxx>
-#include <oox/helper/modelobjecthelper.hxx>
 #include <oox/helper/propertymap.hxx>
 #include <oox/helper/propertyset.hxx>
 #include <oox/helper/refmap.hxx>
-#include <oox/helper/refvector.hxx>
 #include <oox/helper/storagebase.hxx>
 #include <oox/helper/textinputstream.hxx>
 #include <oox/ole/olestorage.hxx>
 #include <oox/ppt/comments.hxx>
 #include <oox/ppt/headerfooter.hxx>
+#include <oox/ppt/pptimport.hxx>
 #include <oox/ppt/pptshape.hxx>
 #include <oox/ppt/slidepersist.hxx>
 #include <oox/token/namespaces.hxx>
diff --git a/oox/source/export/ThemeExport.cxx 
b/oox/source/export/ThemeExport.cxx
index f11b894f924a..b1684986f028 100644
--- a/oox/source/export/ThemeExport.cxx
+++ b/oox/source/export/ThemeExport.cxx
@@ -224,19 +224,19 @@ bool 
ThemeExport::writeFormatScheme(sax_fastparser::FSHelperPtr pFS)
 
 bool ThemeExport::writeColorSet(sax_fastparser::FSHelperPtr pFS, svx::Theme 
const& rTheme)
 {
-    static std::unordered_map<sal_Int32, svx::ThemeColorType> constTokenMap
-        = { { XML_dk1, svx::ThemeColorType::Dark1 },
-            { XML_lt1, svx::ThemeColorType::Light1 },
-            { XML_dk2, svx::ThemeColorType::Dark2 },
-            { XML_lt2, svx::ThemeColorType::Light2 },
-            { XML_accent1, svx::ThemeColorType::Accent1 },
-            { XML_accent2, svx::ThemeColorType::Accent2 },
-            { XML_accent3, svx::ThemeColorType::Accent3 },
-            { XML_accent4, svx::ThemeColorType::Accent4 },
-            { XML_accent5, svx::ThemeColorType::Accent5 },
-            { XML_accent6, svx::ThemeColorType::Accent6 },
-            { XML_hlink, svx::ThemeColorType::Hyperlink },
-            { XML_folHlink, svx::ThemeColorType::FollowedHyperlink } };
+    static std::unordered_map<sal_Int32, model::ThemeColorType> constTokenMap
+        = { { XML_dk1, model::ThemeColorType::Dark1 },
+            { XML_lt1, model::ThemeColorType::Light1 },
+            { XML_dk2, model::ThemeColorType::Dark2 },
+            { XML_lt2, model::ThemeColorType::Light2 },
+            { XML_accent1, model::ThemeColorType::Accent1 },
+            { XML_accent2, model::ThemeColorType::Accent2 },
+            { XML_accent3, model::ThemeColorType::Accent3 },
+            { XML_accent4, model::ThemeColorType::Accent4 },
+            { XML_accent5, model::ThemeColorType::Accent5 },
+            { XML_accent6, model::ThemeColorType::Accent6 },
+            { XML_hlink, model::ThemeColorType::Hyperlink },
+            { XML_folHlink, model::ThemeColorType::FollowedHyperlink } };
 
     static std::array<sal_Int32, 12> constTokenArray
         = { XML_dk1,     XML_lt1,     XML_dk2,     XML_lt2,     XML_accent1, 
XML_accent2,
@@ -248,7 +248,7 @@ bool ThemeExport::writeColorSet(sax_fastparser::FSHelperPtr 
pFS, svx::Theme cons
 
     for (auto nToken : constTokenArray)
     {
-        svx::ThemeColorType eColorType = constTokenMap[nToken];
+        model::ThemeColorType eColorType = constTokenMap[nToken];
         Color aColor = pColorSet->getColor(eColorType);
         pFS->startElementNS(XML_a, nToken);
         pFS->singleElementNS(XML_a, XML_srgbClr, XML_val, 
I32SHEX(sal_Int32(aColor)));
diff --git a/sd/CppunitTest_sd_uiimpress.mk b/sd/CppunitTest_sd_uiimpress.mk
index 2599d0a97982..c2ba59be987a 100644
--- a/sd/CppunitTest_sd_uiimpress.mk
+++ b/sd/CppunitTest_sd_uiimpress.mk
@@ -30,6 +30,7 @@ $(eval $(call gb_CppunitTest_use_libraries,sd_uiimpress, \
     cppcanvas \
     cppu \
     cppuhelper \
+    docmodel \
     drawinglayer \
     editeng \
     for \
diff --git a/sd/CppunitTest_sd_uimpress.mk b/sd/CppunitTest_sd_uimpress.mk
index 4575a06107b5..bff68b0386d0 100644
--- a/sd/CppunitTest_sd_uimpress.mk
+++ b/sd/CppunitTest_sd_uimpress.mk
@@ -26,6 +26,7 @@ $(eval $(call gb_CppunitTest_use_libraries,sd_uimpress,\
     cppcanvas \
     cppu \
     cppuhelper \
+    docmodel \
     drawinglayer \
     drawinglayercore \
     editeng \
diff --git a/sd/Library_sd.mk b/sd/Library_sd.mk
index 1a3a87174098..3c60a60b3a3d 100644
--- a/sd/Library_sd.mk
+++ b/sd/Library_sd.mk
@@ -74,6 +74,7 @@ $(eval $(call gb_Library_use_libraries,sd,\
        cppcanvas \
        cppu \
        cppuhelper \
+       docmodel \
        drawinglayercore \
        drawinglayer \
        editeng \
diff --git a/sd/inc/pch/precompiled_sd.hxx b/sd/inc/pch/precompiled_sd.hxx
index 8963b9432162..b4110da7f641 100644
--- a/sd/inc/pch/precompiled_sd.hxx
+++ b/sd/inc/pch/precompiled_sd.hxx
@@ -13,7 +13,7 @@
  manual changes will be rewritten by the next run of update_pch.sh (which 
presumably
  also fixes all possible problems, so it's usually better to use it).
 
- Generated on 2022-08-08 10:27:15 using:
+ Generated on 2023-01-10 23:30:40 using:
  ./bin/update_pch sd sd --cutoff=4 --exclude:system --exclude:module 
--include:local
 
  If after updating build fails, use the following command to locate 
conflicting headers:
@@ -25,16 +25,21 @@
 #include <algorithm>
 #include <array>
 #include <cassert>
+#include <cmath>
 #include <cstddef>
+#include <cstring>
 #include <functional>
 #include <initializer_list>
 #include <iomanip>
 #include <iterator>
+#include <limits>
 #include <locale>
 #include <map>
+#include <math.h>
 #include <memory>
 #include <mutex>
 #include <new>
+#include <numeric>
 #include <optional>
 #include <ostream>
 #include <set>
@@ -61,12 +66,16 @@
 #include <osl/socket_decl.hxx>
 #include <osl/time.h>
 #include <rtl/alloc.h>
+#include <rtl/bootstrap.hxx>
 #include <rtl/character.hxx>
-#include <rtl/locale.h>
+#include <rtl/math.h>
 #include <rtl/math.hxx>
 #include <rtl/ref.hxx>
+#include <rtl/strbuf.h>
 #include <rtl/strbuf.hxx>
 #include <rtl/string.hxx>
+#include <rtl/stringconcat.hxx>
+#include <rtl/stringutils.hxx>
 #include <rtl/tencinfo.h>
 #include <rtl/textenc.h>
 #include <rtl/ustrbuf.hxx>
@@ -77,13 +86,13 @@
 #include <sal/types.h>
 #include <sal/typesizes.h>
 #include <vcl/EnumContext.hxx>
+#include <vcl/GraphicObject.hxx>
 #include <vcl/InterimItemWindow.hxx>
 #include <vcl/bitmapex.hxx>
 #include <vcl/commandevent.hxx>
 #include <vcl/commandinfoprovider.hxx>
 #include <vcl/customweld.hxx>
 #include <vcl/dllapi.h>
-#include <comphelper/errcode.hxx>
 #include <vcl/errinf.hxx>
 #include <vcl/event.hxx>
 #include <vcl/fntstyle.hxx>
@@ -96,6 +105,7 @@
 #include <vcl/image.hxx>
 #include <vcl/imapobj.hxx>
 #include <vcl/keycod.hxx>
+#include <vcl/mapmod.hxx>
 #include <vcl/outdev.hxx>
 #include <vcl/ptrstyle.hxx>
 #include <vcl/region.hxx>
@@ -121,6 +131,7 @@
 #include <basegfx/color/bcolor.hxx>
 #include <basegfx/matrix/b2dhommatrix.hxx>
 #include <basegfx/matrix/b2dhommatrixtools.hxx>
+#include <basegfx/numeric/ftools.hxx>
 #include <basegfx/point/b2dpoint.hxx>
 #include <basegfx/point/b2ipoint.hxx>
 #include <basegfx/polygon/b2dpolygon.hxx>
@@ -131,6 +142,7 @@
 #include <basegfx/range/basicrange.hxx>
 #include <basegfx/tuple/b2dtuple.hxx>
 #include <basegfx/tuple/b3dtuple.hxx>
+#include <basegfx/vector/b2dsize.hxx>
 #include <basegfx/vector/b2dvector.hxx>
 #include <basic/sberrors.hxx>
 #include <basic/sbstar.hxx>
@@ -138,10 +150,27 @@
 #include <cache/SlsPageCacheManager.hxx>
 #include <com/sun/star/animations/AnimationFill.hpp>
 #include <com/sun/star/animations/AnimationNodeType.hpp>
+#include <com/sun/star/animations/AnimationRestart.hpp>
+#include <com/sun/star/animations/AnimationTransformType.hpp>
+#include <com/sun/star/animations/Event.hpp>
+#include <com/sun/star/animations/EventTrigger.hpp>
 #include <com/sun/star/animations/ParallelTimeContainer.hpp>
+#include <com/sun/star/animations/Timing.hpp>
+#include <com/sun/star/animations/TransitionSubType.hpp>
+#include <com/sun/star/animations/TransitionType.hpp>
+#include <com/sun/star/animations/ValuePair.hpp>
 #include <com/sun/star/animations/XAnimate.hpp>
+#include <com/sun/star/animations/XAnimateMotion.hpp>
+#include <com/sun/star/animations/XAnimateTransform.hpp>
+#include <com/sun/star/animations/XAnimationNode.hpp>
+#include <com/sun/star/animations/XAnimationNodeSupplier.hpp>
+#include <com/sun/star/animations/XAudio.hpp>
+#include <com/sun/star/animations/XCommand.hpp>
+#include <com/sun/star/animations/XIterateContainer.hpp>
+#include <com/sun/star/animations/XTransitionFilter.hpp>
 #include <com/sun/star/awt/FontDescriptor.hpp>
 #include <com/sun/star/awt/FontSlant.hpp>
+#include <com/sun/star/awt/XBitmap.hpp>
 #include <com/sun/star/beans/NamedValue.hpp>
 #include <com/sun/star/beans/PropertyAttribute.hpp>
 #include <com/sun/star/beans/PropertyState.hpp>
@@ -164,9 +193,13 @@
 #include <com/sun/star/datatransfer/dnd/XDragGestureListener.hpp>
 #include <com/sun/star/datatransfer/dnd/XDragSourceListener.hpp>
 #include <com/sun/star/datatransfer/dnd/XDropTargetListener.hpp>
+#include <com/sun/star/document/XDocumentPropertiesSupplier.hpp>
+#include <com/sun/star/drawing/BitmapMode.hpp>
+#include <com/sun/star/drawing/FillStyle.hpp>
 #include <com/sun/star/drawing/LineCap.hpp>
 #include <com/sun/star/drawing/LineStyle.hpp>
 #include <com/sun/star/drawing/XDrawPage.hpp>
+#include <com/sun/star/drawing/XDrawPages.hpp>
 #include <com/sun/star/drawing/XDrawPagesSupplier.hpp>
 #include <com/sun/star/drawing/XDrawView.hpp>
 #include <com/sun/star/drawing/XMasterPagesSupplier.hpp>
@@ -185,6 +218,7 @@
 #include <com/sun/star/frame/XFrame.hpp>
 #include <com/sun/star/frame/XModel.hpp>
 #include <com/sun/star/frame/XTerminateListener.hpp>
+#include <com/sun/star/geometry/RealPoint2D.hpp>
 #include <com/sun/star/i18n/UnicodeScript.hpp>
 #include <com/sun/star/lang/DisposedException.hpp>
 #include <com/sun/star/lang/IllegalArgumentException.hpp>
@@ -198,11 +232,20 @@
 #include <com/sun/star/lang/XUnoTunnel.hpp>
 #include <com/sun/star/media/XPlayer.hpp>
 #include <com/sun/star/office/XAnnotation.hpp>
+#include <com/sun/star/office/XAnnotationAccess.hpp>
+#include <com/sun/star/office/XAnnotationEnumeration.hpp>
+#include <com/sun/star/presentation/AnimationSpeed.hpp>
+#include <com/sun/star/presentation/EffectCommands.hpp>
 #include <com/sun/star/presentation/EffectNodeType.hpp>
 #include <com/sun/star/presentation/EffectPresetClass.hpp>
 #include <com/sun/star/presentation/ParagraphTarget.hpp>
+#include <com/sun/star/presentation/ShapeAnimationSubType.hpp>
+#include <com/sun/star/presentation/TextAnimationType.hpp>
+#include <com/sun/star/style/LineSpacing.hpp>
+#include <com/sun/star/style/TabStop.hpp>
 #include <com/sun/star/style/XStyle.hpp>
 #include <com/sun/star/task/XStatusIndicator.hpp>
+#include <com/sun/star/text/XSimpleText.hpp>
 #include <com/sun/star/text/XText.hpp>
 #include <com/sun/star/text/XTextCopy.hpp>
 #include <com/sun/star/text/XTextRange.hpp>
@@ -226,6 +269,8 @@
 #include <comphelper/classids.hxx>
 #include <comphelper/compbase.hxx>
 #include <comphelper/comphelperdllapi.h>
+#include <comphelper/diagnose_ex.hxx>
+#include <comphelper/errcode.hxx>
 #include <comphelper/extract.hxx>
 #include <comphelper/lok.hxx>
 #include <comphelper/processfactory.hxx>
@@ -233,6 +278,7 @@
 #include <comphelper/propertyvalue.hxx>
 #include <comphelper/scopeguard.hxx>
 #include <comphelper/sequence.hxx>
+#include <comphelper/sequenceashashmap.hxx>
 #include <comphelper/servicehelper.hxx>
 #include <comphelper/storagehelper.hxx>
 #include <controller/SlideSorterController.hxx>
@@ -293,16 +339,17 @@
 #include <editeng/unoedsrc.hxx>
 #include <editeng/unolingu.hxx>
 #include <editeng/wghtitem.hxx>
+#include <filter/msfilter/msfilterdllapi.h>
 #include <framework/ConfigurationController.hxx>
 #include <framework/FrameworkHelper.hxx>
 #include <framework/Pane.hxx>
 #include <framework/ViewShellWrapper.hxx>
-#include <i18nlangtag/i18nlangtagdllapi.h>
 #include <i18nlangtag/lang.h>
 #include <i18nlangtag/languagetag.hxx>
 #include <model/SlideSorterModel.hxx>
 #include <model/SlsPageDescriptor.hxx>
 #include <model/SlsPageEnumerationProvider.hxx>
+#include <o3tl/any.hxx>
 #include <o3tl/cow_wrapper.hxx>
 #include <o3tl/deleter.hxx>
 #include <o3tl/safeint.hxx>
@@ -312,7 +359,10 @@
 #include <o3tl/strong_int.hxx>
 #include <o3tl/typed_flags_set.hxx>
 #include <o3tl/underlyingenumvalue.hxx>
+#include <o3tl/unit_conversion.hxx>
 #include <officecfg/Office/Common.hxx>
+#include <oox/dllapi.h>
+#include <oox/drawingml/drawingmltypes.hxx>
 #include <salhelper/simplereferenceobject.hxx>
 #include <salhelper/thread.hxx>
 #include <sfx2/app.hxx>
@@ -351,6 +401,7 @@
 #include <sfx2/zoomitem.hxx>
 #include <sot/exchange.hxx>
 #include <sot/formats.hxx>
+#include <sot/storage.hxx>
 #include <svl/SfxBroadcaster.hxx>
 #include <svl/cjkoptions.hxx>
 #include <svl/eitem.hxx>
@@ -368,6 +419,7 @@
 #include <svl/style.hxx>
 #include <svl/svldllapi.h>
 #include <svl/typedwhich.hxx>
+#include <svl/urihelper.hxx>
 #include <svl/urlbmk.hxx>
 #include <svl/whiter.hxx>
 #include <svtools/ehdl.hxx>
@@ -385,9 +437,11 @@
 #include <svx/fmshell.hxx>
 #include <svx/fontwork.hxx>
 #include <svx/fontworkbar.hxx>
+#include <svx/gallery.hxx>
 #include <svx/hlnkitem.hxx>
 #include <svx/hyperdlg.hxx>
 #include <svx/imapdlg.hxx>
+#include <svx/msdffdef.hxx>
 #include <svx/obj3d.hxx>
 #include <svx/pageitem.hxx>
 #include <svx/ruler.hxx>
@@ -402,6 +456,7 @@
 #include <svx/sdrpaintwindow.hxx>
 #include <svx/sdtagitm.hxx>
 #include <svx/sdtfsitm.hxx>
+#include <svx/sdtmfitm.hxx>
 #include <svx/srchdlg.hxx>
 #include <svx/svddef.hxx>
 #include <svx/svdetc.hxx>
@@ -422,6 +477,7 @@
 #include <svx/svdpage.hxx>
 #include <svx/svdpagv.hxx>
 #include <svx/svdpool.hxx>
+#include <svx/svdtypes.hxx>
 #include <svx/svdundo.hxx>
 #include <svx/svxdlg.hxx>
 #include <svx/svxdllapi.h>
@@ -448,12 +504,11 @@
 #include <tools/color.hxx>
 #include <tools/debug.hxx>
 #include <tools/degree.hxx>
-#include <comphelper/diagnose_ex.hxx>
 #include <tools/fldunit.hxx>
 #include <tools/fontenum.hxx>
+#include <tools/fract.hxx>
 #include <tools/gen.hxx>
 #include <tools/globname.hxx>
-#include <tools/lineend.hxx>
 #include <tools/link.hxx>
 #include <tools/long.hxx>
 #include <tools/mapunit.hxx>
@@ -474,6 +529,7 @@
 #include <unotools/localedatawrapper.hxx>
 #include <unotools/moduleoptions.hxx>
 #include <unotools/options.hxx>
+#include <unotools/pathoptions.hxx>
 #include <unotools/resmgr.hxx>
 #include <unotools/streamwrap.hxx>
 #include <unotools/syslocale.hxx>
diff --git a/sd/source/core/stlsheet.cxx b/sd/source/core/stlsheet.cxx
index 4d72cf0915c6..b12e280f231f 100644
--- a/sd/source/core/stlsheet.cxx
+++ b/sd/source/core/stlsheet.cxx
@@ -1358,7 +1358,7 @@ PropertyState SAL_CALL SdStyleSheet::getPropertyState( 
const OUString& PropertyN
                 if (pEntry->nMemberId == MID_COLOR_THEME_INDEX)
                 {
                     const XFillColorItem* pColor = 
rStyleSet.GetItem<XFillColorItem>(pEntry->nWID);
-                    if (pColor->GetThemeColor().GetThemeIndex() == -1)
+                    if (pColor->GetThemeColor().getType() == 
model::ThemeColorType::Unknown)
                     {
                         eState = PropertyState_DEFAULT_VALUE;
                     }
@@ -1366,7 +1366,13 @@ PropertyState SAL_CALL SdStyleSheet::getPropertyState( 
const OUString& PropertyN
                 else if (pEntry->nMemberId == MID_COLOR_LUM_MOD)
                 {
                     const XFillColorItem* pColor = 
rStyleSet.GetItem<XFillColorItem>(pEntry->nWID);
-                    if (pColor->GetThemeColor().GetLumMod() == 10000)
+                    sal_Int16 nLumMod = 10000;
+                    for (auto const& rTransform : 
pColor->GetThemeColor().getTransformations())
+                    {
+                        if (rTransform.meType == 
model::TransformationType::LumMod)
+                            nLumMod = rTransform.mnValue;
+                    }
+                    if (nLumMod == 10000)
                     {
                         eState = PropertyState_DEFAULT_VALUE;
                     }
@@ -1374,7 +1380,13 @@ PropertyState SAL_CALL SdStyleSheet::getPropertyState( 
const OUString& PropertyN
                 else if (pEntry->nMemberId == MID_COLOR_LUM_OFF)
                 {
                     const XFillColorItem* pColor = 
rStyleSet.GetItem<XFillColorItem>(pEntry->nWID);
-                    if (pColor->GetThemeColor().GetLumOff() == 0)
+                    sal_Int16 nLumOff = 0;
+                    for (auto const& rTransform : 
pColor->GetThemeColor().getTransformations())
+                    {
+                        if (rTransform.meType == 
model::TransformationType::LumOff)
+                            nLumOff = rTransform.mnValue;
+                    }
+                    if (nLumOff == 0)
                     {
                         eState = PropertyState_DEFAULT_VALUE;
                     }
diff --git a/sd/source/filter/eppt/pptx-epptooxml.cxx 
b/sd/source/filter/eppt/pptx-epptooxml.cxx
index d0d602cb4299..3827c90e045e 100644
--- a/sd/source/filter/eppt/pptx-epptooxml.cxx
+++ b/sd/source/filter/eppt/pptx-epptooxml.cxx
@@ -2186,7 +2186,7 @@ bool PowerPointExport::WriteColorSets(const FSHelperPtr& 
pFS, svx::Theme* pTheme
     {
         sal_Int32 nToken = 
aPredefinedClrTokens[static_cast<PredefinedClrSchemeId>(nId)];
         pFS->startElementNS(XML_a, nToken);
-        svx::ThemeColorType eType = svx::convertToThemeColorType(nId);
+        model::ThemeColorType eType = model::convertToThemeColorType(nId);
         pFS->singleElementNS(XML_a, XML_srgbClr, XML_val, 
I32SHEX(static_cast<sal_Int32>(pColorSet->getColor(eType))));
         pFS->endElementNS(XML_a, nToken);
     }
diff --git a/sd/source/ui/func/fuconstr.cxx b/sd/source/ui/func/fuconstr.cxx
index dd086641cdbf..e7f0bb3a67bb 100644
--- a/sd/source/ui/func/fuconstr.cxx
+++ b/sd/source/ui/func/fuconstr.cxx
@@ -389,10 +389,10 @@ void FuConstruct::SetStyleSheet( SfxItemSet& rAttr, 
SdrObject* pObj,
 
                 aAttr.Put(XFillStyleItem(css::drawing::FillStyle_SOLID));
 
-                svx::ThemeColorType eColorType = svx::ThemeColorType::Accent1;
+                model::ThemeColorType eColorType = 
model::ThemeColorType::Accent1;
                 Color aColor = pTheme->GetColor(eColorType);
                 XFillColorItem aFillColorItem("", aColor);
-                
aFillColorItem.GetThemeColor().SetThemeIndex(static_cast<sal_Int16>(eColorType));
+                aFillColorItem.GetThemeColor().setType(eColorType);
                 aAttr.Put(aFillColorItem);
 
                 aAttr.Put(XLineStyleItem(css::drawing::LineStyle_SOLID));
diff --git a/sd/source/ui/view/drtxtob1.cxx b/sd/source/ui/view/drtxtob1.cxx
index 6282b750aa06..7fba8728d991 100644
--- a/sd/source/ui/view/drtxtob1.cxx
+++ b/sd/source/ui/view/drtxtob1.cxx
@@ -780,21 +780,20 @@ void TextObjectBar::Execute( SfxRequest &rReq )
             if (nSlot == SID_ATTR_CHAR_COLOR)
             {
                 pColorItem = 
std::make_unique<SvxColorItem>(pNewArgs->Get(EE_CHAR_COLOR));
-            }
-            if (const SfxInt16Item* pIntItem = 
pArgs->GetItemIfSet(SID_ATTR_COLOR_THEME_INDEX, false))
-            {
-                
pColorItem->GetThemeColor().SetThemeIndex(pIntItem->GetValue());
-            }
-            if (const SfxInt16Item* pIntItem = 
pArgs->GetItemIfSet(SID_ATTR_COLOR_LUM_MOD, false))
-            {
-                pColorItem->GetThemeColor().SetLumMod(pIntItem->GetValue());
-            }
-            if (const SfxInt16Item* pIntItem = 
pArgs->GetItemIfSet(SID_ATTR_COLOR_LUM_OFF, false))
-            {
-                pColorItem->GetThemeColor().SetLumOff(pIntItem->GetValue());
-            }
-            if (pColorItem)
-            {
+                pColorItem->GetThemeColor().clearTransformations();
+
+                if (const SfxInt16Item* pIntItem = 
pArgs->GetItemIfSet(SID_ATTR_COLOR_THEME_INDEX, false))
+                {
+                    
pColorItem->GetThemeColor().setType(model::convertToThemeColorType(pIntItem->GetValue()));
+                }
+                if (const SfxInt16Item* pIntItem = 
pArgs->GetItemIfSet(SID_ATTR_COLOR_LUM_MOD, false))
+                {
+                    
pColorItem->GetThemeColor().addTransformation({model::TransformationType::LumMod,
 pIntItem->GetValue()});
+                }
+                if (const SfxInt16Item* pIntItem = 
pArgs->GetItemIfSet(SID_ATTR_COLOR_LUM_OFF, false))
+                {
+                    
pColorItem->GetThemeColor().addTransformation({model::TransformationType::LumOff,
 pIntItem->GetValue()});
+                }
                 pNewArgs->Put(std::move(pColorItem));
             }
 
diff --git a/sd/source/ui/view/drviews2.cxx b/sd/source/ui/view/drviews2.cxx
index b2c2803a2438..a390533e89dc 100644
--- a/sd/source/ui/view/drviews2.cxx
+++ b/sd/source/ui/view/drviews2.cxx
@@ -575,20 +575,21 @@ public:
             if (pColorItem)
             {
                 XFillColorItem aColorItem(*pColorItem);
+                aColorItem.GetThemeColor().clearTransformations();
                 if (pArgs->GetItemState(SID_ATTR_COLOR_THEME_INDEX, false, 
&pItem) == SfxItemState::SET)
                 {
                     auto pIntItem = static_cast<const SfxInt16Item*>(pItem);
-                    
aColorItem.GetThemeColor().SetThemeIndex(pIntItem->GetValue());
+                    
aColorItem.GetThemeColor().setType(model::convertToThemeColorType(pIntItem->GetValue()));
                 }
                 if (pArgs->GetItemState(SID_ATTR_COLOR_LUM_MOD, false, &pItem) 
== SfxItemState::SET)
                 {
                     auto pIntItem = static_cast<const SfxInt16Item*>(pItem);
-                    aColorItem.GetThemeColor().SetLumMod(pIntItem->GetValue());
+                    
aColorItem.GetThemeColor().addTransformation({model::TransformationType::LumMod,
 pIntItem->GetValue()});
                 }
                 if (pArgs->GetItemState(SID_ATTR_COLOR_LUM_OFF, false, &pItem) 
== SfxItemState::SET)
                 {
                     auto pIntItem = static_cast<const SfxInt16Item*>(pItem);
-                    aColorItem.GetThemeColor().SetLumOff(pIntItem->GetValue());
+                    
aColorItem.GetThemeColor().addTransformation({model::TransformationType::LumOff,
 pIntItem->GetValue()});
                 }
                 pArgs->Put(aColorItem);
             }
diff --git a/solenv/gbuild/extensions/pre_MergedLibsList.mk 
b/solenv/gbuild/extensions/pre_MergedLibsList.mk
index b2402ec0c2af..6bf0157a361b 100644
--- a/solenv/gbuild/extensions/pre_MergedLibsList.mk
+++ b/solenv/gbuild/extensions/pre_MergedLibsList.mk
@@ -28,6 +28,7 @@ gb_MERGE_LIBRARY_LIST := \
        deploymentmisc \
        $(if $(filter-out MACOSX WNT,$(OS)),desktopbe1) \
        $(if $(filter WNT,$(OS)),directx9canvas) \
+       docmodel \
        drawinglayercore \
        drawinglayer \
        editeng \
diff --git a/solenv/qa/python/gbuildtojson.py b/solenv/qa/python/gbuildtojson.py
index 8f08668dbbdd..e693f75f5947 100644
--- a/solenv/qa/python/gbuildtojson.py
+++ b/solenv/qa/python/gbuildtojson.py
@@ -124,7 +124,7 @@ class CheckGbuildToJsonModules(unittest.TestCase):
         shutil.rmtree(self.tempwork)
 
     def test_gbuildtojson(self):
-        modules = ['accessibility', 'android', 'animations', 'apple_remote', 
'avmedia', 'basctl', 'basegfx', 'basic', 'bean', 'canvas', 'chart2', 
'codemaker', 'comphelper', 'cppcanvas', 'cui', 'dbaccess', 'desktop', 
'drawinglayer', 'editeng', 'embeddedobj', 'embedserv', 'eventattacher', 
'extras', 'filter', 'forms', 'formula', 'fpicker', 'framework', 'hwpfilter', 
'i18nlangtag', 'i18nutil', 'idl', 'instsetoo_native', 'io', 'ios', 'jvmaccess', 
'jvmfwk', 'l10ntools', 'librelogo', 'libreofficekit', 'linguistic', 
'lotuswordpro', 'nlpsolver', 'o3tl', 'offapi', 'officecfg', 'onlineupdate', 
'oovbaapi', 'oox', 'opencl', 'package', 'postprocess', 'pyuno', 'registry', 
'remotebridges', 'reportbuilder', 'reportdesign', 'ridljar', 'salhelper', 
'sax', 'sc', 'sccomp', 'scp2', 'scripting', 'sd', 'sdext', 'setup_native', 
'sfx2', 'slideshow', 'smoketest', 'soltools', 'sot', 'starmath', 'store', 
'svgio', 'emfio', 'svl', 'svtools', 'svx', 'sw', 'swext', 'sysui', 'test', 
'testtools', 'toolkit', 'ucb', 'uc
 bhelper', 'udkapi', 'uitest', 'UnoControls', 'unodevtools', 'unoidl', 'unoil', 
'unotest', 'unotools', 'unoxml', 'ure', 'uui', 'vbahelper', 'vcl', 
'winaccessibility', 'wizards', 'writerperfect', 'xmerge', 'xmlhelp', 'xmloff', 
'xmlreader', 'xmlscript', 'xmlsecurity']
+        modules = ['accessibility', 'android', 'animations', 'apple_remote', 
'avmedia', 'basctl', 'basegfx', 'basic', 'bean', 'canvas', 'chart2', 
'codemaker', 'comphelper', 'cppcanvas', 'cui', 'dbaccess', 'desktop', 
'docmodel', 'drawinglayer', 'editeng', 'embeddedobj', 'embedserv', 
'eventattacher', 'extras', 'filter', 'forms', 'formula', 'fpicker', 
'framework', 'hwpfilter', 'i18nlangtag', 'i18nutil', 'idl', 'instsetoo_native', 
'io', 'ios', 'jvmaccess', 'jvmfwk', 'l10ntools', 'librelogo', 'libreofficekit', 
'linguistic', 'lotuswordpro', 'nlpsolver', 'o3tl', 'offapi', 'officecfg', 
'onlineupdate', 'oovbaapi', 'oox', 'opencl', 'package', 'postprocess', 'pyuno', 
'registry', 'remotebridges', 'reportbuilder', 'reportdesign', 'ridljar', 
'salhelper', 'sax', 'sc', 'sccomp', 'scp2', 'scripting', 'sd', 'sdext', 
'setup_native', 'sfx2', 'slideshow', 'smoketest', 'soltools', 'sot', 
'starmath', 'store', 'svgio', 'emfio', 'svl', 'svtools', 'svx', 'sw', 'swext', 
'sysui', 'test', 'testtools', 'toolkit'
 , 'ucb', 'ucbhelper', 'udkapi', 'uitest', 'UnoControls', 'unodevtools', 
'unoidl', 'unoil', 'unotest', 'unotools', 'unoxml', 'ure', 'uui', 'vbahelper', 
'vcl', 'winaccessibility', 'wizards', 'writerperfect', 'xmerge', 'xmlhelp', 
'xmloff', 'xmlreader', 'xmlscript', 'xmlsecurity']
         if os.environ['OS'] == 'WNT':
             # for now, use a limited subset for testing on windows as it is so 
annoyingly slow on this
             modules = ['chart2', 'cui', 'dbaccess', 'framework', 'oox', 
'sfx2', 'svl', 'svtools', 'svx', 'toolkit', 'vcl', 'xmloff']
diff --git a/svx/CppunitTest_svx_removewhichrange.mk 
b/svx/CppunitTest_svx_removewhichrange.mk
index 6819c4452609..9fea95320f7b 100644
--- a/svx/CppunitTest_svx_removewhichrange.mk
+++ b/svx/CppunitTest_svx_removewhichrange.mk
@@ -23,6 +23,7 @@ $(eval $(call 
gb_CppunitTest_use_libraries,svx_removewhichrange, \
     comphelper \
     cppu \
     cppuhelper \
+    docmodel \
     drawinglayer \
     drawinglayercore \
     editeng \
diff --git a/svx/CppunitTest_svx_styles.mk b/svx/CppunitTest_svx_styles.mk
index 60f7e13d07d3..9d5cccabb8b9 100644
--- a/svx/CppunitTest_svx_styles.mk
+++ b/svx/CppunitTest_svx_styles.mk
@@ -23,6 +23,7 @@ $(eval $(call gb_CppunitTest_use_libraries,svx_styles, \
     comphelper \
     cppu \
     cppuhelper \
+    docmodel \
     svx \
     sal \
     subsequenttest \
diff --git a/svx/CppunitTest_svx_unit.mk b/svx/CppunitTest_svx_unit.mk
index 678a27322e02..a46aa5b0d583 100644
--- a/svx/CppunitTest_svx_unit.mk
+++ b/svx/CppunitTest_svx_unit.mk
@@ -38,6 +38,7 @@ $(eval $(call gb_CppunitTest_add_exception_objects,svx_unit, \
 
 $(eval $(call gb_CppunitTest_use_libraries,svx_unit, \
        basegfx \
+       docmodel \
        drawinglayer \
        drawinglayercore \
     editeng \
diff --git a/svx/Library_svxcore.mk b/svx/Library_svxcore.mk
index 6a1c0b5de352..439ae516427c 100644
--- a/svx/Library_svxcore.mk
+++ b/svx/Library_svxcore.mk
@@ -62,6 +62,7 @@ $(eval $(call gb_Library_use_libraries,svxcore,\
     cppu \
     $(call gb_Helper_optional,DBCONNECTIVITY, \
         dbtools) \
+    docmodel \
     drawinglayercore \
     drawinglayer \
     editeng \
diff --git a/svx/inc/pch/precompiled_svx.hxx b/svx/inc/pch/precompiled_svx.hxx
index 8f83a82187d6..8ccbe5900922 100644
--- a/svx/inc/pch/precompiled_svx.hxx
+++ b/svx/inc/pch/precompiled_svx.hxx
@@ -13,7 +13,7 @@
  manual changes will be rewritten by the next run of update_pch.sh (which 
presumably
  also fixes all possible problems, so it's usually better to use it).
 
- Generated on 2022-01-26 09:16:16 using:
+ Generated on 2023-01-10 23:28:52 using:
  ./bin/update_pch svx svx --cutoff=3 --exclude:system --exclude:module 
--include:local
 
  If after updating build fails, use the following command to locate 
conflicting headers:
@@ -26,11 +26,13 @@
 #include <array>
 #include <cassert>
 #include <climits>
+#include <cmath>
 #include <cstddef>
 #include <cstdlib>
 #include <deque>
 #include <functional>
 #include <limits.h>
+#include <limits>
 #include <map>
 #include <memory>
 #include <mutex>
@@ -84,7 +86,6 @@
 #include <vcl/commandinfoprovider.hxx>
 #include <vcl/customweld.hxx>
 #include <vcl/dllapi.h>
-#include <comphelper/errcode.hxx>
 #include <vcl/errinf.hxx>
 #include <vcl/event.hxx>
 #include <vcl/fieldvalues.hxx>
@@ -122,10 +123,11 @@
 #include <basegfx/point/b3dpoint.hxx>
 #include <basegfx/polygon/b2dpolygontools.hxx>
 #include <basegfx/polygon/b2dpolypolygontools.hxx>
-#include <basegfx/range/b2drange.hxx>
-#include <basegfx/range/basicrange.hxx>
+#include <basegfx/polygon/b3dpolypolygon.hxx>
+#include <basegfx/range/b3drange.hxx>
 #include <basegfx/tuple/b2dtuple.hxx>
-#include <basegfx/vector/b2dvector.hxx>
+#include <basegfx/tuple/b3dtuple.hxx>
+#include <basegfx/vector/b2dsize.hxx>
 #include <basegfx/vector/b2enums.hxx>
 #include <basegfx/vector/b3dvector.hxx>
 #include <com/sun/star/accessibility/AccessibleEventId.hpp>
@@ -169,7 +171,6 @@
 #include <com/sun/star/frame/XTerminateListener.hpp>
 #include <com/sun/star/frame/XToolbarController.hpp>
 #include <com/sun/star/graphic/XGraphic.hpp>
-#include <com/sun/star/i18n/BreakIterator.hpp>
 #include <com/sun/star/lang/DisposedException.hpp>
 #include <com/sun/star/lang/EventObject.hpp>
 #include <com/sun/star/lang/IllegalArgumentException.hpp>
@@ -196,7 +197,6 @@
 #include <com/sun/star/uno/Sequence.hxx>
 #include <com/sun/star/uno/XComponentContext.hpp>
 #include <com/sun/star/uno/XWeak.hpp>
-#include <com/sun/star/uno/genfunc.hxx>
 #include <com/sun/star/util/NumberFormat.hpp>
 #include <com/sun/star/util/URLTransformer.hpp>
 #include <com/sun/star/util/XModifyListener.hpp>
@@ -206,6 +206,8 @@
 #include <comphelper/broadcasthelper.hxx>
 #include <comphelper/compbase.hxx>
 #include <comphelper/comphelperdllapi.h>
+#include <comphelper/diagnose_ex.hxx>
+#include <comphelper/errcode.hxx>
 #include <comphelper/interfacecontainer4.hxx>
 #include <comphelper/lok.hxx>
 #include <comphelper/multicontainer2.hxx>
@@ -217,7 +219,6 @@
 #include <comphelper/sequence.hxx>
 #include <comphelper/servicehelper.hxx>
 #include <comphelper/types.hxx>
-#include <cppu/unotype.hxx>
 #include <cppuhelper/basemutex.hxx>
 #include <cppuhelper/cppuhelperdllapi.h>
 #include <cppuhelper/implbase.hxx>
@@ -226,11 +227,9 @@
 #include <cppuhelper/supportsservice.hxx>
 #include <cppuhelper/weak.hxx>
 #include <cppuhelper/weakagg.hxx>
+#include <docmodel/theme/ThemeColor.hxx>
 #include <drawinglayer/drawinglayerdllapi.h>
-#include <drawinglayer/primitive2d/CommonTypes.hxx>
 #include <drawinglayer/primitive2d/Primitive2DContainer.hxx>
-#include <drawinglayer/primitive2d/Primitive2DVisitor.hxx>
-#include <drawinglayer/primitive2d/baseprimitive2d.hxx>
 #include <drawinglayer/processor2d/baseprocessor2d.hxx>
 #include <drawinglayer/processor2d/processor2dtools.hxx>
 #include <editeng/borderline.hxx>
@@ -267,6 +266,8 @@
 #include <o3tl/deleter.hxx>
 #include <o3tl/safeint.hxx>
 #include <o3tl/sorted_vector.hxx>
+#include <o3tl/span.hxx>
+#include <o3tl/string_view.hxx>
 #include <o3tl/typed_flags_set.hxx>
 #include <o3tl/underlyingenumvalue.hxx>
 #include <o3tl/unit_conversion.hxx>
@@ -334,7 +335,6 @@
 #include <tools/datetime.hxx>
 #include <tools/debug.hxx>
 #include <tools/degree.hxx>
-#include <comphelper/diagnose_ex.hxx>
 #include <tools/fldunit.hxx>
 #include <tools/fract.hxx>
 #include <tools/gen.hxx>
@@ -350,15 +350,14 @@
 #include <tools/time.hxx>
 #include <tools/toolsdllapi.h>
 #include <tools/urlobj.hxx>
-#include <typelib/typedescription.h>
-#include <uno/data.h>
+#include <unotools/configmgr.hxx>
 #include <unotools/fontcvt.hxx>
 #include <unotools/localedatawrapper.hxx>
-#include <unotools/pathoptions.hxx>
 #include <unotools/resmgr.hxx>
 #include <unotools/syslocale.hxx>
 #include <unotools/unotoolsdllapi.h>
 #include <unotools/viewoptions.hxx>
+#include <unotools/weakref.hxx>
 #endif // PCH_LEVEL >= 3
 #if PCH_LEVEL >= 4
 #include <cell.hxx>
diff --git a/svx/source/styles/ColorSets.cxx b/svx/source/styles/ColorSets.cxx
index 5511253f3d03..00ffdae3b031 100644
--- a/svx/source/styles/ColorSets.cxx
+++ b/svx/source/styles/ColorSets.cxx
@@ -39,9 +39,9 @@ void UpdateTextPortionColorSet(const 
uno::Reference<beans::XPropertySet>& xPorti
 {
     sal_Int16 nCharColorTheme = -1;
     xPortion->getPropertyValue(UNO_NAME_EDIT_CHAR_COLOR_THEME) >>= 
nCharColorTheme;
-    svx::ThemeColorType eColorThemeType = 
svx::convertToThemeColorType(nCharColorTheme);
+    model::ThemeColorType eColorThemeType = 
model::convertToThemeColorType(nCharColorTheme);
 
-    if (eColorThemeType == svx::ThemeColorType::Unknown)
+    if (eColorThemeType == model::ThemeColorType::Unknown)
         return;
 
     Color aColor = rColorSet.getColor(eColorThemeType);
@@ -74,8 +74,8 @@ void UpdateFillColorSet(const 
uno::Reference<beans::XPropertySet>& xShape, const
 
     sal_Int16 nFillColorTheme = -1;
     xShape->getPropertyValue(UNO_NAME_FILLCOLOR_THEME) >>= nFillColorTheme;
-    svx::ThemeColorType eColorThemeType = 
svx::convertToThemeColorType(nFillColorTheme);
-    if (eColorThemeType == svx::ThemeColorType::Unknown)
+    model::ThemeColorType eColorThemeType = 
model::convertToThemeColorType(nFillColorTheme);
+    if (eColorThemeType == model::ThemeColorType::Unknown)
         return;
 
     Color aColor = rColorSet.getColor(eColorThemeType);
@@ -281,7 +281,7 @@ void Theme::ToAny(css::uno::Any& rVal) const
     if (mpColorSet)
     {
         std::vector<util::Color> aColorScheme;
-        for (auto eThemeColorType : o3tl::enumrange<svx::ThemeColorType>())
+        for (auto eThemeColorType : o3tl::enumrange<model::ThemeColorType>())
         {
             Color aColor = mpColorSet->getColor(eThemeColorType);
             aColorScheme.push_back(sal_Int32(aColor));
@@ -362,14 +362,14 @@ std::vector<Color> Theme::GetColors() const
         return {};
 
     std::vector<Color> aColors;
-    for (auto eThemeColorType : o3tl::enumrange<svx::ThemeColorType>())
+    for (auto eThemeColorType : o3tl::enumrange<model::ThemeColorType>())
     {
         aColors.push_back(mpColorSet->getColor(eThemeColorType));
     }
     return aColors;
 }
 
-Color Theme::GetColor(ThemeColorType eType) const
+Color Theme::GetColor(model::ThemeColorType eType) const
 {
     if (!mpColorSet)
         return {};
diff --git a/svx/source/table/cell.cxx b/svx/source/table/cell.cxx
index 5dbc1ee1a8e5..4d200239c2e0 100644
--- a/svx/source/table/cell.cxx
+++ b/svx/source/table/cell.cxx
@@ -1450,10 +1450,11 @@ PropertyState SAL_CALL Cell::getPropertyState( const 
OUString& PropertyName )
                     }
                     break;
                 case XATTR_FILLCOLOR:
+
                     if (pMap->nMemberId == MID_COLOR_THEME_INDEX)
                     {
                         const XFillColorItem* pColor = 
rSet.GetItem<XFillColorItem>(pMap->nWID);
-                        if (pColor->GetThemeColor().GetThemeIndex() == -1)
+                        if (pColor->GetThemeColor().getType() == 
model::ThemeColorType::Unknown)
                         {
                             eState = PropertyState_DEFAULT_VALUE;
                         }
@@ -1461,7 +1462,13 @@ PropertyState SAL_CALL Cell::getPropertyState( const 
OUString& PropertyName )
                     else if (pMap->nMemberId == MID_COLOR_LUM_MOD)
                     {
                         const XFillColorItem* pColor = 
rSet.GetItem<XFillColorItem>(pMap->nWID);
-                        if (pColor->GetThemeColor().GetLumMod() == 10000)
+                        sal_Int16 nLumMod = 10000;
+                        for (auto const& rTransform : 
pColor->GetThemeColor().getTransformations())
+                        {
+                            if (rTransform.meType == 
model::TransformationType::LumMod)
+                                nLumMod = rTransform.mnValue;
+                        }
+                        if (nLumMod == 10000)
                         {
                             eState = PropertyState_DEFAULT_VALUE;
                         }
@@ -1469,7 +1476,13 @@ PropertyState SAL_CALL Cell::getPropertyState( const 
OUString& PropertyName )
                     else if (pMap->nMemberId == MID_COLOR_LUM_OFF)
                     {
                         const XFillColorItem* pColor = 
rSet.GetItem<XFillColorItem>(pMap->nWID);
-                        if (pColor->GetThemeColor().GetLumOff() == 0)
+                        sal_Int16 nLumOff = 0;
+                        for (auto const& rTransform : 
pColor->GetThemeColor().getTransformations())
+                        {
+                            if (rTransform.meType == 
model::TransformationType::LumOff)
+                                nLumOff = rTransform.mnValue;
+                        }
+                        if (nLumOff == 0)
                         {
                             eState = PropertyState_DEFAULT_VALUE;
                         }
diff --git a/svx/source/unodraw/unoshape.cxx b/svx/source/unodraw/unoshape.cxx
index 60dd13aeac7d..9692df8c130d 100644
--- a/svx/source/unodraw/unoshape.cxx
+++ b/svx/source/unodraw/unoshape.cxx
@@ -1957,7 +1957,7 @@ beans::PropertyState SvxShape::_getPropertyState( const 
OUString& PropertyName )
                 if (pMap->nMemberId == MID_COLOR_THEME_INDEX)
                 {
                     const XFillColorItem* pColor = 
rSet.GetItem<XFillColorItem>(pMap->nWID);
-                    if (pColor->GetThemeColor().GetThemeIndex() == -1)
+                    if (pColor->GetThemeColor().getType() == 
model::ThemeColorType::Unknown)
                     {
                         eState = beans::PropertyState_DEFAULT_VALUE;
                     }
@@ -1965,7 +1965,13 @@ beans::PropertyState SvxShape::_getPropertyState( const 
OUString& PropertyName )
                 else if (pMap->nMemberId == MID_COLOR_LUM_MOD)
                 {
                     const XFillColorItem* pColor = 
rSet.GetItem<XFillColorItem>(pMap->nWID);
-                    if (pColor->GetThemeColor().GetLumMod() == 10000)
+                    sal_Int16 nLumMod = 10000;
+                    for (auto const& rTransform : 
pColor->GetThemeColor().getTransformations())
+                    {
+                        if (rTransform.meType == 
model::TransformationType::LumMod)
+                            nLumMod = rTransform.mnValue;
+                    }
+                    if (nLumMod == 10000)
                     {
                         eState = beans::PropertyState_DEFAULT_VALUE;
                     }
@@ -1973,7 +1979,13 @@ beans::PropertyState SvxShape::_getPropertyState( const 
OUString& PropertyName )
                 else if (pMap->nMemberId == MID_COLOR_LUM_OFF)
                 {
                     const XFillColorItem* pColor = 
rSet.GetItem<XFillColorItem>(pMap->nWID);
-                    if (pColor->GetThemeColor().GetLumOff() == 0)
+                    sal_Int16 nLumOff = 0;
+                    for (auto const& rTransform : 
pColor->GetThemeColor().getTransformations())
+                    {
+                        if (rTransform.meType == 
model::TransformationType::LumOff)
+                            nLumOff = rTransform.mnValue;
+                    }
+                    if (nLumOff == 0)
                     {
                         eState = beans::PropertyState_DEFAULT_VALUE;
                     }
diff --git a/svx/source/xoutdev/xattr.cxx b/svx/source/xoutdev/xattr.cxx
index 47668cc6bf6b..38a9431a47a6 100644
--- a/svx/source/xoutdev/xattr.cxx
+++ b/svx/source/xoutdev/xattr.cxx
@@ -335,7 +335,22 @@ void XColorItem::dumpAsXml(xmlTextWriterPtr pWriter) const
 
     NameOrIndex::dumpAsXml(pWriter);
 
-    maThemeColor.dumpAsXml(pWriter);
+    (void)xmlTextWriterStartElement(pWriter, BAD_CAST("theme-color"));
+
+    (void)xmlTextWriterWriteAttribute(pWriter, BAD_CAST("theme-index"),
+                                      
BAD_CAST(OString::number(sal_Int16(maThemeColor.getType())).getStr()));
+
+    for (auto const& rTransform : maThemeColor.getTransformations())
+    {
+        (void)xmlTextWriterStartElement(pWriter, BAD_CAST("transformation"));
+        (void)xmlTextWriterWriteAttribute(pWriter, BAD_CAST("type"),
+                                      
BAD_CAST(OString::number(sal_Int16(rTransform.meType)).getStr()));
+        (void)xmlTextWriterWriteAttribute(pWriter, BAD_CAST("value"),
+                                      
BAD_CAST(OString::number(rTransform.mnValue).getStr()));
+        (void)xmlTextWriterEndElement(pWriter);
+    }
+
+    (void)xmlTextWriterEndElement(pWriter);
 
     (void)xmlTextWriterEndElement(pWriter);
 }
@@ -1908,17 +1923,29 @@ bool XFillColorItem::QueryValue( css::uno::Any& rVal, 
sal_uInt8 nMemberId ) cons
     {
         case MID_COLOR_THEME_INDEX:
         {
-            rVal <<= GetThemeColor().GetThemeIndex();
+            rVal <<= sal_Int16(GetThemeColor().getType());
             break;
         }
         case MID_COLOR_LUM_MOD:
         {
-            rVal <<= GetThemeColor().GetLumMod();
+            sal_Int16 nValue = 10000;
+            for (auto const& rTransform : GetThemeColor().getTransformations())
+            {
+                if (rTransform.meType == model::TransformationType::LumMod)
+                    nValue = rTransform.mnValue;
+            }
+            rVal <<= nValue;
             break;
         }
         case MID_COLOR_LUM_OFF:
         {
-            rVal <<= GetThemeColor().GetLumOff();
+            sal_Int16 nValue = 0;
+            for (auto const& rTransform : GetThemeColor().getTransformations())
+            {
+                if (rTransform.meType == model::TransformationType::LumOff)
+                    nValue = rTransform.mnValue;
+            }
+            rVal <<= nValue;
             break;
         }
         default:
@@ -1941,23 +1968,25 @@ bool XFillColorItem::PutValue( const css::uno::Any& 
rVal, sal_uInt8 nMemberId )
             sal_Int16 nIndex = -1;
             if (!(rVal >>= nIndex))
                 return false;
-            GetThemeColor().SetThemeIndex(nIndex);
+            GetThemeColor().setType(model::convertToThemeColorType(nIndex));
             break;
         }
         case MID_COLOR_LUM_MOD:
         {
-            sal_Int16 nLumMod = -1;
+            sal_Int16 nLumMod = 10000;
             if (!(rVal >>= nLumMod))
                 return false;
-            GetThemeColor().SetLumMod(nLumMod);
+            
GetThemeColor().removeTransformations(model::TransformationType::LumMod);
+            
GetThemeColor().addTransformation({model::TransformationType::LumMod, nLumMod});
         }
         break;
         case MID_COLOR_LUM_OFF:
         {
-            sal_Int16 nLumOff = -1;
+            sal_Int16 nLumOff = 0;
             if (!(rVal >>= nLumOff))
                 return false;
-            GetThemeColor().SetLumOff(nLumOff);
+            
GetThemeColor().removeTransformations(model::TransformationType::LumOff);
+            
GetThemeColor().addTransformation({model::TransformationType::LumOff, nLumOff});
         }
         break;
         default:
diff --git a/sw/CppunitTest_sw_apitests.mk b/sw/CppunitTest_sw_apitests.mk
index 9af8873079d3..716607dbe404 100644
--- a/sw/CppunitTest_sw_apitests.mk
+++ b/sw/CppunitTest_sw_apitests.mk
@@ -29,6 +29,7 @@ $(eval $(call gb_CppunitTest_use_libraries,sw_apitests, \
     cppu \
     cppuhelper \
     drawinglayer \
+    docmodel \
     editeng \
     for \
     forui \
diff --git a/sw/CppunitTest_sw_core_draw.mk b/sw/CppunitTest_sw_core_draw.mk
index 63dfd5f828b9..0267fc60e2d5 100644
--- a/sw/CppunitTest_sw_core_draw.mk
+++ b/sw/CppunitTest_sw_core_draw.mk
@@ -21,6 +21,7 @@ $(eval $(call gb_CppunitTest_use_libraries,sw_core_draw, \
     comphelper \
     cppu \
     cppuhelper \
+    docmodel \
     sal \
     sfx \
     subsequenttest \
diff --git a/sw/CppunitTest_sw_core_theme.mk b/sw/CppunitTest_sw_core_theme.mk
index 84b462ea8245..03b42a32e666 100644
--- a/sw/CppunitTest_sw_core_theme.mk
+++ b/sw/CppunitTest_sw_core_theme.mk
@@ -21,6 +21,7 @@ $(eval $(call gb_CppunitTest_use_libraries,sw_core_theme, \
     comphelper \
     cppu \
     cppuhelper \
+    docmodel \
     sal \
     sfx \
     subsequenttest \
diff --git a/sw/CppunitTest_sw_macros_test.mk b/sw/CppunitTest_sw_macros_test.mk
index a0be4e6cd27f..9cc9b597c9ce 100644
--- a/sw/CppunitTest_sw_macros_test.mk
+++ b/sw/CppunitTest_sw_macros_test.mk
@@ -25,6 +25,7 @@ $(eval $(call gb_CppunitTest_use_libraries,sw_macros_test, \
     cppu \
     cppuhelper \
     drawinglayer \
+    docmodel \
     editeng \
     for \
     forui \
diff --git a/sw/CppunitTest_sw_ooxmlimport.mk b/sw/CppunitTest_sw_ooxmlimport.mk
index 93ecf2324477..0df45a3b11c5 100644
--- a/sw/CppunitTest_sw_ooxmlimport.mk
+++ b/sw/CppunitTest_sw_ooxmlimport.mk
@@ -24,6 +24,7 @@ $(eval $(call gb_CppunitTest_use_libraries,sw_ooxmlimport, \
     comphelper \
     cppu \
     cppuhelper \
+    docmodel \
     sal \
     sfx \
     subsequenttest \
diff --git a/sw/CppunitTest_sw_ooxmlimport2.mk 
b/sw/CppunitTest_sw_ooxmlimport2.mk
index ed8d2a92e514..89dd74ff40d1 100644
--- a/sw/CppunitTest_sw_ooxmlimport2.mk
+++ b/sw/CppunitTest_sw_ooxmlimport2.mk
@@ -24,6 +24,7 @@ $(eval $(call gb_CppunitTest_use_libraries,sw_ooxmlimport2, \
     comphelper \
     cppu \
     cppuhelper \
+    docmodel \
     sal \
     sfx \
     subsequenttest \
diff --git a/sw/CppunitTest_sw_tiledrendering.mk 
b/sw/CppunitTest_sw_tiledrendering.mk
index 198fc04a0028..830167ca21d3 100644
--- a/sw/CppunitTest_sw_tiledrendering.mk
+++ b/sw/CppunitTest_sw_tiledrendering.mk

... etc. - the rest is truncated

Reply via email to