[Libreoffice-commits] core.git: Branch 'feature/themesupport2' - editeng/source include/editeng include/sfx2 include/svx sfx2/Library_sfx.mk sfx2/source svx/Library_svxcore.mk svx/source sw/source
Sarper Akdemir (via logerrit)
logerrit at kemper.freedesktop.org
Tue Aug 17 22:26:23 UTC 2021
editeng/source/items/textitem.cxx | 70 ++++++++++++--
include/editeng/colritem.hxx | 48 +++++----
include/sfx2/ColorSets.hxx | 91 ++++++++++++++++++
include/sfx2/sfxsids.hrc | 2
include/svx/ColorSets.hxx | 71 --------------
sfx2/Library_sfx.mk | 1
sfx2/source/doc/objxtor.cxx | 4
sfx2/source/styles/ColorSets.cxx | 155 ++++++++++++++++++++++++++++++++
sfx2/source/view/viewfrm.cxx | 3
svx/Library_svxcore.mk | 1
svx/source/styles/ColorSets.cxx | 107 ----------------------
sw/source/uibase/sidebar/ThemePanel.cxx | 54 ++++++-----
sw/source/uibase/sidebar/ThemePanel.hxx | 4
13 files changed, 377 insertions(+), 234 deletions(-)
New commits:
commit 58b52969f02f26e6b91bfa2527e201d3883a5cae
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 18 01:19:54 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..ede250142444 100644
--- a/editeng/source/items/textitem.cxx
+++ b/editeng/source/items/textitem.cxx
@@ -78,6 +78,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;
@@ -1313,17 +1316,23 @@ bool SvxContourItem::GetPresentation
SvxColorItem::SvxColorItem( const sal_uInt16 nId ) :
SfxPoolItem(nId),
mColor( COL_BLACK ),
- maThemeIndex(-1),
- maTintShade(0)
+ mnThemeIndex(-1),
+ mnTintShade(0),
+ // maThemeColorData(std::nullopt),
+ mpColorSets(nullptr)
{
+ // maThemeColorData = { 4, 0 };
}
SvxColorItem::SvxColorItem( const Color& rCol, const sal_uInt16 nId ) :
SfxPoolItem( nId ),
mColor( rCol ),
- maThemeIndex(-1),
- maTintShade(0)
+ mnThemeIndex(-1),
+ mnTintShade(0),
+ // maThemeColorData(std::nullopt),
+ mpColorSets(nullptr)
{
+ // maThemeColorData = { 4, 0 };
}
SvxColorItem::~SvxColorItem()
@@ -1335,9 +1344,9 @@ 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
+ && mnThemeIndex == rColorItem.mnThemeIndex
+ && mnTintShade == rColorItem.mnTintShade;
}
bool SvxColorItem::QueryValue( uno::Any& rVal, sal_uInt8 nMemberId ) const
@@ -1358,12 +1367,12 @@ bool SvxColorItem::QueryValue( uno::Any& rVal, sal_uInt8 nMemberId ) const
}
case MID_COLOR_THEME_INDEX:
{
- rVal <<= maThemeIndex;
+ rVal <<= mnThemeIndex;
break;
}
case MID_COLOR_TINT_OR_SHADE:
{
- rVal <<= maTintShade;
+ rVal <<= mnTintShade;
break;
}
default:
@@ -1401,7 +1410,7 @@ bool SvxColorItem::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId )
sal_Int16 nIndex = -1;
if (!(rVal >>= nIndex))
return false;
- maThemeIndex = nIndex;
+ mnThemeIndex = nIndex;
}
break;
case MID_COLOR_TINT_OR_SHADE:
@@ -1409,7 +1418,7 @@ bool SvxColorItem::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId )
sal_Int16 nTintShade = -1;
if (!(rVal >>= nTintShade))
return false;
- maTintShade = nTintShade;
+ mnTintShade = nTintShade;
}
break;
default:
@@ -1454,7 +1463,46 @@ void SvxColorItem::dumpAsXml(xmlTextWriterPtr pWriter) const
(void)xmlTextWriterEndElement(pWriter);
}
+const Color& SvxColorItem::GetValue() const
+{
+ if (mnThemeIndex > -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(mnThemeIndex);
+ // only calculate tint or shade applied color if necessary
+ if(aColor != maCacheColor)
+ {
+ maCacheColor = aColor;
+ aColor.ApplyTintOrShade(GetTintOrShade());
+ mColor = aColor;
+ // TODO: add some kind of cache invalidation for
+ // SetTintOrShade()
+ }
+ }
+ else if (SfxObjectShell* pObjShell = SfxObjectShell::Current())
+ {
+ if (const SfxColorSetListItem* pColorSetItem = pObjShell->GetItem(SID_COLOR_SETS))
+ {
+ mpColorSets = &pColorSetItem->GetSfxColorSetList();
+ }
+ }
+ }
+ return mColor;
+}
void SvxColorItem::SetValue( const Color& rNewCol )
{
diff --git a/include/editeng/colritem.hxx b/include/editeng/colritem.hxx
index ce51be7f3e30..2258460e4e16 100644
--- a/include/editeng/colritem.hxx
+++ b/include/editeng/colritem.hxx
@@ -19,20 +19,39 @@
#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
+// struct ThemeColorData
+// {
+// sal_Int16 mnThemeIndex;
+// sal_Int16 mnTintShade;
+// };
+
/** SvxColorItem item describes a color.
*/
class EDITENG_DLLPUBLIC SvxColorItem final : public SfxPoolItem
{
private:
- Color mColor;
- sal_Int16 maThemeIndex;
- sal_Int16 maTintShade;
+ // TODO: obv. making almost everything mutable doesn't make sense..
+ // refactor these before pushing...
+
+ mutable Color mColor;
+
+ /// Cache of the theme color
+ mutable Color maCacheColor;
+ // std::optional<ThemeColorData> maThemeColorData;
+ sal_Int16 mnThemeIndex;
+ sal_Int16 mnTintShade;
+
+ mutable const ColorSets* mpColorSets;
public:
static SfxPoolItem* CreateDefault();
@@ -53,31 +72,20 @@ 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;
+ return mnThemeIndex;
}
- void SetThemeIndex(sal_Int16 nIndex)
- {
- maThemeIndex = nIndex;
- }
+ void SetThemeIndex(sal_Int16 nIndex) { mnThemeIndex = nIndex; }
- sal_Int16 GetTintOrShade() const
- {
- return maTintShade;
- }
+ sal_Int16 GetTintOrShade() const { return mnTintShade; }
- void SetTintOrShade(sal_Int16 nTintOrShade)
- {
- maTintShade = nTintOrShade;
- }
+ void SetTintOrShade(sal_Int16 nTintOrShade) { mnTintShade = 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..977ab1ba6735
--- /dev/null
+++ b/include/sfx2/ColorSets.hxx
@@ -0,0 +1,91 @@
+/* -*- 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;
+};
+
+//typedef rtl::Reference<class ColorSets> ColorSetsRef;
+//typedef ColorSets ColorSetsRef;
+
+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..719e7d84bfb0 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>
@@ -1679,6 +1681,7 @@ void SfxViewFrame::Construct_Impl( SfxObjectShell *pObjSh )
Notify( *pObjSh, SfxHint(SfxHintId::TitleChanged) );
Notify( *pObjSh, SfxHint(SfxHintId::DocChanged) );
m_pDispatcher->SetReadOnly_Impl( pObjSh->IsReadOnly() );
+
}
else
{
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