File bsc1172053.diff of Package libreoffice.15776

From 73e9e4145ba53585a1a3dcdfbc333c36e6bc1ffc Mon Sep 17 00:00:00 2001
From: Miklos Vajna <>
Date: Wed, 10 Jun 2020 14:51:04 +0200
Subject: [PATCH] bsc1172053.diff

PPTX export, custom shape, bitmap fill: fix source vs fill rect confusion

Commit 682ab832522b1349f1714bcb16f6e83468ea2920 (drawingML
export\import: cropping of shape's fill texture, 2014-02-12) improved
the DOCX filter, so the fill rectangle of a custom shape with bitmap
fill is handled.

The problem is drawingML has a source rectangle (similar to our crop
rect) to limit the usage of the bitmap, and also it has a fill rectangle
in case some margin is wanted around a stretched bitmap. We don't have a
mapping for the later.

Fix the problem by limiting the above work for DOCX, this way PPTX's
source rectangle won't be turned into a stretch's fill rectangle.

This way no unwanted margins will appear around the image -- those
margins can be large enough that the image effectively disappears on

(cherry picked from commit b00e43fa5848be0cc7ba81b185021511d94cdc00)

Change-Id: Ic35063545a56eec9eaf885bbd397a854705d134f
 oox/source/export/drawingml.cxx | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/oox/source/export/drawingml.cxx b/oox/source/export/drawingml.cxx
index 468c89ad7b7e..05cd97946341 100644
--- a/oox/source/export/drawingml.cxx
+++ b/oox/source/export/drawingml.cxx
@@ -1455,6 +1455,12 @@ void DrawingML::WriteXGraphicBlipFill(uno::Reference<beans::XPropertySet> const
     WriteXGraphicBlip(rXPropSet, rxGraphic, bRelPathToMedia);
+    if (GetDocumentType() != DOCUMENT_DOCX)
+    {
+        // Write the crop rectangle of Impress as a source rectangle.
+        WriteSrcRectXGraphic(rXPropSet, rxGraphic);
+    }
     if (bWriteMode)
         WriteXGraphicBlipMode(rXPropSet, rxGraphic);
@@ -1550,6 +1556,13 @@ void DrawingML::WriteSrcRectXGraphic(uno::Reference<beans::XPropertySet> const &
 void DrawingML::WriteXGraphicStretch(uno::Reference<beans::XPropertySet> const & rXPropSet,
                                      uno::Reference<graphic::XGraphic> const & rxGraphic)
+    if (GetDocumentType() != DOCUMENT_DOCX)
+    {
+        // Limiting the area used for stretching is not supported in Impress.
+        mpFS->singleElementNS(XML_a, XML_stretch);
+        return;
+    }
     mpFS->startElementNS(XML_a, XML_stretch);
     bool bCrop = false;
openSUSE Build Service is sponsored by