include/svx/ColorSets.hxx          |   15 --
 oox/source/drawingml/clrscheme.cxx |   24 ++--
 svx/source/styles/ColorSets.cxx    |  214 +++++++++++++++++++++++++------------
 3 files changed, 162 insertions(+), 91 deletions(-)

New commits:
commit 2ec4a66b6d049f5d11f4ceb993ed907c790ed592
Author:     Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk>
AuthorDate: Thu Jan 5 23:37:18 2023 +0900
Commit:     Tomaž Vajngerl <qui...@gmail.com>
CommitDate: Sat Jan 14 04:44:15 2023 +0000

    svx: add UX defined theme color sets
    
    Change-Id: I82cbe16fcfaa8367dacda7ff977e18b0ed39ec2f
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/145086
    Tested-by: Jenkins
    Reviewed-by: Tomaž Vajngerl <qui...@gmail.com>

diff --git a/svx/source/styles/ColorSets.cxx b/svx/source/styles/ColorSets.cxx
index cf634b735c37..439c63d1ee35 100644
--- a/svx/source/styles/ColorSets.cxx
+++ b/svx/source/styles/ColorSets.cxx
@@ -171,7 +171,103 @@ ColorSets::~ColorSets()
 
 void ColorSets::init()
 {
-    //{
+    {
+        ColorSet aColorSet("LibreOffice");
+        aColorSet.add(model::ThemeColorType::Dark1, 0x000000);
+        aColorSet.add(model::ThemeColorType::Light1, 0xFFFFFF);
+        aColorSet.add(model::ThemeColorType::Dark2, 0x000000);
+        aColorSet.add(model::ThemeColorType::Light2, 0xFFFFFF);
+        aColorSet.add(model::ThemeColorType::Accent1, 0x18A303);
+        aColorSet.add(model::ThemeColorType::Accent2, 0x0369A3);
+        aColorSet.add(model::ThemeColorType::Accent3, 0xA33E03);
+        aColorSet.add(model::ThemeColorType::Accent4, 0x8E03A3);
+        aColorSet.add(model::ThemeColorType::Accent5, 0xC99C00);
+        aColorSet.add(model::ThemeColorType::Accent6, 0xC9211E);
+        aColorSet.add(model::ThemeColorType::Hyperlink, 0x0000EE);
+        aColorSet.add(model::ThemeColorType::FollowedHyperlink, 0x551A8B);
+        maColorSets.push_back(aColorSet);
+    }
+    {
+        ColorSet aColorSet("Rainbow");
+        aColorSet.add(model::ThemeColorType::Dark1, 0x000000);
+        aColorSet.add(model::ThemeColorType::Light1, 0xFFFFFF);
+        aColorSet.add(model::ThemeColorType::Dark2, 0x1C1C1C);
+        aColorSet.add(model::ThemeColorType::Light2, 0xDDDDDD);
+        aColorSet.add(model::ThemeColorType::Accent1, 0xFF0000);
+        aColorSet.add(model::ThemeColorType::Accent2, 0xFF8000);
+        aColorSet.add(model::ThemeColorType::Accent3, 0xFFFF00);
+        aColorSet.add(model::ThemeColorType::Accent4, 0x00A933);
+        aColorSet.add(model::ThemeColorType::Accent5, 0x2A6099);
+        aColorSet.add(model::ThemeColorType::Accent6, 0x800080);
+        aColorSet.add(model::ThemeColorType::Hyperlink, 0x0000EE);
+        aColorSet.add(model::ThemeColorType::FollowedHyperlink, 0x551A8B);
+        maColorSets.push_back(aColorSet);
+    }
+    {
+        ColorSet aColorSet("Beach");
+        aColorSet.add(model::ThemeColorType::Dark1, 0x000000);
+        aColorSet.add(model::ThemeColorType::Light1, 0xFFFFFF);
+        aColorSet.add(model::ThemeColorType::Dark2, 0xFFBF00);
+        aColorSet.add(model::ThemeColorType::Light2, 0x333333);
+        aColorSet.add(model::ThemeColorType::Accent1, 0xFFF5CE);
+        aColorSet.add(model::ThemeColorType::Accent2, 0xDEE6EF);
+        aColorSet.add(model::ThemeColorType::Accent3, 0xE8F2A1);
+        aColorSet.add(model::ThemeColorType::Accent4, 0xFFD7D7);
+        aColorSet.add(model::ThemeColorType::Accent5, 0xDEE7E5);
+        aColorSet.add(model::ThemeColorType::Accent6, 0xDDDBB6);
+        aColorSet.add(model::ThemeColorType::Hyperlink, 0x7777EE);
+        aColorSet.add(model::ThemeColorType::FollowedHyperlink, 0xEE77D7);
+        maColorSets.push_back(aColorSet);
+    }
+    {
+        ColorSet aColorSet("Sunset");
+        aColorSet.add(model::ThemeColorType::Dark1, 0x000000);
+        aColorSet.add(model::ThemeColorType::Light1, 0xFFFFFF);
+        aColorSet.add(model::ThemeColorType::Dark2, 0x492300);
+        aColorSet.add(model::ThemeColorType::Light2, 0xF6F9D4);
+        aColorSet.add(model::ThemeColorType::Accent1, 0xFFFF00);
+        aColorSet.add(model::ThemeColorType::Accent2, 0xFFBF00);
+        aColorSet.add(model::ThemeColorType::Accent3, 0xFF8000);
+        aColorSet.add(model::ThemeColorType::Accent4, 0xFF4000);
+        aColorSet.add(model::ThemeColorType::Accent5, 0xBF0041);
+        aColorSet.add(model::ThemeColorType::Accent6, 0x800080);
+        aColorSet.add(model::ThemeColorType::Hyperlink, 0x0000EE);
+        aColorSet.add(model::ThemeColorType::FollowedHyperlink, 0x551A8B);
+        maColorSets.push_back(aColorSet);
+    }
+    {
+        ColorSet aColorSet("Ocean");
+        aColorSet.add(model::ThemeColorType::Dark1, 0x000000);
+        aColorSet.add(model::ThemeColorType::Light1, 0xFFFFFF);
+        aColorSet.add(model::ThemeColorType::Dark2, 0x2A6099);
+        aColorSet.add(model::ThemeColorType::Light2, 0xCCCCCC);
+        aColorSet.add(model::ThemeColorType::Accent1, 0x800080);
+        aColorSet.add(model::ThemeColorType::Accent2, 0x55308D);
+        aColorSet.add(model::ThemeColorType::Accent3, 0x2A6099);
+        aColorSet.add(model::ThemeColorType::Accent4, 0x158466);
+        aColorSet.add(model::ThemeColorType::Accent5, 0x00A933);
+        aColorSet.add(model::ThemeColorType::Accent6, 0x81D41A);
+        aColorSet.add(model::ThemeColorType::Hyperlink, 0x0000EE);
+        aColorSet.add(model::ThemeColorType::FollowedHyperlink, 0x551A8B);
+        maColorSets.push_back(aColorSet);
+    }
+    {
+        ColorSet aColorSet("Forrest");
+        aColorSet.add(model::ThemeColorType::Dark1, 0x000000);
+        aColorSet.add(model::ThemeColorType::Light1, 0xFFFFFF);
+        aColorSet.add(model::ThemeColorType::Dark2, 0x000000);
+        aColorSet.add(model::ThemeColorType::Light2, 0xFFFFFF);
+        aColorSet.add(model::ThemeColorType::Accent1, 0x813709);
+        aColorSet.add(model::ThemeColorType::Accent2, 0x224B12);
+        aColorSet.add(model::ThemeColorType::Accent3, 0x706E0C);
+        aColorSet.add(model::ThemeColorType::Accent4, 0x355269);
+        aColorSet.add(model::ThemeColorType::Accent5, 0xBE480A);
+        aColorSet.add(model::ThemeColorType::Accent6, 0xBE480A);
+        aColorSet.add(model::ThemeColorType::Hyperlink, 0x2A6099);
+        aColorSet.add(model::ThemeColorType::FollowedHyperlink, 0x800080);
+        maColorSets.push_back(aColorSet);
+    }
+    {
         ColorSet aColorSet("Breeze");
         aColorSet.add(model::ThemeColorType::Dark1, 0x232629);
         aColorSet.add(model::ThemeColorType::Light1, 0xFCFCFC);
@@ -186,7 +282,7 @@ void ColorSets::init()
         aColorSet.add(model::ThemeColorType::Hyperlink, 0x1D99F3);
         aColorSet.add(model::ThemeColorType::FollowedHyperlink, 0x3DAEE9);
         maColorSets.push_back(aColorSet);
-    //}
+    }
 }
 
 const ColorSet& ColorSets::getColorSet(std::u16string_view rName)
