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; }