15#include <libxml/xmlwriter.h>
17#include <com/sun/star/util/Color.hpp>
18#include <com/sun/star/text/XTextRange.hpp>
19#include <com/sun/star/container/XEnumerationAccess.hpp>
20#include <com/sun/star/container/XEnumeration.hpp>
21#include <com/sun/star/beans/XPropertySet.hpp>
35void UpdateTextPortionColorSet(
const uno::Reference<beans::XPropertySet>& xPortion,
38 sal_Int16 nCharColorTheme = -1;
39 xPortion->getPropertyValue(UNO_NAME_EDIT_CHAR_COLOR_THEME) >>= nCharColorTheme;
40 if (nCharColorTheme < 0 || nCharColorTheme > 11)
46 sal_Int32 nCharColorLumMod{};
47 xPortion->getPropertyValue(UNO_NAME_EDIT_CHAR_COLOR_LUM_MOD) >>= nCharColorLumMod;
48 sal_Int32 nCharColorLumOff{};
49 xPortion->getPropertyValue(UNO_NAME_EDIT_CHAR_COLOR_LUM_OFF) >>= nCharColorLumOff;
50 if (nCharColorLumMod != 10000 || nCharColorLumOff != 0)
55 sal_Int32 nCharColorTintOrShade{};
56 xPortion->getPropertyValue(UNO_NAME_EDIT_CHAR_COLOR_TINT_OR_SHADE) >>= nCharColorTintOrShade;
57 if (nCharColorTintOrShade != 0)
62 xPortion->setPropertyValue(UNO_NAME_EDIT_CHAR_COLOR,
63 uno::Any(
static_cast<sal_Int32
>(aColor)));
66void UpdateFillColorSet(
const uno::Reference<beans::XPropertySet>& xShape,
const svx::ColorSet& rColorSet)
68 if (!xShape->getPropertySetInfo()->hasPropertyByName(UNO_NAME_FILLCOLOR_THEME))
73 sal_Int16 nFillColorTheme = -1;
74 xShape->getPropertyValue(UNO_NAME_FILLCOLOR_THEME) >>= nFillColorTheme;
75 if (nFillColorTheme < 0 || nFillColorTheme > 11)
81 sal_Int32 nFillColorLumMod{};
82 xShape->getPropertyValue(UNO_NAME_FILLCOLOR_LUM_MOD) >>= nFillColorLumMod;
83 sal_Int32 nFillColorLumOff{};
84 xShape->getPropertyValue(UNO_NAME_FILLCOLOR_LUM_OFF) >>= nFillColorLumOff;
85 if (nFillColorLumMod != 10000 || nFillColorLumOff != 0)
90 xShape->setPropertyValue(UNO_NAME_FILLCOLOR,
uno::Any(
static_cast<sal_Int32
>(aColor)));
101 uno::Reference<drawing::XShape> xShape =
pObject->getUnoShape();
102 uno::Reference<text::XTextRange> xShapeText(xShape, uno::UNO_QUERY);
106 uno::Reference<container::XEnumerationAccess> xText(xShapeText->getText(), uno::UNO_QUERY);
107 uno::Reference<container::XEnumeration> xParagraphs = xText->createEnumeration();
108 while (xParagraphs->hasMoreElements())
110 uno::Reference<container::XEnumerationAccess> xParagraph(xParagraphs->nextElement(), uno::UNO_QUERY);
111 uno::Reference<container::XEnumeration> xPortions = xParagraph->createEnumeration();
112 while (xPortions->hasMoreElements())
114 uno::Reference<beans::XPropertySet> xPortion(xPortions->nextElement(), uno::UNO_QUERY);
115 UpdateTextPortionColorSet(xPortion, *pColorSet);
120 uno::Reference<beans::XPropertySet> xShapeProps(xShape, uno::UNO_QUERY);
121 UpdateFillColorSet(xShapeProps, *pColorSet);
129 : maColorSetName(aColorSetName)
138 (void)xmlTextWriterStartElement(pWriter, BAD_CAST(
"ColorSet"));
139 (void)xmlTextWriterWriteFormatAttribute(pWriter, BAD_CAST(
"ptr"),
"%p",
this);
140 (void)xmlTextWriterWriteAttribute(pWriter, BAD_CAST(
"maColorSetName"),
145 (void)xmlTextWriterStartElement(pWriter, BAD_CAST(
"Color"));
146 std::stringstream ss;
148 (void)xmlTextWriterWriteAttribute(pWriter, BAD_CAST(
"value"), BAD_CAST(ss.str().c_str()));
149 (void)xmlTextWriterEndElement(pWriter);
152 (void)xmlTextWriterEndElement(pWriter);
162 aColorSet.
add(0, 0xFCFCFC);
163 aColorSet.
add(1, 0x232629);
164 aColorSet.
add(2, 0xEFF0F1);
165 aColorSet.
add(3, 0x31363B);
166 aColorSet.
add(4, 0xDA4453);
167 aColorSet.
add(5, 0xF47750);
168 aColorSet.
add(6, 0xFDBC4B);
169 aColorSet.
add(7, 0xC9CE3B);
170 aColorSet.
add(8, 0x1CDC9A);
171 aColorSet.
add(9, 0x2ECC71);
172 aColorSet.
add(10, 0x1D99F3);
173 aColorSet.
add(11, 0x3DAEE9);
177 ColorSet aColorSet(
"Material Blue");
178 aColorSet.
add(0, 0xFFFFFF);
179 aColorSet.
add(1, 0x212121);
180 aColorSet.
add(2, 0xECEFF1);
181 aColorSet.
add(3, 0x37474F);
182 aColorSet.
add(4, 0x7986CB);
183 aColorSet.
add(5, 0x303F9F);
184 aColorSet.
add(6, 0x64B5F6);
185 aColorSet.
add(7, 0x1976D2);
186 aColorSet.
add(8, 0x4FC3F7);
187 aColorSet.
add(9, 0x0277BD);
188 aColorSet.
add(10, 0x4DD0E1);
189 aColorSet.
add(11, 0x0097A7);
194 aColorSet.
add(0, 0xFFFFFF);
195 aColorSet.
add(1, 0x212121);
196 aColorSet.
add(2, 0xF5F5F5);
197 aColorSet.
add(3, 0x424242);
198 aColorSet.
add(4, 0xFF9800);
199 aColorSet.
add(5, 0xFF6D00);
200 aColorSet.
add(6, 0xFF5722);
201 aColorSet.
add(7, 0xDD2C00);
202 aColorSet.
add(8, 0xF44336);
203 aColorSet.
add(9, 0xD50000);
204 aColorSet.
add(10, 0xE91E63);
205 aColorSet.
add(11, 0xC51162);
209 ColorSet aColorSet(
"Material Green");
210 aColorSet.
add(0, 0xFFFFFF);
211 aColorSet.
add(1, 0x212121);
212 aColorSet.
add(2, 0xF5F5F5);
213 aColorSet.
add(3, 0x424242);
214 aColorSet.
add(4, 0x009688);
215 aColorSet.
add(5, 0x00bfa5);
216 aColorSet.
add(6, 0x4caf50);
217 aColorSet.
add(7, 0x00c853);
218 aColorSet.
add(8, 0x8bc34a);
219 aColorSet.
add(9, 0x64dd17);
220 aColorSet.
add(10, 0xcddc39);
221 aColorSet.
add(11, 0xaeea00);
230 if (rColorSet.
getName() == rName)
253 (void)xmlTextWriterStartElement(pWriter, BAD_CAST(
"Theme"));
254 (void)xmlTextWriterWriteFormatAttribute(pWriter, BAD_CAST(
"ptr"),
"%p",
this);
255 (void)xmlTextWriterWriteAttribute(pWriter, BAD_CAST(
"maName"),
256 BAD_CAST(
maName.toUtf8().getStr()));
263 (void)xmlTextWriterEndElement(pWriter);
273 std::vector<util::Color> aColorScheme;
274 for (
size_t i = 0;
i < 12; ++
i)
276 aColorScheme.push_back(
static_cast<sal_Int32
>(
mpColorSet->getColor(
i)));
283 rVal <<=
aMap.getAsConstPropertyValueList();
289 std::unique_ptr<Theme> pTheme;
292 auto it =
aMap.find(
"Name");
293 if (it !=
aMap.end())
296 it->second >>=
aName;
297 pTheme = std::make_unique<Theme>(
aName);
300 it =
aMap.find(
"ColorSchemeName");
301 if (it !=
aMap.end() && pTheme)
304 it->second >>=
aName;
305 auto pSet = std::make_unique<ColorSet>(
aName);
306 pTheme->SetColorSet(std::move(pSet));
307 pColorSet = pTheme->GetColorSet();
310 it =
aMap.find(
"ColorScheme");
311 if (it !=
aMap.end() && pColorSet)
313 uno::Sequence<util::Color> aColors;
314 it->second >>= aColors;
315 for (
size_t i = 0;
i < aColors.size(); ++
i)
319 SAL_WARN(
"svx",
"Theme::FromAny: too many colors in the color set");
332 for (
size_t nObject = 0; nObject < pPage->
GetObjCount(); ++nObject)
335 UpdateSdrObject(
this,
pObject);
342 UpdateSdrObject(
this, aIter.
Next());
355 std::vector<Color> aColors;
356 for (
size_t i = 0;
i < 12; ++
i)
void ApplyTintOrShade(sal_Int16 n100thPercent)
void ApplyLumModOff(sal_Int16 nMod, sal_Int16 nOff)
SdrObject * GetObj(size_t nNum) const
size_t GetObjCount() const
A SdrPage contains exactly one SdrObjList and a description of the physical page dimensions (size / m...
void add(sal_uInt32 nIndex, ::Color aColorData)
ColorSet(OUString const &aName)
const OUString & getName() const
const Color & getColor(sal_uInt32 nIndex) const
void dumpAsXml(xmlTextWriterPtr pWriter) const
std::vector< Color > maColors
std::vector< ColorSet > maColorSets
const ColorSet & getColorSet(sal_uInt32 nIndex)
A named theme has a named color set.
std::vector< Color > GetColors() const
Theme(OUString const &rName)
static std::unique_ptr< Theme > FromAny(const css::uno::Any &rVal)
void UpdateSdrPage(const SdrPage *pPage)
void SetName(const OUString &rName)
void SetColorSet(std::unique_ptr< ColorSet > pColorSet)
void dumpAsXml(xmlTextWriterPtr pWriter) const
Color GetColor(ThemeColorType eType) const
const OUString & GetName() const
std::unique_ptr< ColorSet > mpColorSet
void ToAny(css::uno::Any &rVal) const
EmbeddedObjectRef * pObject
struct _xmlTextWriter * xmlTextWriterPtr
#define SAL_WARN(area, stream)
css::uno::Sequence< DstElementType > containerToSequence(const SrcType &i_Container)
ThemeColorType
Offsets into the color list of a theme.
HashMap_OWString_Interface aMap