commit 4d17d06279d3bceee8d4b92f444b5e425412c576
Author:     Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk>
AuthorDate: Thu Jan 5 23:22:47 2023 +0900
Commit:     Tomaž Vajngerl <qui...@gmail.com>
CommitDate: Sat Jan 14 04:44:08 2023 +0000

    svx: add resolveColor that resolves the color for input theme
    
    resolveColor added to ColorSet resolves the color for the input
    ThemeColor, which contains the index for the color in the ColorSet
    and applies all the additional tranformations defined in the
    ThemeColor.
    
    Change-Id: I5c6d53d5e1d2c61bdb22b0e58c034ec91fbeb2d4
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/145085
    Tested-by: Jenkins
    Reviewed-by: Tomaž Vajngerl <qui...@gmail.com>

diff --git a/include/svx/ColorSets.hxx b/include/svx/ColorSets.hxx
index 174e3ff70cce..4c6666833a14 100644
--- a/include/svx/ColorSets.hxx
+++ b/include/svx/ColorSets.hxx
@@ -18,7 +18,7 @@
 #include <sal/log.hxx>
 #include <sal/types.h>
 #include <svx/svxdllapi.h>
-#include <docmodel/theme/ThemeColorType.hxx>
+#include <docmodel/theme/ThemeColor.hxx>
 #include <tools/color.hxx>
 
 typedef struct _xmlTextWriter* xmlTextWriterPtr;
