[Libreoffice-commits] core.git: Branch 'feature/themesupport2' - 5 commits - editeng/source include/editeng include/oox include/sfx2 include/svx oox/source sfx2/Library_sfx.mk sfx2/source svx/Library_svxcore.mk svx/source sw/source
Sarper Akdemir (via logerrit)
logerrit at kemper.freedesktop.org
Wed Aug 25 20:22:10 UTC 2021
Rebased ref, commits from common ancestor:
commit de40c940c3a94588d44a3d1f6d8cd4191cca4f73
Author: Sarper Akdemir <sarper.akdemir at collabora.com>
AuthorDate: Wed Aug 25 02:24:42 2021 +0300
Commit: Sarper Akdemir <sarper.akdemir at collabora.com>
CommitDate: Wed Aug 25 17:06:36 2021 +0300
implement color tint or shade import for pptx
Change-Id: I38661afecec6d769bd41b8c3b71c9a4de5e69440
diff --git a/include/oox/drawingml/color.hxx b/include/oox/drawingml/color.hxx
index 00473cfe6f27..bd67982c6e92 100644
--- a/include/oox/drawingml/color.hxx
+++ b/include/oox/drawingml/color.hxx
@@ -99,6 +99,7 @@ public:
/** Returns the scheme name from the a:schemeClr element for interoperability purposes */
const OUString& getSchemeColorName() const { return msSchemeName; }
sal_Int16 getSchemeColorIndex() const;
+ sal_Int16 getTintOrShade();
/** Returns the unaltered list of transformations for interoperability purposes */
const css::uno::Sequence< css::beans::PropertyValue >& getTransformations() const { return maInteropTransformations;}
diff --git a/oox/source/drawingml/color.cxx b/oox/source/drawingml/color.cxx
index edb317eaac3d..1c1e9f7a110a 100644
--- a/oox/source/drawingml/color.cxx
+++ b/oox/source/drawingml/color.cxx
@@ -478,6 +478,22 @@ void Color::clearTransparence()
mnAlpha = MAX_PERCENT;
}
+sal_Int16 Color::getTintOrShade()
+{
+ for(auto const& aTransform : maTransforms)
+ {
+ switch(aTransform.mnToken)
+ {
+ case XML_tint:
+ // from 1000th percent to 100th percent...
+ return aTransform.mnValue/10;
+ case XML_shade:
+ // from 1000th percent to 100th percent...
+ return -aTransform.mnValue/10;
+ }
+ }
+ return 0;
+}
::Color Color::getColor( const GraphicHelper& rGraphicHelper, ::Color nPhClr ) const
{
const sal_Int32 nTempC1 = mnC1;
diff --git a/oox/source/drawingml/textcharacterproperties.cxx b/oox/source/drawingml/textcharacterproperties.cxx
index 90b0e38c1d3a..bd4d051a490b 100644
--- a/oox/source/drawingml/textcharacterproperties.cxx
+++ b/oox/source/drawingml/textcharacterproperties.cxx
@@ -113,6 +113,7 @@ void TextCharacterProperties::pushToPropMap( PropertyMap& rPropMap, const XmlFil
rPropMap.setProperty(PROP_CharColor, aColor.getColor(rFilter.getGraphicHelper()));
// set color theme index
rPropMap.setProperty(PROP_CharColorTheme, aColor.getSchemeColorIndex());
+ rPropMap.setProperty(PROP_CharColorTintOrShade, aColor.getTintOrShade());
if (aColor.hasTransparency())
{
commit aef22c3bbf1b4bb8ab9ba2bccb7005e0d0c75cb3
Author: Sarper Akdemir <sarper.akdemir at collabora.com>
AuthorDate: Tue Aug 24 23:58:35 2021 +0300
Commit: Sarper Akdemir <sarper.akdemir at collabora.com>
CommitDate: Wed Aug 25 17:06:36 2021 +0300
rename getSchemeName getSchemeIndex to remove ambiguity
Change-Id: Ib1fa16b15c219b38754ffe5cbfc9d11ff2be0fcd
diff --git a/include/oox/drawingml/color.hxx b/include/oox/drawingml/color.hxx
index f213dba9a973..00473cfe6f27 100644
--- a/include/oox/drawingml/color.hxx
+++ b/include/oox/drawingml/color.hxx
@@ -97,8 +97,8 @@ public:
sal_Int16 getTransparency() const;
/** Returns the scheme name from the a:schemeClr element for interoperability purposes */
- const OUString& getSchemeName() const { return msSchemeName; }
- sal_Int16 getSchemeIndex() const;
+ const OUString& getSchemeColorName() const { return msSchemeName; }
+ sal_Int16 getSchemeColorIndex() const;
/** Returns the unaltered list of transformations for interoperability purposes */
const css::uno::Sequence< css::beans::PropertyValue >& getTransformations() const { return maInteropTransformations;}
diff --git a/oox/source/drawingml/color.cxx b/oox/source/drawingml/color.cxx
index 5d3ea6cb8708..edb317eaac3d 100644
--- a/oox/source/drawingml/color.cxx
+++ b/oox/source/drawingml/color.cxx
@@ -660,7 +660,7 @@ sal_Int16 Color::getTransparency() const
return sal_Int16(std::round( (1.0 * (MAX_PERCENT - mnAlpha)) / PER_PERCENT) );
}
-sal_Int16 Color::getSchemeIndex() const
+sal_Int16 Color::getSchemeColorIndex() const
{
static std::map<OUString, sal_Int32> const aSchemeColorNameToIndex{
{ "dk1", 0 }, { "lt1", 1 }, { "dk2", 2 }, { "lt2", 3 },
diff --git a/oox/source/drawingml/shape.cxx b/oox/source/drawingml/shape.cxx
index b0e2ddef30e7..78a482abd446 100644
--- a/oox/source/drawingml/shape.cxx
+++ b/oox/source/drawingml/shape.cxx
@@ -1060,7 +1060,7 @@ Reference< XShape > const & Shape::createAndInsert(
// Store style-related properties to InteropGrabBag to be able to export them back
uno::Sequence<beans::PropertyValue> aProperties = comphelper::InitPropertySequence(
{
- {"SchemeClr", uno::makeAny(pLineRef->maPhClr.getSchemeName())},
+ {"SchemeClr", uno::makeAny(pLineRef->maPhClr.getSchemeColorName())},
{"Idx", uno::makeAny(pLineRef->mnThemedIdx)},
{"Color", uno::makeAny(nLinePhClr)},
{"LineStyle", uno::makeAny(aLineProperties.getLineStyle())},
@@ -1078,7 +1078,7 @@ Reference< XShape > const & Shape::createAndInsert(
nFillPhClr = pFillRef->maPhClr.getColor(rGraphicHelper);
}
- OUString sColorScheme = pFillRef->maPhClr.getSchemeName();
+ OUString sColorScheme = pFillRef->maPhClr.getSchemeColorName();
if( !sColorScheme.isEmpty() )
{
uno::Sequence<beans::PropertyValue> aProperties = comphelper::InitPropertySequence(
@@ -1100,7 +1100,7 @@ Reference< XShape > const & Shape::createAndInsert(
// Store style-related properties to InteropGrabBag to be able to export them back
uno::Sequence<beans::PropertyValue> aProperties = comphelper::InitPropertySequence(
{
- {"SchemeClr", uno::makeAny(pEffectRef->maPhClr.getSchemeName())},
+ {"SchemeClr", uno::makeAny(pEffectRef->maPhClr.getSchemeColorName())},
{"Idx", uno::makeAny(pEffectRef->mnThemedIdx)},
{"Transformations", uno::makeAny(pEffectRef->maPhClr.getTransformations())}
});
@@ -1349,13 +1349,13 @@ Reference< XShape > const & Shape::createAndInsert(
aProperties.push_back(comphelper::makePropertyValue("EmuLineWidth", aLineProperties.moLineWidth.get(0)));
aProperties.push_back(comphelper::makePropertyValue("OriginalSolidFillClr", aShapeProps.getProperty(PROP_FillColor)));
aProperties.push_back(comphelper::makePropertyValue("OriginalLnSolidFillClr", aShapeProps.getProperty(PROP_LineColor)));
- OUString sColorFillScheme = aFillProperties.maFillColor.getSchemeName();
+ OUString sColorFillScheme = aFillProperties.maFillColor.getSchemeColorName();
if( !aFillProperties.maFillColor.isPlaceHolder() && !sColorFillScheme.isEmpty() )
{
aProperties.push_back(comphelper::makePropertyValue("SpPrSolidFillSchemeClr", sColorFillScheme));
aProperties.push_back(comphelper::makePropertyValue("SpPrSolidFillSchemeClrTransformations", aFillProperties.maFillColor.getTransformations()));
}
- OUString sLnColorFillScheme = aLineProperties.maLineFill.maFillColor.getSchemeName();
+ OUString sLnColorFillScheme = aLineProperties.maLineFill.maFillColor.getSchemeColorName();
if( !aLineProperties.maLineFill.maFillColor.isPlaceHolder() && !sLnColorFillScheme.isEmpty() )
{
aProperties.push_back(comphelper::makePropertyValue("SpPrLnSolidFillSchemeClr", sLnColorFillScheme));
@@ -1379,7 +1379,7 @@ Reference< XShape > const & Shape::createAndInsert(
std::vector<beans::PropertyValue> aGradientStop;
aGradientStop.push_back(comphelper::makePropertyValue("Pos", rPos));
- OUString sStopColorScheme = rColor.getSchemeName();
+ OUString sStopColorScheme = rColor.getSchemeColorName();
if( sStopColorScheme.isEmpty() )
{
// save RGB color
@@ -1422,7 +1422,7 @@ Reference< XShape > const & Shape::createAndInsert(
aEffectsGrabBag.push_back(comphelper::makePropertyValue("Attribs", aEffect.Value));
Color& aColor( it->moColor );
- OUString sColorScheme = aColor.getSchemeName();
+ OUString sColorScheme = aColor.getSchemeColorName();
if( sColorScheme.isEmpty() )
{
// RGB color and transparency value
diff --git a/oox/source/drawingml/shape3dproperties.cxx b/oox/source/drawingml/shape3dproperties.cxx
index 18f53a7e309f..c4e03ddc9390 100644
--- a/oox/source/drawingml/shape3dproperties.cxx
+++ b/oox/source/drawingml/shape3dproperties.cxx
@@ -312,7 +312,7 @@ css::uno::Sequence< css::beans::PropertyValue > Generic3DProperties::getColorAtt
const Color& rColor, const GraphicHelper& rGraphicHelper, ::Color rPhClr )
{
css::uno::Sequence<css::beans::PropertyValue> aSeq(2);
- const OUString& sColorScheme = rColor.getSchemeName();
+ const OUString& sColorScheme = rColor.getSchemeColorName();
if( sColorScheme.isEmpty() )
{
// RGB color and transparency value
diff --git a/oox/source/drawingml/textcharacterproperties.cxx b/oox/source/drawingml/textcharacterproperties.cxx
index 9cbc331d05fa..90b0e38c1d3a 100644
--- a/oox/source/drawingml/textcharacterproperties.cxx
+++ b/oox/source/drawingml/textcharacterproperties.cxx
@@ -112,7 +112,7 @@ void TextCharacterProperties::pushToPropMap( PropertyMap& rPropMap, const XmlFil
Color aColor = maFillProperties.getBestSolidColor();
rPropMap.setProperty(PROP_CharColor, aColor.getColor(rFilter.getGraphicHelper()));
// set color theme index
- rPropMap.setProperty(PROP_CharColorTheme, aColor.getSchemeIndex());
+ rPropMap.setProperty(PROP_CharColorTheme, aColor.getSchemeColorIndex());
if (aColor.hasTransparency())
{
commit ec68ca0b5fb6773f42600f6a5825b4794cdb0990
Author: Sarper Akdemir <sarper.akdemir at collabora.com>
AuthorDate: Fri Aug 20 00:45:55 2021 +0300
Commit: Sarper Akdemir <sarper.akdemir at collabora.com>
CommitDate: Wed Aug 25 17:06:36 2021 +0300
implement initial pptx theme color import
Change-Id: Ic3a46c2d01c8f8be73f22d2af41aa11a9bb3267d
diff --git a/include/oox/drawingml/color.hxx b/include/oox/drawingml/color.hxx
index 59f417cfac52..f213dba9a973 100644
--- a/include/oox/drawingml/color.hxx
+++ b/include/oox/drawingml/color.hxx
@@ -98,6 +98,8 @@ public:
/** Returns the scheme name from the a:schemeClr element for interoperability purposes */
const OUString& getSchemeName() const { return msSchemeName; }
+ sal_Int16 getSchemeIndex() const;
+
/** Returns the unaltered list of transformations for interoperability purposes */
const css::uno::Sequence< css::beans::PropertyValue >& getTransformations() const { return maInteropTransformations;}
diff --git a/oox/source/drawingml/color.cxx b/oox/source/drawingml/color.cxx
index 1cd5d2ebaed7..5d3ea6cb8708 100644
--- a/oox/source/drawingml/color.cxx
+++ b/oox/source/drawingml/color.cxx
@@ -660,6 +660,21 @@ sal_Int16 Color::getTransparency() const
return sal_Int16(std::round( (1.0 * (MAX_PERCENT - mnAlpha)) / PER_PERCENT) );
}
+sal_Int16 Color::getSchemeIndex() const
+{
+ static std::map<OUString, sal_Int32> const aSchemeColorNameToIndex{
+ { "dk1", 0 }, { "lt1", 1 }, { "dk2", 2 }, { "lt2", 3 },
+ { "accent1", 4 }, { "accent2", 5 }, { "accent3", 6 }, { "accent4", 7 },
+ { "accent5", 8 }, { "accent6", 9 }, { "hlink", 10 }, { "folHlink", 11 }
+ };
+
+ auto aIt = aSchemeColorNameToIndex.find(msSchemeName);
+ if( aIt == aSchemeColorNameToIndex.end() )
+ return -1;
+ else
+ return aIt->second;
+}
+
// private --------------------------------------------------------------------
void Color::setResolvedRgb( ::Color nRgb ) const
diff --git a/oox/source/drawingml/textcharacterproperties.cxx b/oox/source/drawingml/textcharacterproperties.cxx
index 4eb5acaffb56..9cbc331d05fa 100644
--- a/oox/source/drawingml/textcharacterproperties.cxx
+++ b/oox/source/drawingml/textcharacterproperties.cxx
@@ -111,6 +111,8 @@ void TextCharacterProperties::pushToPropMap( PropertyMap& rPropMap, const XmlFil
{
Color aColor = maFillProperties.getBestSolidColor();
rPropMap.setProperty(PROP_CharColor, aColor.getColor(rFilter.getGraphicHelper()));
+ // set color theme index
+ rPropMap.setProperty(PROP_CharColorTheme, aColor.getSchemeIndex());
if (aColor.hasTransparency())
{
diff --git a/oox/source/token/properties.txt b/oox/source/token/properties.txt
index 68b5e2d14af5..1b20bfe61828 100644
--- a/oox/source/token/properties.txt
+++ b/oox/source/token/properties.txt
@@ -54,6 +54,8 @@ CharBackColor
CharCaseMap
CharColor
CharContoured
+CharColorTheme
+CharColorTintOrShade
CharEscapement
CharEscapementHeight
CharFontCharSet
commit 88b6801ff2aa61ed2f0d64cef94fe6a9c09f3a35
Author: Sarper Akdemir <sarper.akdemir at collabora.com>
AuthorDate: Wed Aug 18 16:04:37 2021 +0300
Commit: Sarper Akdemir <sarper.akdemir at collabora.com>
CommitDate: Wed Aug 25 17:06:36 2021 +0300
expose the SvxColorItem theme related uno for draw/impress
Change-Id: I6d8dc19d5c2418aa61fed507cb2bb5b119d15acd
diff --git a/include/editeng/unoprnms.hxx b/include/editeng/unoprnms.hxx
index c637521dcf2d..3c5011210d51 100644
--- a/include/editeng/unoprnms.hxx
+++ b/include/editeng/unoprnms.hxx
@@ -325,6 +325,8 @@
#define UNO_NAME_EDIT_CHAR_LOCALE_COMPLEX "CharLocaleComplex"
#define UNO_NAME_EDIT_CHAR_COLOR "CharColor"
+#define UNO_NAME_EDIT_CHAR_COLOR_THEME "CharColorTheme"
+#define UNO_NAME_EDIT_CHAR_COLOR_TINT_OR_SHADE "CharColorTintOrShade"
#define UNO_NAME_EDIT_CHAR_TRANSPARENCE "CharTransparence"
#define UNO_NAME_EDIT_CHAR_CROSSEDOUT "CharCrossedOut"
#define UNO_NAME_EDIT_CHAR_STRIKEOUT "CharStrikeout"
diff --git a/include/editeng/unotext.hxx b/include/editeng/unotext.hxx
index 0c09b4361edc..896130f6d257 100644
--- a/include/editeng/unotext.hxx
+++ b/include/editeng/unotext.hxx
@@ -85,8 +85,10 @@ struct SfxItemPropertyMapEntry;
{ u"" UNO_NAME_EDIT_CHAR_POSTURE, EE_CHAR_ITALIC, ::cppu::UnoType<css::awt::FontSlant>::get(),0, MID_POSTURE }, \
{ u"" UNO_NAME_EDIT_CHAR_WEIGHT, EE_CHAR_WEIGHT, cppu::UnoType<float>::get(), 0, MID_WEIGHT }, \
{ u"" UNO_NAME_EDIT_CHAR_LOCALE, EE_CHAR_LANGUAGE, ::cppu::UnoType<css::lang::Locale>::get(),0, MID_LANG_LOCALE }, \
- { u"" UNO_NAME_EDIT_CHAR_COLOR, EE_CHAR_COLOR, ::cppu::UnoType<sal_Int32>::get(), 0, 0 }, \
+ { u"" UNO_NAME_EDIT_CHAR_COLOR, EE_CHAR_COLOR, ::cppu::UnoType<sal_Int32>::get(), 0, MID_COLOR_RGB }, \
{ u"" UNO_NAME_EDIT_CHAR_TRANSPARENCE,EE_CHAR_COLOR, ::cppu::UnoType<sal_Int16>::get(), 0, MID_COLOR_ALPHA }, \
+ { u"" UNO_NAME_EDIT_CHAR_COLOR_THEME, EE_CHAR_COLOR, ::cppu::UnoType<sal_Int16>::get(), 0, MID_COLOR_THEME_INDEX }, \
+ { u"" UNO_NAME_EDIT_CHAR_COLOR_TINT_OR_SHADE, EE_CHAR_COLOR, ::cppu::UnoType<sal_Int16>::get(), 0, MID_COLOR_TINT_OR_SHADE }, \
{ u"CharBackColor", EE_CHAR_BKGCOLOR, ::cppu::UnoType<sal_Int32>::get(), 0, 0 }, \
{ u"CharBackTransparent", EE_CHAR_BKGCOLOR, ::cppu::UnoType<bool>::get(), 0, MID_GRAPHIC_TRANSPARENT }, \
{ u"" UNO_NAME_EDIT_CHAR_ESCAPEMENT, EE_CHAR_ESCAPEMENT, ::cppu::UnoType<sal_Int16>::get(), 0, MID_ESC }, \
diff --git a/svx/source/unodraw/unoprov.cxx b/svx/source/unodraw/unoprov.cxx
index e90d980ebd89..f5564ef236d0 100644
--- a/svx/source/unodraw/unoprov.cxx
+++ b/svx/source/unodraw/unoprov.cxx
@@ -578,7 +578,9 @@ static SfxItemPropertyMapEntry const * ImplGetSvxControlShapePropertyMap()
{ u"" UNO_NAME_EDIT_CHAR_UNDERLINE, 0, cppu::UnoType<sal_Int16>::get(), 0, 0 },
{ u"" UNO_NAME_EDIT_CHAR_STRIKEOUT, 0, cppu::UnoType<sal_Int16>::get(), 0, 0},
{ u"" UNO_NAME_EDIT_CHAR_CASEMAP, 0, cppu::UnoType<sal_Int16>::get(), 0, 0 },
- { u"" UNO_NAME_EDIT_CHAR_COLOR, 0, cppu::UnoType<sal_Int32>::get(), 0, 0 },
+ { u"" UNO_NAME_EDIT_CHAR_COLOR, 0, cppu::UnoType<sal_Int32>::get(), 0, MID_COLOR_RGB },
+ { u"" UNO_NAME_EDIT_CHAR_COLOR_THEME, 0, cppu::UnoType<sal_Int16>::get(), 0, MID_COLOR_THEME_INDEX },
+ { u"" UNO_NAME_EDIT_CHAR_COLOR_TINT_OR_SHADE, 0, cppu::UnoType<sal_Int16>::get(), 0, MID_COLOR_TINT_OR_SHADE },
{ u"CharBackColor", 0, cppu::UnoType<sal_Int32>::get(), 0, 0 },
{ u"CharBackTransparent", 0, cppu::UnoType<bool>::get(), 0, 0 },
{ u"CharRelief", 0, cppu::UnoType<sal_Int16>::get(), 0, 0 },
commit 1647d34d8573f4940c0cbb7fb6cd9c6b4e5a4a15
Author: Sarper Akdemir <sarper.akdemir at collabora.com>
AuthorDate: Wed Jul 28 02:03:12 2021 +0300
Commit: Sarper Akdemir <sarper.akdemir at collabora.com>
CommitDate: Wed Aug 25 17:06:35 2021 +0300
make colorsets work outside of styles and with direct formatting
Change-Id: Id3cb073d4567f4dbc70a52bc08403751f4c8ddd4
diff --git a/editeng/source/items/textitem.cxx b/editeng/source/items/textitem.cxx
index ac87db3a2573..11407bb79a31 100644
--- a/editeng/source/items/textitem.cxx
+++ b/editeng/source/items/textitem.cxx
@@ -21,6 +21,7 @@
#include <com/sun/star/awt/FontDescriptor.hpp>
#include <com/sun/star/frame/status/FontHeight.hpp>
#include <math.h>
+#include <optional>
#include <sal/log.hxx>
#include <o3tl/safeint.hxx>
#include <osl/diagnose.h>
@@ -78,6 +79,9 @@
#include <editeng/eerdll.hxx>
#include <libxml/xmlwriter.h>
+#include <sfx2/sfxsids.hrc>
+#include <sfx2/objsh.hxx>
+
using namespace ::com::sun::star;
using namespace ::com::sun::star::text;
@@ -1309,20 +1313,103 @@ bool SvxContourItem::GetPresentation
return true;
}
+// class ThemeColorData
+bool ThemeColorData::operator==(const ThemeColorData &rOther) const
+{
+ // Comparing individual data doesn't make sense if both are not theme colors
+ if(mnThemeColorIndex <= -1 && rOther.mnThemeColorIndex <= -1)
+ return true;
+ else
+ return mnThemeColorIndex == rOther.mnThemeColorIndex
+ && mnTintShade == rOther.mnTintShade;
+}
+
+std::optional<Color> ThemeColorData::getThemeColorIfNeedsUpdate() const
+{
+ if (mnThemeColorIndex > -1)
+ {
+ // try to get the pointer for ColorSets if it's not there...
+ if (!mpColorSets)
+ {
+ if (SfxObjectShell* pObjShell = SfxObjectShell::Current())
+ {
+ if (const SfxColorSetListItem* pColorSetItem = pObjShell->GetItem(SID_COLOR_SETS))
+ {
+ mpColorSets = &pColorSetItem->GetSfxColorSetList();
+ }
+ }
+ }
+
+ if (mpColorSets)
+ {
+ Color aColor = mpColorSets->getThemeColorSet().getColor(mnThemeColorIndex);
+
+ // only calculate transformations applied color when necessary
+ if(aColor != maCachedBaseColor || mbRecalculateColor)
+ {
+ maCachedBaseColor = aColor;
+ mbRecalculateColor = false;
+ aColor.ApplyTintOrShade(mnTintShade);
+ return aColor;
+ }
+ }
+ }
+
+ // if there's no update needed or the color isn't a theme color return nullopt
+ return std::nullopt;
+}
+
+void ThemeColorData::setTintOrShade(sal_Int16 nTintShade)
+{
+ RecalculateOnNextGet();
+ mnTintShade = nTintShade;
+}
+
+sal_Int16 ThemeColorData::getTintOrShade() const
+{
+ return mnTintShade;
+}
+
+sal_Int16 ThemeColorData::getThemeColorIndex() const
+{
+ return mnThemeColorIndex;
+}
+
+void ThemeColorData::setThemeColorIndex(sal_Int16 nThemeColorIndex)
+{
+ mnThemeColorIndex = nThemeColorIndex;
+}
+
+void ThemeColorData::RecalculateOnNextGet()
+{
+ // There are a few problems with triggerring a recalculate
+ // If we're doing a calculation outside of getThemeColorIfNeedsUpdate()
+ // we have to store the calculated color as a member.
+ // CalculateAndStore()
+
+ // If instead we store a flag that we can check to whether or not recalculate
+ // this will work for every kind of transformation so this might make the most sense.
+ mbRecalculateColor = true;
+
+ // Most memory efficient way of doing this is playing with CachedBaseColor.
+ // which will be wrong if the base color is the same as whatever constant we
+ // set here...
+ // Also pretty unmaintainable in my opinion.
+ // maCachedBaseColor = 0xDEADBEEF;
+}
+
// class SvxColorItem ----------------------------------------------------
SvxColorItem::SvxColorItem( const sal_uInt16 nId ) :
SfxPoolItem(nId),
mColor( COL_BLACK ),
- maThemeIndex(-1),
- maTintShade(0)
+ maThemeColorData()
{
}
SvxColorItem::SvxColorItem( const Color& rCol, const sal_uInt16 nId ) :
SfxPoolItem( nId ),
mColor( rCol ),
- maThemeIndex(-1),
- maTintShade(0)
+ maThemeColorData()
{
}
@@ -1330,14 +1417,33 @@ SvxColorItem::~SvxColorItem()
{
}
+sal_Int16 SvxColorItem::GetThemeIndex() const
+{
+ return maThemeColorData.getThemeColorIndex();
+}
+
+void SvxColorItem::SetThemeIndex(sal_Int16 nIndex)
+{
+ maThemeColorData.setThemeColorIndex(nIndex);
+}
+
+sal_Int16 SvxColorItem::GetTintOrShade() const
+{
+ return maThemeColorData.getTintOrShade();
+}
+
+void SvxColorItem::SetTintOrShade(sal_Int16 nTintOrShade)
+{
+ maThemeColorData.setTintOrShade(nTintOrShade);
+}
+
bool SvxColorItem::operator==( const SfxPoolItem& rAttr ) const
{
assert(SfxPoolItem::operator==(rAttr));
const SvxColorItem& rColorItem = static_cast<const SvxColorItem&>(rAttr);
- return mColor == rColorItem.mColor &&
- maThemeIndex == rColorItem.maThemeIndex &&
- maTintShade == rColorItem.maTintShade;
+ return mColor == rColorItem.mColor
+ && maThemeColorData == rColorItem.maThemeColorData;
}
bool SvxColorItem::QueryValue( uno::Any& rVal, sal_uInt8 nMemberId ) const
@@ -1358,12 +1464,12 @@ bool SvxColorItem::QueryValue( uno::Any& rVal, sal_uInt8 nMemberId ) const
}
case MID_COLOR_THEME_INDEX:
{
- rVal <<= maThemeIndex;
+ rVal <<= maThemeColorData.getThemeColorIndex();
break;
}
case MID_COLOR_TINT_OR_SHADE:
{
- rVal <<= maTintShade;
+ rVal <<= maThemeColorData.getTintOrShade();
break;
}
default:
@@ -1401,7 +1507,7 @@ bool SvxColorItem::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId )
sal_Int16 nIndex = -1;
if (!(rVal >>= nIndex))
return false;
- maThemeIndex = nIndex;
+ maThemeColorData.setThemeColorIndex(nIndex);
}
break;
case MID_COLOR_TINT_OR_SHADE:
@@ -1409,7 +1515,7 @@ bool SvxColorItem::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId )
sal_Int16 nTintShade = -1;
if (!(rVal >>= nTintShade))
return false;
- maTintShade = nTintShade;
+ maThemeColorData.setTintOrShade(nTintShade);
}
break;
default:
@@ -1454,7 +1560,13 @@ void SvxColorItem::dumpAsXml(xmlTextWriterPtr pWriter) const
(void)xmlTextWriterEndElement(pWriter);
}
+const Color& SvxColorItem::GetValue() const
+{
+ if(auto aOptionalColor = maThemeColorData.getThemeColorIfNeedsUpdate())
+ mColor = aOptionalColor.value();
+ return mColor;
+}
void SvxColorItem::SetValue( const Color& rNewCol )
{
diff --git a/include/editeng/colritem.hxx b/include/editeng/colritem.hxx
index ce51be7f3e30..13444a57541c 100644
--- a/include/editeng/colritem.hxx
+++ b/include/editeng/colritem.hxx
@@ -19,20 +19,75 @@
#ifndef INCLUDED_EDITENG_COLRITEM_HXX
#define INCLUDED_EDITENG_COLRITEM_HXX
+#include <sfx2/objsh.hxx>
+#include <sfx2/ColorSets.hxx>
#include <svl/poolitem.hxx>
#include <tools/color.hxx>
#include <editeng/editengdllapi.h>
+#include <sal/log.hxx>
+
#define VERSION_USEAUTOCOLOR 1
+/** ThemeColorData holds theme color related
+ data of a color item eg. SvxColorItem
+*/
+class ThemeColorData
+{
+public:
+ bool operator==(const ThemeColorData& rOther) const;
+ /** Calculates and returns the theme color from current ThemeColorData
+
+ @returns std::nullopt if color item that owns the ThemeColorData
+ doesn't need a color update, returns calculated color otherwise.
+
+ */
+ std::optional<Color> getThemeColorIfNeedsUpdate() const;
+ void setTintOrShade(sal_Int16 nTintShade);
+ sal_Int16 getTintOrShade() const;
+ void setThemeColorIndex(sal_Int16 nThemeColorIndex);
+ sal_Int16 getThemeColorIndex() const;
+
+private:
+ void RecalculateOnNextGet();
+ /** Specifies which color of the current theme color set
+ is the base color for this item.
+
+ If it is -1, this item isn't a theme color.
+ */
+ sal_Int16 mnThemeColorIndex = -1;
+ /** Tint or Shade value that will be applied
+ on top of the base color
+ */
+ sal_Int16 mnTintShade = 0;
+ /** Cached base color value used to determine whether
+ a recalculation of theme color is required.
+
+ Mutable since the base color is cached on the getThemeColorIfNeedsUpdate
+ */
+ mutable Color maCachedBaseColor;
+ /** Pointer to the ColorSets of the document.
+
+ Mutable since the correct value initialized on getThemeColorIfNeedsUpdate
+ if it is indeed a theme color
+ */
+ mutable const ColorSets* mpColorSets = nullptr;
+ // mutable since marked as false after recalculation in getThemeColorIfNeedsUpdate
+ mutable bool mbRecalculateColor = true;
+};
+
/** SvxColorItem item describes a color.
*/
class EDITENG_DLLPUBLIC SvxColorItem final : public SfxPoolItem
{
private:
- Color mColor;
- sal_Int16 maThemeIndex;
- sal_Int16 maTintShade;
+ // Marked mutable since the color gets recalculated on GetValue if
+ // it is a ThemeColor and a recalculation is needed.
+ mutable Color mColor;
+ /** ThemeColorData that is used to calculate and update mColor
+ if color item is a theme color.
+ */
+ ThemeColorData maThemeColorData;
public:
static SfxPoolItem* CreateDefault();
@@ -53,31 +108,15 @@ public:
virtual SvxColorItem* Clone(SfxItemPool* pPool = nullptr) const override;
SvxColorItem(SvxColorItem const &) = default; // SfxPoolItem copy function dichotomy
- const Color& GetValue() const
- {
- return mColor;
- }
+ const Color& GetValue() const;
+
void SetValue(const Color& rNewColor);
- sal_Int16 GetThemeIndex() const
- {
- return maThemeIndex;
- }
-
- void SetThemeIndex(sal_Int16 nIndex)
- {
- maThemeIndex = nIndex;
- }
-
- sal_Int16 GetTintOrShade() const
- {
- return maTintShade;
- }
-
- void SetTintOrShade(sal_Int16 nTintOrShade)
- {
- maTintShade = nTintOrShade;
- }
+ // Getters and setters for maThemeColorData
+ sal_Int16 GetThemeIndex() const;
+ void SetThemeIndex(sal_Int16 nIndex);
+ sal_Int16 GetTintOrShade() const;
+ void SetTintOrShade(sal_Int16 nTintOrShade);
void dumpAsXml(xmlTextWriterPtr pWriter) const override;
};
diff --git a/include/sfx2/ColorSets.hxx b/include/sfx2/ColorSets.hxx
new file mode 100644
index 000000000000..ffd3ea4f6ed3
--- /dev/null
+++ b/include/sfx2/ColorSets.hxx
@@ -0,0 +1,88 @@
+/* -*- 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 <vector>
+
+#include <rtl/ustring.hxx>
+#include <sal/types.h>
+#include <sfx2/dllapi.h>
+#include <svl/poolitem.hxx>
+#include <tools/color.hxx>
+
+class ColorSet
+{
+ OUString maColorSetName;
+ std::vector<Color> maColors;
+
+public:
+ ColorSet(OUString const& aName);
+
+ void add(sal_uInt32 nIndex, ::Color aColorData) { maColors[nIndex] = aColorData; }
+
+ const OUString& getName() const { return maColorSetName; }
+ const Color& getColor(sal_uInt32 nIndex) const { return maColors[nIndex]; }
+
+ const std::vector<Color>& getColors() const { return maColors; }
+};
+
+class SFX2_DLLPUBLIC ColorSets
+{
+ std::vector<ColorSet> maColorSets;
+ sal_Int32 mnThemeColorSetIndex;
+
+public:
+ ColorSets();
+ ~ColorSets();
+
+ static ColorSets& get()
+ {
+ static ColorSets aColorSetsInstance;
+ return aColorSetsInstance;
+ }
+
+ const ColorSet& getThemeColorSet() const { return getColorSet(mnThemeColorSetIndex); }
+
+ void setThemeColorSet(sal_Int32 nIndex);
+
+ void setThemeColorSet(std::u16string_view rName);
+
+ const std::vector<ColorSet>& getColorSets() const { return maColorSets; }
+
+ const ColorSet& getColorSet(sal_uInt32 nIndex) const { return maColorSets[nIndex]; }
+
+ const ColorSet& getColorSet(std::u16string_view rName) const;
+};
+
+class SFX2_DLLPUBLIC SfxColorSetListItem final : public SfxPoolItem
+{
+ std::shared_ptr<ColorSets> mpColorSets;
+
+public:
+ static SfxPoolItem* CreateDefault();
+ SfxColorSetListItem();
+ SfxColorSetListItem(const ColorSets& rColorSets, sal_uInt16 nWhich);
+ SfxColorSetListItem(const SfxColorSetListItem&);
+
+ virtual bool GetPresentation(SfxItemPresentation ePres, MapUnit eCoreMetric,
+ MapUnit ePresMetric, OUString& rText,
+ const IntlWrapper&) const override;
+
+ virtual bool operator==(const SfxPoolItem&) const override;
+ virtual SfxColorSetListItem* Clone(SfxItemPool* pPool = nullptr) const override;
+ virtual bool QueryValue(css::uno::Any& rVal, sal_uInt8 nMemberId = 0) const override;
+ virtual bool PutValue(const css::uno::Any& rVal, sal_uInt8 nMemberId) override;
+
+ const ColorSets& GetSfxColorSetList() const { return *mpColorSets; }
+ std::shared_ptr<ColorSets> GetSfxColorSetListPtr() const { return mpColorSets; }
+};
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/include/sfx2/sfxsids.hrc b/include/sfx2/sfxsids.hrc
index 35d9ab895856..c2b3a13818bc 100644
--- a/include/sfx2/sfxsids.hrc
+++ b/include/sfx2/sfxsids.hrc
@@ -28,6 +28,7 @@ class SfxUInt16Item;
class SvxHyperlinkItem;
class SfxDocumentInfoItem;
class SvxSearchItem;
+class SfxColorSetListItem;
// Please be careful:
// Changing just one part here doesn't add new
@@ -362,6 +363,7 @@ class SvxSearchItem;
#define SID_STYLE_UPD_BY_EX_NAME (SID_SFX_START + 1585)
#define SID_STYLE_REFERENCE TypedWhichId<SfxStringItem>(SID_SFX_START + 1602)
+#define SID_COLOR_SETS TypedWhichId<SfxColorSetListItem>(SID_SFX_START + 1605)
#define SID_TEMPLATE_NAME (SID_SFX_START + 660)
#define SID_TEMPLATE_REGIONNAME (SID_SFX_START + 662)
#define SID_TEMPLATE_LOAD (SID_SFX_START + 663)
diff --git a/include/svx/ColorSets.hxx b/include/svx/ColorSets.hxx
deleted file mode 100644
index 361fe47c622e..000000000000
--- a/include/svx/ColorSets.hxx
+++ /dev/null
@@ -1,71 +0,0 @@
-/* -*- 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/.
- *
- */
-
-#ifndef INCLUDED_SVX_COLORSETS_HXX
-#define INCLUDED_SVX_COLORSETS_HXX
-
-#include <vector>
-
-#include <rtl/ustring.hxx>
-#include <sal/types.h>
-#include <svx/svxdllapi.h>
-#include <tools/color.hxx>
-
-namespace svx
-{
-
-class ColorSet
-{
- OUString maColorSetName;
- std::vector<Color> maColors;
-public:
- ColorSet(OUString const & aName);
-
- void add(sal_uInt32 nIndex, ::Color aColorData)
- {
- maColors[nIndex] = aColorData;
- }
-
- const OUString& getName() const
- {
- return maColorSetName;
- }
- const Color& getColor(sal_uInt32 nIndex) const
- {
- return maColors[nIndex];
- }
-};
-
-class SVXCORE_DLLPUBLIC ColorSets
-{
- std::vector<ColorSet> maColorSets;
-public:
- ColorSets();
- ~ColorSets();
-
- void init();
- const std::vector<ColorSet>& getColorSets() const
- {
- return maColorSets;
- }
-
- const ColorSet& getColorSet(sal_uInt32 nIndex)
- {
- return maColorSets[nIndex];
- }
-
- const ColorSet& getColorSet(std::u16string_view rName);
-};
-
-} // end of namespace svx
-
-#endif // INCLUDED_SVX_COLORSETS_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/Library_sfx.mk b/sfx2/Library_sfx.mk
index 0120cee75b4e..d2369bb43247 100644
--- a/sfx2/Library_sfx.mk
+++ b/sfx2/Library_sfx.mk
@@ -294,6 +294,7 @@ $(eval $(call gb_Library_add_exception_objects,sfx,\
sfx2/source/sidebar/UnoDecks \
sfx2/source/sidebar/UnoSidebar \
sfx2/source/statbar/stbitem \
+ sfx2/source/styles/ColorSets \
sfx2/source/styles/StyleManager \
sfx2/source/toolbox/tbxitem \
sfx2/source/toolbox/weldutils \
diff --git a/sfx2/source/doc/objxtor.cxx b/sfx2/source/doc/objxtor.cxx
index 70b2e1e2e486..4175ddf3e467 100644
--- a/sfx2/source/doc/objxtor.cxx
+++ b/sfx2/source/doc/objxtor.cxx
@@ -41,6 +41,7 @@
#include <unotools/configmgr.hxx>
#include <unotools/eventcfg.hxx>
+#include <sfx2/ColorSets.hxx>
#include <sfx2/objsh.hxx>
#include <sfx2/signaturestate.hxx>
#include <sfx2/sfxmodelfactory.hxx>
@@ -260,6 +261,8 @@ SfxObjectShell::SfxObjectShell( const SfxModelFlags i_nCreationFlags )
const bool bDocRecovery = ( i_nCreationFlags & SfxModelFlags::DISABLE_DOCUMENT_RECOVERY ) == SfxModelFlags::NONE;
if ( !bDocRecovery )
pImpl->m_bDocRecoverySupport = false;
+
+ PutItem(SfxColorSetListItem(ColorSets(), SID_COLOR_SETS));
}
/** Constructor of the class SfxObjectShell.
@@ -277,6 +280,7 @@ SfxObjectShell::SfxObjectShell(SfxObjectCreateMode eMode)
, bIsInGenerateThumbnail(false)
, mbAvoidRecentDocs(false)
{
+ PutItem(SfxColorSetListItem(ColorSets(), SID_COLOR_SETS));
}
SfxObjectShell::~SfxObjectShell()
diff --git a/sfx2/source/styles/ColorSets.cxx b/sfx2/source/styles/ColorSets.cxx
new file mode 100644
index 000000000000..ac0088311c93
--- /dev/null
+++ b/sfx2/source/styles/ColorSets.cxx
@@ -0,0 +1,155 @@
+/* -*- 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 <sfx2/ColorSets.hxx>
+
+ColorSet::ColorSet(OUString const& aColorSetName)
+ : maColorSetName(aColorSetName)
+ , maColors(12)
+{
+}
+
+ColorSets::ColorSets()
+ : maColorSets()
+ , mnThemeColorSetIndex(0)
+{
+ {
+ 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);
+ maColorSets.push_back(aColorSet);
+ }
+}
+
+ColorSets::~ColorSets() {}
+
+const ColorSet& ColorSets::getColorSet(std::u16string_view rName) const
+{
+ for (const ColorSet& rColorSet : maColorSets)
+ {
+ if (rColorSet.getName() == rName)
+ return rColorSet;
+ }
+ return maColorSets[0];
+}
+
+void ColorSets::setThemeColorSet(sal_Int32 nIndex) { mnThemeColorSetIndex = nIndex; }
+
+void ColorSets::setThemeColorSet(std::u16string_view rName)
+{
+ for (sal_uInt32 nIndex = 0; nIndex < maColorSets.size(); ++nIndex)
+ {
+ if (maColorSets[nIndex].getName() == rName)
+ mnThemeColorSetIndex = nIndex;
+ }
+}
+
+SfxColorSetListItem::SfxColorSetListItem() {}
+
+SfxColorSetListItem::SfxColorSetListItem(const ColorSets& rColorSets, sal_uInt16 nW)
+ : SfxPoolItem(nW)
+{
+ mpColorSets = std::make_shared<ColorSets>(rColorSets);
+}
+
+SfxColorSetListItem::SfxColorSetListItem(const SfxColorSetListItem& rItem)
+ : SfxPoolItem(rItem)
+ , mpColorSets(rItem.mpColorSets)
+{
+}
+
+bool SfxColorSetListItem::GetPresentation(SfxItemPresentation /*ePres*/, MapUnit /*eCoreUnit*/,
+ MapUnit /*ePresUnit*/, OUString& rText,
+ const IntlWrapper&) const
+{
+ rText.clear();
+ return false;
+}
+
+bool SfxColorSetListItem::operator==(const SfxPoolItem& rItem) const
+{
+ assert(SfxPoolItem::operator==(rItem));
+ // TODO: check these out before pushing...
+ return false;
+ // return static_cast<const SfxColorSetListItem&>(rItem).mrColorSets == mrColorSets;
+}
+
+SfxColorSetListItem* SfxColorSetListItem::Clone(SfxItemPool*) const
+{
+ return new SfxColorSetListItem(*this);
+}
+
+/// TODO: check these out before pushing...
+bool SfxColorSetListItem::QueryValue(css::uno::Any& rVal, sal_uInt8 nMemberId) const
+{
+ return false;
+}
+
+bool SfxColorSetListItem::PutValue(const css::uno::Any& rVal, sal_uInt8 nMemberId) { return false; }
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/source/view/viewfrm.cxx b/sfx2/source/view/viewfrm.cxx
index b7fa742cabe8..a7dc6bb2e199 100644
--- a/sfx2/source/view/viewfrm.cxx
+++ b/sfx2/source/view/viewfrm.cxx
@@ -17,6 +17,8 @@
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
+#include <sfx2/ColorSets.hxx>
+
#include <config_feature_desktop.h>
#include <osl/file.hxx>
#include <sfx2/docfilt.hxx>
diff --git a/svx/Library_svxcore.mk b/svx/Library_svxcore.mk
index 8e596acd4605..625fa6297109 100644
--- a/svx/Library_svxcore.mk
+++ b/svx/Library_svxcore.mk
@@ -359,7 +359,6 @@ $(eval $(call gb_Library_add_exception_objects,svxcore,\
svx/source/svdraw/textchaincursor \
svx/source/styles/CommonStylePreviewRenderer \
svx/source/styles/CommonStyleManager \
- svx/source/styles/ColorSets \
svx/source/table/cell \
svx/source/table/cellcursor \
svx/source/table/cellrange \
diff --git a/svx/source/styles/ColorSets.cxx b/svx/source/styles/ColorSets.cxx
deleted file mode 100644
index 7a04eb4e6314..000000000000
--- a/svx/source/styles/ColorSets.cxx
+++ /dev/null
@@ -1,107 +0,0 @@
-/* -*- 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 <svx/ColorSets.hxx>
-
-namespace svx
-{
-
-ColorSet::ColorSet(OUString const & aColorSetName)
- : maColorSetName(aColorSetName)
- , maColors(12)
-{}
-
-ColorSets::ColorSets()
-{}
-
-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);
- maColorSets.push_back(aColorSet);
- }
-}
-
-const ColorSet& ColorSets::getColorSet(std::u16string_view rName)
-{
- for (const ColorSet & rColorSet : maColorSets)
- {
- if (rColorSet.getName() == rName)
- return rColorSet;
- }
- return maColorSets[0];
-}
-
-} // end of namespace svx
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/source/uibase/sidebar/ThemePanel.cxx b/sw/source/uibase/sidebar/ThemePanel.cxx
index ce42983879ce..a9ddb4af0c83 100644
--- a/sw/source/uibase/sidebar/ThemePanel.cxx
+++ b/sw/source/uibase/sidebar/ThemePanel.cxx
@@ -13,6 +13,7 @@
#include "ThemePanel.hxx"
#include <sfx2/objsh.hxx>
+#include <sfx2/sfxsids.hrc>
#include <com/sun/star/lang/IllegalArgumentException.hpp>
@@ -75,7 +76,7 @@ public:
maVariable = aVariable;
}
- Color getColor(svx::ColorSet const & rColorSet)
+ Color getColor(ColorSet const & rColorSet)
{
Color aColor;
if (maVariable.mnIndex > -1)
@@ -229,7 +230,7 @@ void changeFont(SwFormat* pFormat, SwDocStyleSheet const * pStyle, FontSet const
}
}*/
-void changeColor(SwTextFormatColl* pCollection, svx::ColorSet const& rColorSet, StyleRedefinition* /*pRedefinition*/)
+void changeColor(SwTextFormatColl* pCollection, ColorSet const& rColorSet, StyleRedefinition* /*pRedefinition*/)
{
SvxColorItem aColorItem(pCollection->GetColor());
sal_Int16 nIndex = aColorItem.GetThemeIndex();
@@ -331,16 +332,19 @@ FontSet getFontSet(std::u16string_view rFontVariant, std::vector<FontSet>& aFont
}
void applyTheme(SfxStyleSheetBasePool* pPool, std::u16string_view sFontSetName, std::u16string_view sColorSetName,
- StyleSet& rStyleSet, svx::ColorSets& rColorSets)
+ StyleSet& rStyleSet, ColorSets& rColorSets)
{
SwDocStyleSheet* pStyle;
std::vector<FontSet> aFontSets = initFontSets();
FontSet aFontSet = getFontSet(sFontSetName, aFontSets);
- svx::ColorSet aColorSet = rColorSets.getColorSet(sColorSetName);
+ ColorSet aColorSet = rColorSets.getColorSet(sColorSetName);
pStyle = static_cast<SwDocStyleSheet*>(pPool->First(SfxStyleFamily::Para));
+
+ rColorSets.setThemeColorSet(sColorSetName);
+
while (pStyle)
{
SwTextFormatColl* pCollection = pStyle->GetCollection();
@@ -368,7 +372,7 @@ void applyTheme(SfxStyleSheetBasePool* pPool, std::u16string_view sFontSetName,
}
}
-BitmapEx GenerateColorPreview(const svx::ColorSet& rColorSet)
+BitmapEx GenerateColorPreview(const ColorSet& rColorSet)
{
ScopedVclPtrInstance<VirtualDevice> pVirtualDev(*Application::GetDefaultDevice());
float fScaleFactor = pVirtualDev->GetDPIScaleFactor();
@@ -440,7 +444,7 @@ ThemePanel::ThemePanel(weld::Widget* pParent)
, mxValueSetColors(new ValueSet(nullptr))
, mxValueSetColorsWin(new weld::CustomWeld(*m_xBuilder, "valueset_colors", *mxValueSetColors))
, mxApplyButton(m_xBuilder->weld_button("apply"))
- , maColorSets()
+ , maColorSets(nullptr)
{
mxValueSetColors->SetColCount(2);
mxValueSetColors->SetLineCount(3);
@@ -454,26 +458,32 @@ ThemePanel::ThemePanel(weld::Widget* pParent)
for (const FontSet & rFontSet : aFontSets)
mxListBoxFonts->append_text(rFontSet.maName);
mxListBoxFonts->set_size_request(-1, mxListBoxFonts->get_height_rows(aFontSets.size()));
+ if (SfxObjectShell* pObjShell = SfxObjectShell::Current())
+ {
+ if (const SfxColorSetListItem* pColorSetItem = pObjShell->GetItem(SID_COLOR_SETS))
+ {
+ maColorSets = pColorSetItem->GetSfxColorSetListPtr();
+ }
+ }
- maColorSets.init();
- const std::vector<svx::ColorSet>& aColorSets = maColorSets.getColorSets();
- for (size_t i = 0; i < aColorSets.size(); ++i)
- {
- const svx::ColorSet& rColorSet = aColorSets[i];
+ const std::vector<ColorSet>& aColorSets = maColorSets->getColorSets();
+ for (size_t i = 0; i < aColorSets.size(); ++i)
+ {
+ const ColorSet& rColorSet = aColorSets[i];
- const OUString& aName = rColorSet.getName();
- BitmapEx aPreview = GenerateColorPreview(rColorSet);
+ const OUString& aName = rColorSet.getName();
+ BitmapEx aPreview = GenerateColorPreview(rColorSet);
- sal_uInt16 nId = i + 1;
- mxValueSetColors->InsertItem(nId, Image(aPreview), aName);
- }
+ sal_uInt16 nId = i + 1;
+ mxValueSetColors->InsertItem(nId, Image(aPreview), aName);
+ }
- mxValueSetColors->SetOptimalSize();
+ mxValueSetColors->SetOptimalSize();
- if (!aColorSets.empty())
- mxValueSetColors->SelectItem(1); // ItemId 1, position 0
-}
+ if (!aColorSets.empty())
+ mxValueSetColors->SelectItem(1); // ItemId 1, position 0
+ }
ThemePanel::~ThemePanel()
{
@@ -510,11 +520,11 @@ void ThemePanel::DoubleClickHdl()
return;
OUString sEntryFonts = mxListBoxFonts->get_selected_text();
sal_uInt32 nIndex = nItemId - 1;
- OUString sEntryColors = maColorSets.getColorSet(nIndex).getName();
+ OUString sEntryColors = maColorSets->getColorSet(nIndex).getName();
StyleSet aStyleSet = setupThemes();
- applyTheme(pDocSh->GetStyleSheetPool(), sEntryFonts, sEntryColors, aStyleSet, maColorSets);
+ applyTheme(pDocSh->GetStyleSheetPool(), sEntryFonts, sEntryColors, aStyleSet, *maColorSets);
}
void ThemePanel::NotifyItemUpdate(const sal_uInt16 /*nSId*/,
diff --git a/sw/source/uibase/sidebar/ThemePanel.hxx b/sw/source/uibase/sidebar/ThemePanel.hxx
index 14af479e664a..ee0cbeaadfa1 100644
--- a/sw/source/uibase/sidebar/ThemePanel.hxx
+++ b/sw/source/uibase/sidebar/ThemePanel.hxx
@@ -13,7 +13,7 @@
#include <sfx2/sidebar/PanelLayout.hxx>
#include <sfx2/sidebar/ControllerItem.hxx>
#include <svtools/valueset.hxx>
-#include <svx/ColorSets.hxx>
+#include <sfx2/ColorSets.hxx>
namespace sw::sidebar {
@@ -40,7 +40,7 @@ private:
std::unique_ptr<weld::CustomWeld> mxValueSetColorsWin;
std::unique_ptr<weld::Button> mxApplyButton;
- svx::ColorSets maColorSets;
+ std::shared_ptr<ColorSets> maColorSets;
DECL_LINK(ClickHdl, weld::Button&, void);
DECL_LINK(DoubleClickHdl, weld::TreeView&, bool);
More information about the Libreoffice-commits
mailing list