[Libreoffice-commits] core.git: Branch 'libreoffice-7-1' - oox/inc oox/source sd/qa

Gülşah Köse (via logerrit) logerrit at kemper.freedesktop.org
Wed Feb 3 10:24:20 UTC 2021


 oox/inc/drawingml/fillproperties.hxx    |    3 +-
 oox/source/drawingml/fillproperties.cxx |   34 +++++++++++++++++++++++++++++++-
 oox/source/drawingml/shape.cxx          |    2 -
 sd/qa/unit/data/pptx/tdf134210.pptx     |binary
 sd/qa/unit/import-tests.cxx             |   19 +++++++++++++++++
 5 files changed, 55 insertions(+), 3 deletions(-)

New commits:
commit 28bdc7916e1875e6827cae3b70977ad6c8c42824
Author:     Gülşah Köse <gulsah.kose at collabora.com>
AuthorDate: Wed Jan 20 00:52:56 2021 +0300
Commit:     Miklos Vajna <vmiklos at collabora.com>
CommitDate: Wed Feb 3 11:23:42 2021 +0100

    tdf#134210 Import support for custom stretch values.
    
    Change-Id: I33ced8d667e37b7fb79f4c87b689f45966ac0097
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/109658
    Tested-by: Jenkins
    Reviewed-by: Gülşah Köse <gulsah.kose at collabora.com>
    (cherry picked from commit 2c96bd26ec488d865370fe9d394e7c4e228e05ab)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/109806
    Reviewed-by: Miklos Vajna <vmiklos at collabora.com>

diff --git a/oox/inc/drawingml/fillproperties.hxx b/oox/inc/drawingml/fillproperties.hxx
index cf26acfc17d6..f308f6aaec0d 100644
--- a/oox/inc/drawingml/fillproperties.hxx
+++ b/oox/inc/drawingml/fillproperties.hxx
@@ -146,7 +146,8 @@ struct FillProperties
                             sal_Int32 nShapeRotation = 0,
                             ::Color nPhClr = API_RGB_TRANSPARENT,
                             bool bFlipH = false,
-                            bool bFlipV = false ) const;
+                            bool bFlipV = false,
+                            bool bIsCustomShape = false ) const;
 };
 
 } // namespace oox::drawingml
diff --git a/oox/source/drawingml/fillproperties.cxx b/oox/source/drawingml/fillproperties.cxx
index 3efd64878326..837578ebc807 100644
--- a/oox/source/drawingml/fillproperties.cxx
+++ b/oox/source/drawingml/fillproperties.cxx
@@ -87,6 +87,32 @@ Reference< XGraphic > lclRotateGraphic(uno::Reference<graphic::XGraphic> const &
     return aReturnGraphic.GetXGraphic();
 }
 
+Reference< XGraphic > lclCropGraphic(uno::Reference<graphic::XGraphic> const & xGraphic, geometry::IntegerRectangle2D aFillRect)
+{
+    ::Graphic aGraphic(xGraphic);
+    ::Graphic aReturnGraphic;
+
+    assert (aGraphic.GetType() == GraphicType::Bitmap);
+
+    BitmapEx aBitmapEx(aGraphic.GetBitmapEx());
+
+    sal_Int32 nOrigHeight = aBitmapEx.GetSizePixel().Height();
+    sal_Int32 nHeight = nOrigHeight;
+    sal_Int32 nTopCorr  = nOrigHeight * -1 * static_cast<double>(aFillRect.Y1) / 100000;
+    nHeight += nTopCorr;
+    sal_Int32 nBottomCorr = nOrigHeight * -1 * static_cast<double>(aFillRect.Y2) / 100000;
+    nHeight += nBottomCorr;
+
+    aBitmapEx.Scale(Size(aBitmapEx.GetSizePixel().Width(), nHeight));
+    aBitmapEx.Crop(tools::Rectangle(Point(0, nTopCorr), Size(aBitmapEx.GetSizePixel().Width(), nOrigHeight)));
+
+    aReturnGraphic = ::Graphic(aBitmapEx);
+    aReturnGraphic.setOriginURL(aGraphic.getOriginURL());
+
+    return aReturnGraphic.GetXGraphic();
+}
+
+
 Reference< XGraphic > lclCheckAndApplyChangeColorTransform(const BlipFillProperties &aBlipProps, uno::Reference<graphic::XGraphic> const & xGraphic,
                                                            const GraphicHelper& rGraphicHelper, const ::Color nPhClr)
 {
@@ -272,7 +298,7 @@ Color FillProperties::getBestSolidColor() const
 
 void FillProperties::pushToPropMap( ShapePropertyMap& rPropMap,
         const GraphicHelper& rGraphicHelper, sal_Int32 nShapeRotation, ::Color nPhClr,
-        bool bFlipH, bool bFlipV ) const
+        bool bFlipH, bool bFlipV, bool bIsCustomShape) const
 {
     if( !moFillType.has() )
         return;
@@ -675,6 +701,12 @@ void FillProperties::pushToPropMap( ShapePropertyMap& rPropMap,
                             if ( aFillRect.Y2 )
                                 aGraphCrop.Bottom = static_cast< sal_Int32 >( ( static_cast< double >( aOriginalSize.Height ) * aFillRect.Y2 ) / 100000 );
                             rPropMap.setProperty(PROP_GraphicCrop, aGraphCrop);
+
+                            if(bIsCustomShape)
+                            {
+                                xGraphic = lclCropGraphic(xGraphic, aFillRect);
+                                rPropMap.setProperty(ShapeProperty::FillBitmap, xGraphic);
+                            }
                         }
                     }
                 }
