svx/sdi/xoitems.sdi                    |   16 +++++++++++--
 svx/source/tbxctrls/PaletteManager.cxx |    2 +
 svx/source/xoutdev/xattr.cxx           |   40 +++++++++++++++++++++++++++++++++
 3 files changed, 56 insertions(+), 2 deletions(-)

New commits:
commit d915ea96cf9190ada63a14ca84ee96f5a946d94b
Author:     Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk>
AuthorDate: Thu Jun 8 01:36:27 2023 +0900
Commit:     Xisco Fauli <xiscofa...@libreoffice.org>
CommitDate: Thu Jun 8 10:52:37 2023 +0200

    tdf#155404 handle ComplexColor as JSON for XLineColor and XFillColor
    
    This adds support for MID_COMPLEX_COLOR_JSON attribute for
    XLineColorItem and XFillColorItem, which makes it possible to set
    a theme colors from the UI also for fills and lines.
    
    In addition this resolved the issue tdf#155404 which had the effect
    that unsupported "Color" attribute for the UNO call resulted that
    the dialog was opened. This is now not the case anymore as the
    "Color" argument for XLineColorItem and XFillColorItem was added
    in addition to "ComplexColorJSON" argument.
    
    Change-Id: I8876942b07aba453cbe1422b76a1608c78e42109
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/152713
    Tested-by: Jenkins
    Reviewed-by: Tomaž Vajngerl <qui...@gmail.com>
    (cherry picked from commit 5a2c6f4df7149f8c1f543f120fe19bd66abfc189)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/152666
    Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org>

diff --git a/svx/sdi/xoitems.sdi b/svx/sdi/xoitems.sdi
index 015ead6e0d72..50db129a6434 100644
--- a/svx/sdi/xoitems.sdi
+++ b/svx/sdi/xoitems.sdi
@@ -24,7 +24,13 @@ struct XFillBitmap
 };
 item XFillBitmap XFillBitmapItem;
 
-item INT32  XFillColorItem;             // XColorItem
+struct XFillColor
+{
+    INT32 Color MID_COLOR_RGB;
+    String ComplexColorJSON MID_COMPLEX_COLOR_JSON;
+};
+
+item XFillColor XFillColorItem; // XColorItem
 
 enum SvxGradientStyle
 {
@@ -84,7 +90,13 @@ item SvxFillStyle XFillStyleItem;
 
 //item String XLineAttrSetItem; SfxSetItem!
 
-item INT32  XLineColorItem;
+struct XLineColor
+{
+    INT32  Color MID_COLOR_RGB;
+    String ComplexColorJSON MID_COMPLEX_COLOR_JSON;
+};
+
+item XLineColor XLineColorItem;
 
 enum SvxDashStyle
 {
diff --git a/svx/source/tbxctrls/PaletteManager.cxx 
b/svx/source/tbxctrls/PaletteManager.cxx
index b56248825600..141938d145d7 100644
--- a/svx/source/tbxctrls/PaletteManager.cxx
+++ b/svx/source/tbxctrls/PaletteManager.cxx
@@ -427,6 +427,8 @@ void PaletteManager::DispatchColorCommand(const OUString& 
aCommand, const NamedC
         comphelper::makePropertyValue(aObj.GetURLPath()+ ".Color", 
sal_Int32(rColor.m_aColor)),
     };
 
+    printf ("Sending: %s\n", aObj.GetURLPath().toUtf8().getStr());
+
     if (rColor.m_nThemeIndex != -1)
     {
         model::ComplexColor aComplexColor;
diff --git a/svx/source/xoutdev/xattr.cxx b/svx/source/xoutdev/xattr.cxx
index 4860373836a8..d3fd73f5fa04 100644
--- a/svx/source/xoutdev/xattr.cxx
+++ b/svx/source/xoutdev/xattr.cxx
@@ -37,6 +37,7 @@
 #include <svl/itempool.hxx>
 #include <editeng/memberids.h>
 #include <docmodel/uno/UnoComplexColor.hxx>
+#include <docmodel/color/ComplexColorJSON.hxx>
 #include <tools/mapunit.hxx>
 #include <tools/UnitConversion.hxx>
 #include <osl/diagnose.h>
@@ -1002,6 +1003,11 @@ bool XLineColorItem::QueryValue( css::uno::Any& rVal, 
sal_uInt8 nMemberId) const
             rVal <<= xComplexColor;
             break;
         }
+        case MID_COMPLEX_COLOR_JSON:
+        {
+            rVal <<= 
OStringToOUString(model::color::convertToJSON(getComplexColor()), 
RTL_TEXTENCODING_UTF8);
+            break;
+        }
         default:
         {
             rVal <<= GetColorValue().GetRGBColor();
@@ -1024,6 +1030,20 @@ bool XLineColorItem::PutValue( const css::uno::Any& 
rVal, sal_uInt8 nMemberId)
             setComplexColor(model::color::getFromXComplexColor(xComplexColor));
         }
         break;
+        case MID_COMPLEX_COLOR_JSON:
+        {
+            OUString sComplexColorJson;
+            if (!(rVal >>= sComplexColorJson))
+                return false;
+
+            if (sComplexColorJson.isEmpty())
+                return false;
+            model::ComplexColor aComplexColor;
+            OString aJSON = OUStringToOString(sComplexColorJson, 
RTL_TEXTENCODING_ASCII_US);
+            model::color::convertFromJSON(aJSON, aComplexColor);
+            setComplexColor(aComplexColor);
+        }
+        break;
         default:
         {
             sal_Int32 nValue;
@@ -1985,6 +2005,11 @@ bool XFillColorItem::QueryValue( css::uno::Any& rVal, 
sal_uInt8 nMemberId ) cons
             rVal <<= xComplexColor;
             break;
         }
+        case MID_COMPLEX_COLOR_JSON:
+        {
+            rVal <<= 
OStringToOUString(model::color::convertToJSON(getComplexColor()), 
RTL_TEXTENCODING_UTF8);
+            break;
+        }
         default:
         {
             rVal <<= GetColorValue().GetRGBColor();
@@ -2034,6 +2059,21 @@ bool XFillColorItem::PutValue( const css::uno::Any& 
rVal, sal_uInt8 nMemberId )
             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;

Reply via email to