@@ -43,15 +43,8 @@ public:
         return maName;
     }
 
-    Color getColor(model::ThemeColorType nType) const
-    {
-        if (nType == model::ThemeColorType::Unknown)
-        {
-            SAL_WARN("svx", "ColorSet::getColor with ThemeColorType::Unknown");
-            return COL_AUTO;
-        }
-        return maColors[size_t(nType)];
-    }
+    Color resolveColor(model::ThemeColor const& rThemeColor) const;
+    Color getColor(model::ThemeColorType eType) const;
 
     void dumpAsXml(xmlTextWriterPtr pWriter) const;
 };
diff --git a/svx/source/styles/ColorSets.cxx b/svx/source/styles/ColorSets.cxx
index 0f24480c15e6..cf634b735c37 100644
--- a/svx/source/styles/ColorSets.cxx
+++ b/svx/source/styles/ColorSets.cxx
@@ -52,9 +52,7 @@ void UpdateTextPortionColorSet(const 
uno::Reference<beans::XPropertySet>& xPorti
     if (aThemeColor.getType() == model::ThemeColorType::Unknown)
         return;
 
-    Color aColor = rColorSet.getColor(aThemeColor.getType());
-    aColor = aThemeColor.applyTransformations(aColor);
-
+    Color aColor = rColorSet.resolveColor(aThemeColor);
     xPortion->setPropertyValue(UNO_NAME_EDIT_CHAR_COLOR, 
uno::Any(static_cast<sal_Int32>(aColor)));
 }
 
@@ -74,8 +72,7 @@ void UpdateFillColorSet(const 
uno::Reference<beans::XPropertySet>& xShape, const
     if (aThemeColor.getType() == model::ThemeColorType::Unknown)
         return;
 
-    Color aColor = rColorSet.getColor(aThemeColor.getType());
-    aColor = aThemeColor.applyTransformations(aColor);
+    Color aColor = rColorSet.resolveColor(aThemeColor);
     xShape->setPropertyValue(UNO_NAME_FILLCOLOR, 
uno::Any(static_cast<sal_Int32>(aColor)));
 }
 
