[Libreoffice-commits] core.git: oox/inc oox/source

Tamas Bunth (via logerrit) logerrit at kemper.freedesktop.org
Mon May 13 16:15:12 UTC 2019


 oox/inc/drawingml/graphicproperties.hxx |    3 ++-
 oox/source/drawingml/fillproperties.cxx |   12 ++++++++++--
 oox/source/drawingml/shape.cxx          |   17 ++++++++++++++---
 3 files changed, 26 insertions(+), 6 deletions(-)

New commits:
commit f4ba484183a1e7b9824f10580d633466c266828f
Author:     Tamas Bunth <tamas.bunth at collabora.co.uk>
AuthorDate: Mon May 13 01:02:07 2019 +0200
Commit:     Tamás Bunth <btomi96 at gmail.com>
CommitDate: Mon May 13 18:14:26 2019 +0200

    ooxml import: supprt cropping to shape
    
    Change-Id: I7bdc959921ecb0cbf19037a78b63eaeb8fc52814
    Reviewed-on: https://gerrit.libreoffice.org/72206
    Tested-by: Jenkins
    Reviewed-by: Tamás Bunth <btomi96 at gmail.com>

diff --git a/oox/inc/drawingml/graphicproperties.hxx b/oox/inc/drawingml/graphicproperties.hxx
index 01dd96cf8f2d..7a227f8cc949 100644
--- a/oox/inc/drawingml/graphicproperties.hxx
+++ b/oox/inc/drawingml/graphicproperties.hxx
@@ -40,12 +40,13 @@ struct GraphicProperties
 {
     BlipFillProperties      maBlipProps;            ///< Properties for the graphic.
     OUString                m_sMediaPackageURL;     ///< Audio/Video URL.
+    bool                    mbIsCustomShape = false;
     css::uno::Reference<css::io::XInputStream> m_xMediaStream; ///< Audio/Video input stream.
 
     /** Writes the properties to the passed property map. */
     void                pushToPropMap(
                             PropertyMap& rPropMap,
-                            const GraphicHelper& rGraphicHelper ) const;
+                            const GraphicHelper& rGraphicHelper) const;
 };
 
 } // namespace drawingml
diff --git a/oox/source/drawingml/fillproperties.cxx b/oox/source/drawingml/fillproperties.cxx
index 0b99d83733f3..9c5338ce8975 100644
--- a/oox/source/drawingml/fillproperties.cxx
+++ b/oox/source/drawingml/fillproperties.cxx
@@ -739,7 +739,7 @@ void FillProperties::pushToPropMap( ShapePropertyMap& rPropMap,
     }
 }
 
-void GraphicProperties::pushToPropMap( PropertyMap& rPropMap, const GraphicHelper& rGraphicHelper ) const
+void GraphicProperties::pushToPropMap( PropertyMap& rPropMap, const GraphicHelper& rGraphicHelper) const
 {
     sal_Int16 nBrightness = getLimitedValue< sal_Int16, sal_Int32 >( maBlipProps.moBrightness.get( 0 ) / PER_PERCENT, -100, 100 );
     sal_Int16 nContrast = getLimitedValue< sal_Int16, sal_Int32 >( maBlipProps.moContrast.get( 0 ) / PER_PERCENT, -100, 100 );
@@ -770,7 +770,15 @@ void GraphicProperties::pushToPropMap( PropertyMap& rPropMap, const GraphicHelpe
             nBrightness = 0;
             nContrast = 0;
         }
-        rPropMap.setProperty(PROP_Graphic, xGraphic);
+        if(mbIsCustomShape)
+        {
+            // it is a cropped graphic.
+            rPropMap.setProperty(PROP_FillStyle, FillStyle_BITMAP);
+            rPropMap.setProperty(PROP_FillBitmapMode, BitmapMode_STRETCH);
+            rPropMap.setProperty(PROP_FillBitmap, xGraphic);
+        }
+        else
+            rPropMap.setProperty(PROP_Graphic, xGraphic);
 
         // cropping
         if ( maBlipProps.moClipRect.has() )
diff --git a/oox/source/drawingml/shape.cxx b/oox/source/drawingml/shape.cxx
index 64c80568f7a8..1003b66e386c 100644
--- a/oox/source/drawingml/shape.cxx
+++ b/oox/source/drawingml/shape.cxx
@@ -658,8 +658,18 @@ Reference< XShape > const & Shape::createAndInsert(
     {
         aServiceName = finalizeServiceName( rFilterBase, rServiceName, aShapeRectHmm );
     }
+    // Use custom shape instead of GraphicObjectShape if the image is cropped to
+    // shape. Except rectangle, which does not require further cropping
+    bool bIsCroppedGraphic = (aServiceName == "com.sun.star.drawing.GraphicObjectShape" && mpCustomShapePropertiesPtr->getShapePresetType() >= 0
+            && mpCustomShapePropertiesPtr->getShapePresetType() != XML_Rect && mpCustomShapePropertiesPtr->getShapePresetType() != XML_rect);
     bool bIsCustomShape = ( aServiceName == "com.sun.star.drawing.CustomShape" ||
-                            aServiceName == "com.sun.star.drawing.ConnectorShape" );
+                            aServiceName == "com.sun.star.drawing.ConnectorShape" ||
+                            bIsCroppedGraphic);
+    if(bIsCroppedGraphic)
+    {
+        aServiceName = "com.sun.star.drawing.CustomShape";
+        mpGraphicPropertiesPtr->mbIsCustomShape = true;
+    }
     bool bUseRotationTransform = ( !mbWps ||
             aServiceName == "com.sun.star.drawing.LineShape" ||
             aServiceName == "com.sun.star.drawing.GroupShape" ||
@@ -971,13 +981,14 @@ Reference< XShape > const & Shape::createAndInsert(
         // applying properties
         aShapeProps.assignUsed( getShapeProperties() );
         aShapeProps.assignUsed( maDefaultShapeProperties );
-        if ( bIsEmbMedia || aServiceName == "com.sun.star.drawing.GraphicObjectShape" || aServiceName == "com.sun.star.drawing.OLE2Shape" )
+        if ( bIsEmbMedia || aServiceName == "com.sun.star.drawing.GraphicObjectShape" || aServiceName == "com.sun.star.drawing.OLE2Shape" || bIsCustomShape )
             mpGraphicPropertiesPtr->pushToPropMap( aShapeProps, rGraphicHelper );
         if ( mpTablePropertiesPtr.get() && aServiceName == "com.sun.star.drawing.TableShape" )
             mpTablePropertiesPtr->pushToPropSet( rFilterBase, xSet, mpMasterTextListStyle );
 
         FillProperties aFillProperties = getActualFillProperties(pTheme, &rShapeOrParentShapeFillProps);
-        aFillProperties.pushToPropMap( aShapeProps, rGraphicHelper, mnRotation, nFillPhClr, mbFlipH, mbFlipV );
+        if(!bIsCroppedGraphic)
+            aFillProperties.pushToPropMap( aShapeProps, rGraphicHelper, mnRotation, nFillPhClr, mbFlipH, mbFlipV );
         LineProperties aLineProperties = getActualLineProperties(pTheme);
         aLineProperties.pushToPropMap( aShapeProps, rGraphicHelper, nLinePhClr );
         EffectProperties aEffectProperties = getActualEffectProperties(pTheme);


More information about the Libreoffice-commits mailing list