summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTomaž Vajngerl <tomaz.vajngerl@collabora.co.uk>2023-06-08 15:17:38 +0900
committerTomaž Vajngerl <quikee@gmail.com>2023-06-08 11:13:28 +0200
commitac2838a9cd5577f92dbece130fa6fb8b8e26e6cd (patch)
tree32d4a7eb2de87935bd0767c3905f6d0c1a49fbc9
parent452856addb26a24846505061b08e2dd64a9c5b5f (diff)
svx: add "Color" and "ComplexColorJSON" argument for XColorItem
This is needed now that the color picker expects this argument to be present. Without the "ComplexColorJSON" argument, it is not possible for the color picker to set any ComplexColor attributes, which is needed for theme support. Change-Id: I0a04ea57826afb9f17a54ce24a4cbcc88dfe1481 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/152727 Tested-by: Jenkins Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
-rw-r--r--svx/sdi/svxitems.sdi8
-rw-r--r--svx/source/xoutdev/xattr.cxx64
2 files changed, 65 insertions, 7 deletions
diff --git a/svx/sdi/svxitems.sdi b/svx/sdi/svxitems.sdi
index eabb753f647a..6e8773315d29 100644
--- a/svx/sdi/svxitems.sdi
+++ b/svx/sdi/svxitems.sdi
@@ -214,7 +214,13 @@ item String SvxPatternListItem;
item String SfxLockBytesItem;
item String SvxFontListItem;
item String avmedia_MediaItem;
-item INT32 XColorItem;
+struct XColor
+{
+ INT32 Color MID_COLOR_RGB;
+ String ComplexColorJSON MID_COMPLEX_COLOR_JSON;
+};
+item XColor XColorItem;
+
item INT16 SdrPercentItem;
item INT32 SdrMetricItem;
diff --git a/svx/source/xoutdev/xattr.cxx b/svx/source/xoutdev/xattr.cxx
index d3fd73f5fa04..3cb12c467b74 100644
--- a/svx/source/xoutdev/xattr.cxx
+++ b/svx/source/xoutdev/xattr.cxx
@@ -306,18 +306,70 @@ const Color& XColorItem::GetColorValue() const
}
-bool XColorItem::QueryValue( css::uno::Any& rVal, sal_uInt8 /*nMemberId*/) const
+bool XColorItem::QueryValue( css::uno::Any& rVal, sal_uInt8 nMemberId) const
{
- rVal <<= GetColorValue().GetRGBColor();
+ nMemberId &= ~CONVERT_TWIPS;
+ switch (nMemberId)
+ {
+ case MID_COMPLEX_COLOR:
+ {
+ auto xComplexColor = model::color::createXComplexColor(getComplexColor());
+ rVal <<= xComplexColor;
+ break;
+ }
+ case MID_COMPLEX_COLOR_JSON:
+ {
+ rVal <<= OStringToOUString(model::color::convertToJSON(getComplexColor()), RTL_TEXTENCODING_UTF8);
+ break;
+ }
+ default:
+ {
+ rVal <<= GetColorValue().GetRGBColor();
+ break;
+ }
+ }
return true;
}
-bool XColorItem::PutValue( const css::uno::Any& rVal, sal_uInt8 /*nMemberId*/)
+bool XColorItem::PutValue( const css::uno::Any& rVal, sal_uInt8 nMemberId)
{
- Color nValue;
- rVal >>= nValue;
- SetColorValue( nValue );
+ nMemberId &= ~CONVERT_TWIPS;
+ switch (nMemberId)
+ {
+ case MID_COMPLEX_COLOR:
+ {
+ css::uno::Reference<css::util::XComplexColor> xComplexColor;
+ if (!(rVal >>= xComplexColor))
+ return false;
+ setComplexColor(model::color::getFromXComplexColor(xComplexColor));
+ }
+ break;
+ case MID_COMPLEX_COLOR_JSON:
+ {
+ OUString sComplexColorJson;
+ if (!(rVal >>= sComplexColorJson))
+ return false;
+
+ if (sComplexColorJson.isEmpty())
+ return false;
+
+ OString aJSON = OUStringToOString(sComplexColorJson, RTL_TEXTENCODING_ASCII_US);
+ model::ComplexColor aComplexColor;
+ model::color::convertFromJSON(aJSON, aComplexColor);
+ setComplexColor(aComplexColor);
+ }
+ break;
+ default:
+ {
+ Color nValue;
+ if(!(rVal >>= nValue ))
+ return false;
+
+ SetColorValue( nValue );
+ }
+ break;
+ }
return true;
}