diff options
Diffstat (limited to 'svx/source/xoutdev/xattr.cxx')
-rw-r--r-- | svx/source/xoutdev/xattr.cxx | 173 |
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); } |