diff --git a/oox/source/drawingml/shape.cxx b/oox/source/drawingml/shape.cxx
index a7ffe9655f1c..4ec4c425c9ce 100644
--- a/oox/source/drawingml/shape.cxx
+++ b/oox/source/drawingml/shape.cxx
@@ -1058,7 +1058,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 );
+            aFillProperties.pushToPropMap( aShapeProps, rGraphicHelper, mnRotation, nFillPhClr, mbFlipH, mbFlipV, bIsCustomShape );
         LineProperties aLineProperties = getActualLineProperties(pTheme);
         aLineProperties.pushToPropMap( aShapeProps, rGraphicHelper, nLinePhClr );
         EffectProperties aEffectProperties = getActualEffectProperties(pTheme);
diff --git a/sd/qa/unit/data/pptx/tdf134210.pptx b/sd/qa/unit/data/pptx/tdf134210.pptx
new file mode 100644
index 000000000000..6867ac4801ff
Binary files /dev/null and b/sd/qa/unit/data/pptx/tdf134210.pptx differ
diff --git a/sd/qa/unit/import-tests.cxx b/sd/qa/unit/import-tests.cxx
index 41402e006367..ee75e62a849b 100644
--- a/sd/qa/unit/import-tests.cxx
+++ b/sd/qa/unit/import-tests.cxx
@@ -204,6 +204,7 @@ public:
     void testTdf138148();
     void testTdf114488();
     void testTdf134174();
+    void testTdf134210();
     void testTdf114913();
     void testTdf114821();
     void testTdf115394();
@@ -318,6 +319,7 @@ public:
     CPPUNIT_TEST(testTdf138148);
     CPPUNIT_TEST(testTdf114488);
     CPPUNIT_TEST(testTdf134174);
+    CPPUNIT_TEST(testTdf134210);
     CPPUNIT_TEST(testTdf114913);
     CPPUNIT_TEST(testTdf114821);
     CPPUNIT_TEST(testTdf115394);
@@ -2752,6 +2754,23 @@ void SdImportTest::testTdf134174()
     xDocShRef->DoClose();
 }
 
+void SdImportTest::testTdf134210()
+{
+    sd::DrawDocShellRef xDocShRef = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/pptx/tdf134210.pptx"), PPTX);
+    uno::Reference<beans::XPropertySet> xShape(getShapeFromPage(0, 0, xDocShRef), uno::UNO_SET_THROW);
+    CPPUNIT_ASSERT(xShape.is());
+
+    uno::Reference<graphic::XGraphic> xGraphic;
+    xShape->getPropertyValue("FillBitmap") >>= xGraphic;
+    CPPUNIT_ASSERT(xGraphic.is());
+
+    Graphic aGraphic(xGraphic);
+    BitmapEx aBitmap(aGraphic.GetBitmapEx());
+    CPPUNIT_ASSERT_EQUAL( Color(6708292), aBitmap.GetPixelColor( 0, 0 ));
+
+    xDocShRef->DoClose();
+}
+
 void SdImportTest::testTdf114913()
 {
     sd::DrawDocShellRef xDocShRef = loadURL(m_directories.getURLFromSrc("sd/qa/unit/data/pptx/tdf114913.pptx"), PPTX);


More information about the Libreoffice-commits mailing list