summaryrefslogtreecommitdiff
path: root/svx/source/xoutdev/xattr.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'svx/source/xoutdev/xattr.cxx')
-rw-r--r--svx/source/xoutdev/xattr.cxx173
1 files changed, 156 insertions, 17 deletions
diff --git a/svx/source/xoutdev/xattr.cxx b/svx/source/xoutdev/xattr.cxx
index 2fcb40379b65..608829503d16 100644
--- a/svx/source/xoutdev/xattr.cxx
+++ b/svx/source/xoutdev/xattr.cxx
@@ -35,6 +35,7 @@
#include <o3tl/any.hxx>
#include <svl/itempool.hxx>
#include <editeng/memberids.h>
+#include <docmodel/uno/UnoThemeColor.hxx>
#include <tools/mapunit.hxx>
#include <tools/UnitConversion.hxx>
#include <osl/diagnose.h>
@@ -279,7 +280,8 @@ XColorItem::XColorItem(sal_uInt16 _nWhich, const Color& rTheColor)
XColorItem::XColorItem(const XColorItem& rItem) :
NameOrIndex(rItem),
- aColor(rItem.aColor)
+ aColor(rItem.aColor),
+ maThemeColor(rItem.maThemeColor)
{
}
@@ -291,7 +293,8 @@ XColorItem* XColorItem::Clone(SfxItemPool* /*pPool*/) const
bool XColorItem::operator==(const SfxPoolItem& rItem) const
{
return ( NameOrIndex::operator==(rItem) &&
- static_cast<const XColorItem&>(rItem).aColor == aColor );
+ static_cast<const XColorItem&>(rItem).aColor == aColor ) &&
+ static_cast<const XColorItem&>(rItem).maThemeColor == maThemeColor;
}
const Color& XColorItem::GetColorValue() const
@@ -323,11 +326,32 @@ void XColorItem::dumpAsXml(xmlTextWriterPtr pWriter) const
{
(void)xmlTextWriterWriteAttribute(pWriter, BAD_CAST("whichId"), BAD_CAST("SDRATTR_SHADOWCOLOR"));
}
+ else if (Which() == XATTR_FILLCOLOR)
+ {
+ (void)xmlTextWriterWriteAttribute(pWriter, BAD_CAST("whichId"), BAD_CAST("XATTR_FILLCOLOR"));
+ }
(void)xmlTextWriterWriteAttribute(pWriter, BAD_CAST("aColor"),
BAD_CAST(aColor.AsRGBHexString().toUtf8().getStr()));
NameOrIndex::dumpAsXml(pWriter);
+ (void)xmlTextWriterStartElement(pWriter, BAD_CAST("theme-color"));
+
+ (void)xmlTextWriterWriteAttribute(pWriter, BAD_CAST("theme-index"),
+ BAD_CAST(OString::number(sal_Int16(maThemeColor.getType())).getStr()));
+
+ for (auto const& rTransform : maThemeColor.getTransformations())
+ {
+ (void)xmlTextWriterStartElement(pWriter, BAD_CAST("transformation"));
+ (void)xmlTextWriterWriteAttribute(pWriter, BAD_CAST("type"),
+ BAD_CAST(OString::number(sal_Int16(rTransform.meType)).getStr()));
+ (void)xmlTextWriterWriteAttribute(pWriter, BAD_CAST("value"),
+ BAD_CAST(OString::number(rTransform.mnValue).getStr()));
+ (void)xmlTextWriterEndElement(pWriter);
+ }
+
+ (void)xmlTextWriterEndElement(pWriter);
+
(void)xmlTextWriterEndElement(pWriter);
}
@@ -966,19 +990,49 @@ bool XLineColorItem::GetPresentation
return true;
}
-bool XLineColorItem::QueryValue( css::uno::Any& rVal, sal_uInt8 /*nMemberId*/) const
+bool XLineColorItem::QueryValue( css::uno::Any& rVal, sal_uInt8 nMemberId) const
{
- rVal <<= GetColorValue().GetRGBColor();
+ nMemberId &= ~CONVERT_TWIPS;
+ switch (nMemberId)
+ {
+ case MID_COLOR_THEME_REFERENCE:
+ {
+ auto xThemeColor = model::theme::createXThemeColor(GetThemeColor());
+ rVal <<= xThemeColor;
+ break;
+ }
+ default:
+ {
+ rVal <<= GetColorValue().GetRGBColor();
+ break;
+ }
+ }
return true;
}
-bool XLineColorItem::PutValue( const css::uno::Any& rVal, sal_uInt8 /*nMemberId*/)
+bool XLineColorItem::PutValue( const css::uno::Any& rVal, sal_uInt8 nMemberId)
{
- sal_Int32 nValue = 0;
- if(!(rVal >>= nValue))
- return false;
+ nMemberId &= ~CONVERT_TWIPS;
+ switch(nMemberId)
+ {
+ case MID_COLOR_THEME_REFERENCE:
+ {
+ css::uno::Reference<css::util::XThemeColor> xThemeColor;
+ if (!(rVal >>= xThemeColor))
+ return false;
+ model::theme::setFromXThemeColor(GetThemeColor(), xThemeColor);
+ }
+ break;
+ default:
+ {
+ sal_Int32 nValue;
+ if(!(rVal >>= nValue ))
+ return false;
- SetColorValue( Color(ColorTransparency, nValue) );
+ SetColorValue( Color(ColorTransparency, nValue) );
+ break;
+ }
+ }
return true;
}
@@ -1892,20 +1946,103 @@ bool XFillColorItem::GetPresentation
return true;
}
-bool XFillColorItem::QueryValue( css::uno::Any& rVal, sal_uInt8 /*nMemberId*/) const
+bool XFillColorItem::QueryValue( css::uno::Any& rVal, sal_uInt8 nMemberId ) const
{
- rVal <<= GetColorValue().GetRGBColor();
+ nMemberId &= ~CONVERT_TWIPS;
+ switch (nMemberId)
+ {
+ case MID_COLOR_THEME_INDEX:
+ {
+ rVal <<= sal_Int16(GetThemeColor().getType());
+ break;
+ }
+ case MID_COLOR_LUM_MOD:
+ {
+ sal_Int16 nValue = 10000;
+ for (auto const& rTransform : GetThemeColor().getTransformations())
+ {
+ if (rTransform.meType == model::TransformationType::LumMod)
+ nValue = rTransform.mnValue;
+ }
+ rVal <<= nValue;
+ break;
+ }
+ case MID_COLOR_LUM_OFF:
+ {
+ sal_Int16 nValue = 0;
+ for (auto const& rTransform : GetThemeColor().getTransformations())
+ {
+ if (rTransform.meType == model::TransformationType::LumOff)
+ nValue = rTransform.mnValue;
+ }
+ rVal <<= nValue;
+ break;
+ }
+ case MID_COLOR_THEME_REFERENCE:
+ {
+ auto xThemeColor = model::theme::createXThemeColor(GetThemeColor());
+ rVal <<= xThemeColor;
+ break;
+ }
+ default:
+ {
+ rVal <<= GetColorValue().GetRGBColor();
+ break;
+ }
+ }
return true;
}
-bool XFillColorItem::PutValue( const css::uno::Any& rVal, sal_uInt8 /*nMemberId*/)
+bool XFillColorItem::PutValue( const css::uno::Any& rVal, sal_uInt8 nMemberId )
{
- Color nValue;
- if(!(rVal >>= nValue ))
- return false;
+ nMemberId &= ~CONVERT_TWIPS;
+ switch(nMemberId)
+ {
+ case MID_COLOR_THEME_INDEX:
+ {
+ sal_Int16 nIndex = -1;
+ if (!(rVal >>= nIndex))
+ return false;
+ GetThemeColor().setType(model::convertToThemeColorType(nIndex));
+ break;
+ }
+ case MID_COLOR_LUM_MOD:
+ {
+ sal_Int16 nLumMod = 10000;
+ if (!(rVal >>= nLumMod))
+ return false;
+ GetThemeColor().removeTransformations(model::TransformationType::LumMod);
+ GetThemeColor().addTransformation({model::TransformationType::LumMod, nLumMod});
+ }
+ break;
+ case MID_COLOR_LUM_OFF:
+ {
+ sal_Int16 nLumOff = 0;
+ if (!(rVal >>= nLumOff))
+ return false;
+ GetThemeColor().removeTransformations(model::TransformationType::LumOff);
+ GetThemeColor().addTransformation({model::TransformationType::LumOff, nLumOff});
+ }
+ break;
+ case MID_COLOR_THEME_REFERENCE:
+ {
+ css::uno::Reference<css::util::XThemeColor> xThemeColor;
+ if (!(rVal >>= xThemeColor))
+ return false;
+ model::theme::setFromXThemeColor(GetThemeColor(), xThemeColor);
+ }
+ break;
+ default:
+ {
+ Color nValue;
+ if(!(rVal >>= nValue ))
+ return false;
- SetColorValue( nValue );
+ SetColorValue( nValue );
+ break;
+ }
+ }
return true;
}
@@ -1913,7 +2050,9 @@ void XFillColorItem::dumpAsXml(xmlTextWriterPtr pWriter) const
{
(void)xmlTextWriterStartElement(pWriter, BAD_CAST("XFillColorItem"));
(void)xmlTextWriterWriteAttribute(pWriter, BAD_CAST("whichId"), BAD_CAST(OString::number(Which()).getStr()));
- (void)xmlTextWriterWriteAttribute(pWriter, BAD_CAST("value"), BAD_CAST(GetColorValue().AsRGBHexString().toUtf8().getStr()));
+
+ XColorItem::dumpAsXml(pWriter);
+
(void)xmlTextWriterEndElement(pWriter);
}