oox/inc/drawingml/fillproperties.hxx    |    1 +
 oox/source/drawingml/fillproperties.cxx |   11 +++++++++--
 oox/source/drawingml/shape.cxx          |    4 +++-
 oox/source/token/properties.txt         |    1 +
 svx/qa/unit/styles.cxx                  |    7 +++++--
 5 files changed, 19 insertions(+), 5 deletions(-)

New commits:
commit f5089e745367e111fb02c493c8c90e96a29e199c
Author:     Miklos Vajna <vmik...@collabora.com>
AuthorDate: Wed Mar 9 20:51:34 2022 +0100
Commit:     Miklos Vajna <vmik...@collabora.com>
CommitDate: Thu Mar 10 08:17:20 2022 +0100

    sd theme: add PPTX import for shape fill color
    
    The theme index is typically not a direct property, but comes from style
    -> fillref -> theme index, so support that.
    
    Change-Id: I00733db44bb5321019bbc7337d10feb0a34661a2
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/131268
    Tested-by: Jenkins
    Reviewed-by: Miklos Vajna <vmik...@collabora.com>

diff --git a/oox/inc/drawingml/fillproperties.hxx 
b/oox/inc/drawingml/fillproperties.hxx
index f308f6aaec0d..532cb0ec3975 100644
--- a/oox/inc/drawingml/fillproperties.hxx
+++ b/oox/inc/drawingml/fillproperties.hxx
@@ -145,6 +145,7 @@ struct FillProperties
                             const GraphicHelper& rGraphicHelper,
                             sal_Int32 nShapeRotation = 0,
                             ::Color nPhClr = API_RGB_TRANSPARENT,
+                            sal_Int16 nPhClrTheme = -1,
                             bool bFlipH = false,
                             bool bFlipV = false,
                             bool bIsCustomShape = false ) const;
diff --git a/oox/source/drawingml/fillproperties.cxx 
b/oox/source/drawingml/fillproperties.cxx
index 49906cc9b10f..9589a7388bd5 100644
--- a/oox/source/drawingml/fillproperties.cxx
+++ b/oox/source/drawingml/fillproperties.cxx
@@ -371,7 +371,7 @@ Color FillProperties::getBestSolidColor() const
 }
 
 void FillProperties::pushToPropMap( ShapePropertyMap& rPropMap,
-        const GraphicHelper& rGraphicHelper, sal_Int32 nShapeRotation, ::Color 
nPhClr,
+        const GraphicHelper& rGraphicHelper, sal_Int32 nShapeRotation, ::Color 
nPhClr, sal_Int16 nPhClrTheme,
         bool bFlipH, bool bFlipV, bool bIsCustomShape) const
 {
     if( !moFillType.has() )
@@ -388,9 +388,16 @@ void FillProperties::pushToPropMap( ShapePropertyMap& 
rPropMap,
         case XML_solidFill:
             if( maFillColor.isUsed() )
             {
-                rPropMap.setProperty( ShapeProperty::FillColor, 
maFillColor.getColor( rGraphicHelper, nPhClr ) );
+                ::Color aFillColor = maFillColor.getColor(rGraphicHelper, 
nPhClr);
+                rPropMap.setProperty(ShapeProperty::FillColor, aFillColor);
                 if( maFillColor.hasTransparency() )
                     rPropMap.setProperty( ShapeProperty::FillTransparency, 
maFillColor.getTransparency() );
+
+                if (aFillColor == nPhClr)
+                {
+                    rPropMap.setProperty(PROP_FillColorTheme, nPhClrTheme);
+                }
+
                 eFillStyle = FillStyle_SOLID;
             }
         break;
diff --git a/oox/source/drawingml/shape.cxx b/oox/source/drawingml/shape.cxx
index 98401179d84d..7a01ebddb09e 100644
--- a/oox/source/drawingml/shape.cxx
+++ b/oox/source/drawingml/shape.cxx
@@ -1161,6 +1161,7 @@ Reference< XShape > const & Shape::createAndInsert(
 
         ::Color nLinePhClr(ColorTransparency, 0xffffffff);
         ::Color nFillPhClr(ColorTransparency, 0xffffffff);
+        sal_Int16 nFillPhClrTheme = -1;
         // TODO: use ph color when applying effect properties
         //sal_Int32 nEffectPhClr = -1;
 
@@ -1197,6 +1198,7 @@ Reference< XShape > const & Shape::createAndInsert(
                 if (!mbUseBgFill)
                 {
                     nFillPhClr = pFillRef->maPhClr.getColor(rGraphicHelper);
+                    nFillPhClrTheme = pFillRef->maPhClr.getSchemeColorIndex();
                 }
 
                 OUString sColorScheme = pFillRef->maPhClr.getSchemeColorName();
@@ -1259,7 +1261,7 @@ Reference< XShape > const & Shape::createAndInsert(
         if (getFillProperties().moFillType.has() && 
getFillProperties().moFillType.get() == XML_grpFill)
             getFillProperties().assignUsed(aFillProperties);
         if(!bIsCroppedGraphic)
-            aFillProperties.pushToPropMap( aShapeProps, rGraphicHelper, 
mnRotation, nFillPhClr, mbFlipH, mbFlipV, bIsCustomShape );
+            aFillProperties.pushToPropMap( aShapeProps, rGraphicHelper, 
mnRotation, nFillPhClr, nFillPhClrTheme, mbFlipH, mbFlipV, bIsCustomShape );
         LineProperties aLineProperties = getActualLineProperties(pTheme);
         aLineProperties.pushToPropMap( aShapeProps, rGraphicHelper, nLinePhClr 
);
         EffectProperties aEffectProperties = getActualEffectProperties(pTheme);
diff --git a/oox/source/token/properties.txt b/oox/source/token/properties.txt
index 87a6700bd35a..e318e0038ecb 100644
--- a/oox/source/token/properties.txt
+++ b/oox/source/token/properties.txt
@@ -176,6 +176,7 @@ FillBitmapSizeX
 FillBitmapSizeY
 FillBitmap
 FillColor
+FillColorTheme
 FillGradient
 FillGradientName
 FillHatch
diff --git a/svx/qa/unit/styles.cxx b/svx/qa/unit/styles.cxx
index 3881fe1d1006..3bfa6d8cf09b 100644
--- a/svx/qa/unit/styles.cxx
+++ b/svx/qa/unit/styles.cxx
@@ -93,8 +93,11 @@ CPPUNIT_TEST_FIXTURE(Test, testThemeChange)
     uno::Reference<beans::XPropertySet> 
xShape4(xDrawPageShapes->getByIndex(4), uno::UNO_QUERY);
     // Blue.
     CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(0x4472c4), 
GetShapeFillColor(xShape4));
-    // Set theme index to accent 1 till PPTX import is missing.
-    xShape4->setPropertyValue("FillColorTheme", 
uno::makeAny(static_cast<sal_Int16>(4)));
+    // The theme index of this filled shape is set by the PPTX import:
+    sal_Int32 nColorTheme = -1;
+    xShape4->getPropertyValue("FillColorTheme") >>= nColorTheme;
+    // 4 means accent1, this was -1 without the PPTX import bit in place.
+    CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(4), nColorTheme);
 
     // When changing the master slide of slide 1 to use the theme of the 
second master slide:
     uno::Reference<drawing::XMasterPageTarget> xDrawPage2(

Reply via email to