svx/sdi/svxitems.sdi         |    8 ++++-
 svx/source/xoutdev/xattr.cxx |   64 ++++++++++++++++++++++++++++++++++++++-----
 2 files changed, 65 insertions(+), 7 deletions(-)

New commits:
commit e04080c1259cd91388e157b58e3c4b041aed163c
Author:     Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk>
AuthorDate: Thu Jun 8 15:17:38 2023 +0900
Commit:     Miklos Vajna <vmik...@collabora.com>
CommitDate: Tue Jun 13 15:54:33 2023 +0200

    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 <qui...@gmail.com>
    (cherry picked from commit ac2838a9cd5577f92dbece130fa6fb8b8e26e6cd)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/152739
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com>
    Reviewed-by: Miklos Vajna <vmik...@collabora.com>

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;
 }
 

Reply via email to