@@ -125,6 +122,28 @@ void ColorSet::add(model::ThemeColorType eType, Color 
aColorData)
     maColors[sal_Int16(eType)] = aColorData;
 }
 
+Color ColorSet::getColor(model::ThemeColorType eType) const
+{
+    if (eType == model::ThemeColorType::Unknown)
+    {
+        SAL_WARN("svx", "ColorSet::getColor with ThemeColorType::Unknown");
+        return COL_AUTO;
+    }
+    return maColors[size_t(eType)];
+}
+
+Color ColorSet::resolveColor(model::ThemeColor const& rThemeColor) const
+{
+    auto eType = rThemeColor.getType();
+    if (eType == model::ThemeColorType::Unknown)
+    {
+        SAL_WARN("svx", "ColorSet::resolveColor with ThemeColorType::Unknown");
+        return COL_AUTO;
+    }
+    Color aColor = getColor(eType);
+    return rThemeColor.applyTransformations(aColor);
+}
+
 void ColorSet::dumpAsXml(xmlTextWriterPtr pWriter) const
 {
     (void)xmlTextWriterStartElement(pWriter, BAD_CAST("ColorSet"));
commit 0b35b239c0ff1adad2c4544d8692b5b13a0d363b
Author:     Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk>
AuthorDate: Thu Jan 5 14:46:30 2023 +0900
Commit:     Tomaž Vajngerl <qui...@gmail.com>
CommitDate: Sat Jan 14 04:44:01 2023 +0000

    svx: change ColorSet add method to use ThemeColorTyp enum
    
    Change-Id: I2034a7e915d41c6b55c8344d44be4f6a60e8287e
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/145072
    Tested-by: Tomaž Vajngerl <qui...@gmail.com>
    Reviewed-by: Tomaž Vajngerl <qui...@gmail.com>

diff --git a/include/svx/ColorSets.hxx b/include/svx/ColorSets.hxx
index a5d41cc05a57..174e3ff70cce 100644
--- a/include/svx/ColorSets.hxx
+++ b/include/svx/ColorSets.hxx
@@ -36,7 +36,7 @@ class SVXCORE_DLLPUBLIC ColorSet
 public:
     ColorSet(OUString const& rName);
 
-    void add(sal_uInt32 nIndex, Color aColorData);
+    void add(model::ThemeColorType Type, Color aColorData);
 
     const OUString& getName() const
     {
diff --git a/oox/source/drawingml/clrscheme.cxx 
b/oox/source/drawingml/clrscheme.cxx
index 5360ae423478..f4f14d0e1bce 100644
--- a/oox/source/drawingml/clrscheme.cxx
+++ b/oox/source/drawingml/clrscheme.cxx
@@ -137,21 +137,21 @@ void ClrScheme::fill(svx::ColorSet& rColorSet) const
         switch (nToken)
         {
             case XML_tx1:
-            case XML_dk1: rColorSet.add(0, rColor); break;
+            case XML_dk1: rColorSet.add(model::ThemeColorType::Dark1, rColor); 
break;
             case XML_bg1:
-            case XML_lt1: rColorSet.add(1, rColor); break;
+            case XML_lt1: rColorSet.add(model::ThemeColorType::Light1, 
rColor); break;
             case XML_tx2:
-            case XML_dk2: rColorSet.add(2, rColor); break;
+            case XML_dk2: rColorSet.add(model::ThemeColorType::Dark2, rColor); 
break;
             case XML_bg2:
-            case XML_lt2: rColorSet.add(3, rColor); break;
-            case XML_accent1: rColorSet.add(4, rColor); break;
-            case XML_accent2: rColorSet.add(5, rColor); break;
-            case XML_accent3: rColorSet.add(6, rColor); break;
-            case XML_accent4: rColorSet.add(7, rColor); break;
-            case XML_accent5: rColorSet.add(8, rColor); break;
-            case XML_accent6: rColorSet.add(9, rColor); break;
-            case XML_hlink: rColorSet.add(10, rColor); break;
-            case XML_folHlink: rColorSet.add(11, rColor); break;
+            case XML_lt2: rColorSet.add(model::ThemeColorType::Light2, 
rColor); break;
+            case XML_accent1: rColorSet.add(model::ThemeColorType::Accent1, 
rColor); break;
+            case XML_accent2: rColorSet.add(model::ThemeColorType::Accent2, 
rColor); break;
+            case XML_accent3: rColorSet.add(model::ThemeColorType::Accent3, 
rColor); break;
+            case XML_accent4: rColorSet.add(model::ThemeColorType::Accent4, 
rColor); break;
+            case XML_accent5: rColorSet.add(model::ThemeColorType::Accent5, 
rColor); break;
+            case XML_accent6: rColorSet.add(model::ThemeColorType::Accent6, 
rColor); break;
+            case XML_hlink: rColorSet.add(model::ThemeColorType::Hyperlink, 
rColor); break;
+            case XML_folHlink: 
rColorSet.add(model::ThemeColorType::FollowedHyperlink, rColor); break;
             default: break;
         }
     }
diff --git a/svx/source/styles/ColorSets.cxx b/svx/source/styles/ColorSets.cxx
index b8a4fa08e157..0f24480c15e6 100644
--- a/svx/source/styles/ColorSets.cxx
+++ b/svx/source/styles/ColorSets.cxx
@@ -118,9 +118,11 @@ ColorSet::ColorSet(OUString const& rName)
     : maName(rName)
 {}
 
-void ColorSet::add(sal_uInt32 nIndex, Color aColorData)
+void ColorSet::add(model::ThemeColorType eType, Color aColorData)
 {
-    maColors[nIndex] = aColorData;
+    if (eType == model::ThemeColorType::Unknown)
+        return;
+    maColors[sal_Int16(eType)] = aColorData;
 }
 
 void ColorSet::dumpAsXml(xmlTextWriterPtr pWriter) const
@@ -150,70 +152,22 @@ ColorSets::~ColorSets()
 
 void ColorSets::init()
 {
-    {
+    //{
         ColorSet aColorSet("Breeze");
-        aColorSet.add(0,  0xFCFCFC);
-        aColorSet.add(1,  0x232629);
-        aColorSet.add(2,  0xEFF0F1);
-        aColorSet.add(3,  0x31363B);
-        aColorSet.add(4,  0xDA4453);
-        aColorSet.add(5,  0xF47750);
-        aColorSet.add(6,  0xFDBC4B);
-        aColorSet.add(7,  0xC9CE3B);
-        aColorSet.add(8,  0x1CDC9A);
-        aColorSet.add(9,  0x2ECC71);
-        aColorSet.add(10, 0x1D99F3);
-        aColorSet.add(11, 0x3DAEE9);
-        maColorSets.push_back(aColorSet);
-    }
-    {
-        ColorSet aColorSet("Material Blue");
-        aColorSet.add(0,  0xFFFFFF);
-        aColorSet.add(1,  0x212121);
-        aColorSet.add(2,  0xECEFF1);
-        aColorSet.add(3,  0x37474F);
-        aColorSet.add(4,  0x7986CB);
-        aColorSet.add(5,  0x303F9F);
-        aColorSet.add(6,  0x64B5F6);
-        aColorSet.add(7,  0x1976D2);
-        aColorSet.add(8,  0x4FC3F7);
-        aColorSet.add(9,  0x0277BD);
-        aColorSet.add(10, 0x4DD0E1);
-        aColorSet.add(11, 0x0097A7);
-        maColorSets.push_back(aColorSet);
-    }
-    {
-        ColorSet aColorSet("Material Red");
-        aColorSet.add(0,  0xFFFFFF);
-        aColorSet.add(1,  0x212121);
-        aColorSet.add(2,  0xF5F5F5);
-        aColorSet.add(3,  0x424242);
-        aColorSet.add(4,  0xFF9800);
-        aColorSet.add(5,  0xFF6D00);
-        aColorSet.add(6,  0xFF5722);
-        aColorSet.add(7,  0xDD2C00);
-        aColorSet.add(8,  0xF44336);
-        aColorSet.add(9,  0xD50000);
-        aColorSet.add(10, 0xE91E63);
-        aColorSet.add(11, 0xC51162);
-        maColorSets.push_back(aColorSet);
-    }
-    {
-        ColorSet aColorSet("Material Green");
-        aColorSet.add(0,  0xFFFFFF);
-        aColorSet.add(1,  0x212121);
-        aColorSet.add(2,  0xF5F5F5);
-        aColorSet.add(3,  0x424242);
-        aColorSet.add(4,  0x009688);
-        aColorSet.add(5,  0x00bfa5);
-        aColorSet.add(6,  0x4caf50);
-        aColorSet.add(7,  0x00c853);
-        aColorSet.add(8,  0x8bc34a);
-        aColorSet.add(9,  0x64dd17);
-        aColorSet.add(10, 0xcddc39);
-        aColorSet.add(11, 0xaeea00);
+        aColorSet.add(model::ThemeColorType::Dark1, 0x232629);
+        aColorSet.add(model::ThemeColorType::Light1, 0xFCFCFC);
+        aColorSet.add(model::ThemeColorType::Dark2, 0x31363B);
+        aColorSet.add(model::ThemeColorType::Light2, 0xEFF0F1);
+        aColorSet.add(model::ThemeColorType::Accent1, 0xDA4453);
+        aColorSet.add(model::ThemeColorType::Accent2, 0xF47750);
+        aColorSet.add(model::ThemeColorType::Accent3, 0xFDBC4B);
+        aColorSet.add(model::ThemeColorType::Accent4, 0xC9CE3B);
+        aColorSet.add(model::ThemeColorType::Accent5, 0x1CDC9A);
+        aColorSet.add(model::ThemeColorType::Accent6, 0x2ECC71);
+        aColorSet.add(model::ThemeColorType::Hyperlink, 0x1D99F3);
+        aColorSet.add(model::ThemeColorType::FollowedHyperlink, 0x3DAEE9);
         maColorSets.push_back(aColorSet);
-    }
+    //}
 }
 
 const ColorSet& ColorSets::getColorSet(std::u16string_view rName)
@@ -271,8 +225,11 @@ void Theme::ToAny(css::uno::Any& rVal) const
         std::vector<util::Color> aColorScheme;
         for (auto eThemeColorType : o3tl::enumrange<model::ThemeColorType>())
         {
-            Color aColor = mpColorSet->getColor(eThemeColorType);
-            aColorScheme.push_back(sal_Int32(aColor));
+            if (eThemeColorType != model::ThemeColorType::Unknown)
+            {
+                Color aColor = mpColorSet->getColor(eThemeColorType);
+                aColorScheme.push_back(sal_Int32(aColor));
+            }
         }
 
         aMap["ColorSchemeName"] <<= mpColorSet->getName();
@@ -311,15 +268,20 @@ std::unique_ptr<Theme> Theme::FromAny(const 
css::uno::Any& rVal)
     {
         uno::Sequence<util::Color> aColors;
         it->second >>= aColors;
-        for (size_t i = 0; i < aColors.size(); ++i)
+
+        SAL_WARN_IF(aColors.size() > 12, "svx", "Theme::FromAny: number of 
colors greater than max theme colors supported");
+
+        for (auto eThemeColorType : o3tl::enumrange<model::ThemeColorType>())
         {
-            if (i >= 12)
+            if (eThemeColorType != model::ThemeColorType::Unknown)
             {
-                SAL_WARN("svx", "Theme::FromAny: too many colors in the color 
set");
-                break;
+                size_t nIndex(static_cast<sal_Int16>(eThemeColorType));
+                if (nIndex < aColors.size())
+                {
+                    Color aColor(ColorTransparency, aColors[nIndex]);
+                    pColorSet->add(eThemeColorType, aColor);
+                }
             }
-
-            pColorSet->add(i, Color(ColorTransparency, aColors[i]));
         }
     }
 
@@ -352,7 +314,8 @@ std::vector<Color> Theme::GetColors() const
     std::vector<Color> aColors;
     for (auto eThemeColorType : o3tl::enumrange<model::ThemeColorType>())
     {
-        aColors.push_back(mpColorSet->getColor(eThemeColorType));
+        if (eThemeColorType != model::ThemeColorType::Unknown)
+            aColors.push_back(mpColorSet->getColor(eThemeColorType));
     }
     return aColors;
 }

Reply via email to