summaryrefslogtreecommitdiff
path: root/oox
diff options
context:
space:
mode:
authorGülşah Köse <gulsah.kose@collabora.com>2021-02-24 15:05:01 +0300
committerXisco Fauli <xiscofauli@libreoffice.org>2021-03-10 09:14:05 +0100
commitc4dddad19640dfefde52d04c3a7cf7064afe05b5 (patch)
tree093c87e1fa8e5edcee6689808d22a2035ceafba0 /oox
parent47e2c2f428c870de12b7a99c7bcb249a3a3b86ea (diff)
Reset ShapeProperty priority and handle only crop case.
With 2c96bd26ec488d865370fe9d394e7c4e228e05ab we changed the ShapeProperty priority uncessarily. Reset the priority as use FillBitmapName if supported. BlipFillProperties::moFillRect negative GraphicCrop values means stretched. BlipFillProperties::moClipRect positive GraphicCrop values means stretched. We add a control to handle only stretched cases. Change-Id: I2eb1233d0477acf093ada36b4cc29ff34f767037 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/111479 Tested-by: Jenkins Reviewed-by: Gülşah Köse <gulsah.kose@collabora.com> Signed-off-by: Xisco Fauli <xiscofauli@libreoffice.org> Reviewed-on: https://gerrit.libreoffice.org/c/core/+/112242
Diffstat (limited to 'oox')
-rw-r--r--oox/source/drawingml/fillproperties.cxx23
1 files changed, 16 insertions, 7 deletions
diff --git a/oox/source/drawingml/fillproperties.cxx b/oox/source/drawingml/fillproperties.cxx
index 88be3e9eb0f3..21c7d84d1309 100644
--- a/oox/source/drawingml/fillproperties.cxx
+++ b/oox/source/drawingml/fillproperties.cxx
@@ -111,6 +111,8 @@ void lclCalculateCropPercentage(uno::Reference<graphic::XGraphic> const & xGraph
aFillRect.Y2 = -nBottomPercentage;
}
+// Crops a piece of the bitmap. Takes negative aFillRect values. Negative values means "crop",
+// positive values means "grow" bitmap with empty spaces. lclCropGraphic doesn't handle growing.
Reference< XGraphic > lclCropGraphic(uno::Reference<graphic::XGraphic> const & xGraphic, geometry::IntegerRectangle2D aFillRect)
{
::Graphic aGraphic(xGraphic);
@@ -773,11 +775,17 @@ void FillProperties::pushToPropMap( ShapePropertyMap& rPropMap,
aGraphCrop.Bottom = static_cast< sal_Int32 >( ( static_cast< double >( aOriginalSize.Height ) * aFillRect.Y2 ) / 100000 );
rPropMap.setProperty(PROP_GraphicCrop, aGraphCrop);
- if(bIsCustomShape &&
- ( aGraphCrop.Left != 0 || aGraphCrop.Right != 0 || aGraphCrop.Top != 0 || aGraphCrop.Bottom != 0))
+ bool bHasCropValues = aGraphCrop.Left != 0 || aGraphCrop.Right !=0 || aGraphCrop.Top != 0 || aGraphCrop.Bottom != 0;
+ // Negative GraphicCrop values means "crop" here.
+ bool bNeedCrop = aGraphCrop.Left <= 0 && aGraphCrop.Right <= 0 && aGraphCrop.Top <= 0 && aGraphCrop.Bottom <= 0;
+
+ if(bIsCustomShape && bHasCropValues && bNeedCrop)
{
xGraphic = lclCropGraphic(xGraphic, aFillRect);
- rPropMap.setProperty(ShapeProperty::FillBitmap, xGraphic);
+ if (rPropMap.supportsProperty(ShapeProperty::FillBitmapName))
+ rPropMap.setProperty(ShapeProperty::FillBitmapName, xGraphic);
+ else
+ rPropMap.setProperty(ShapeProperty::FillBitmap, xGraphic);
}
}
}
@@ -881,14 +889,15 @@ void GraphicProperties::pushToPropMap( PropertyMap& rPropMap, const GraphicHelpe
aGraphCrop.Bottom = rtl::math::round( ( static_cast< double >( aOriginalSize.Height ) * oClipRect.Y2 ) / 100000 );
rPropMap.setProperty(PROP_GraphicCrop, aGraphCrop);
- if(mbIsCustomShape &&
- ( aGraphCrop.Left != 0 || aGraphCrop.Right != 0 || aGraphCrop.Top != 0 || aGraphCrop.Bottom != 0))
+ bool bHasCropValues = aGraphCrop.Left != 0 || aGraphCrop.Right !=0 || aGraphCrop.Top != 0 || aGraphCrop.Bottom != 0;
+ // Positive GraphicCrop values means "crop" here.
+ bool bNeedCrop = aGraphCrop.Left >= 0 && aGraphCrop.Right >= 0 && aGraphCrop.Top >= 0 && aGraphCrop.Bottom >= 0;
+
+ if(mbIsCustomShape && bHasCropValues && bNeedCrop)
{
geometry::IntegerRectangle2D aCropRect = oClipRect;
lclCalculateCropPercentage(xGraphic, aCropRect);
xGraphic = lclCropGraphic(xGraphic, aCropRect);
-
- rPropMap.setProperty(PROP_FillBitmap, xGraphic);
}
}
}