diff options
author | Tomaž Vajngerl <tomaz.vajngerl@collabora.co.uk> | 2023-06-08 15:17:38 +0900 |
---|---|---|
committer | Tomaž Vajngerl <quikee@gmail.com> | 2023-06-08 11:13:28 +0200 |
commit | ac2838a9cd5577f92dbece130fa6fb8b8e26e6cd (patch) | |
tree | 32d4a7eb2de87935bd0767c3905f6d0c1a49fbc9 | |
parent | 452856addb26a24846505061b08e2dd64a9c5b5f (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.sdi | 8 | ||||
-rw-r--r-- | svx/source/xoutdev/xattr.cxx | 64 |
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; } |