summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXisco Fauli <xiscofauli@libreoffice.org>2020-12-01 19:17:24 +0100
committerMiklos Vajna <vmiklos@collabora.com>2020-12-17 16:52:15 +0100
commit33d85de4b964638192eabdb5753a5ca87d6892b7 (patch)
tree5fb39fdb72222db14b327cbb6d63b1b3bc22271c
parent4114e5304425ff54e6957ef417e96e01a4cef532 (diff)
tdf#128501: DOC export: fix lost bitmap fill for OOXML custom shapes
this fix is based on 7032be2e9edd82dad2d67f1582aaa57676bda4a1 which fixes the same problem for PPT filter Change-Id: Id62c29892dd3fce42d27e2e46a7933154cb973f6 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107003 Tested-by: Jenkins Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org> (cherry picked from commit 2f9325b270fab10f6900aec30ca27135363c4c69) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107094 Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
-rw-r--r--filter/source/msfilter/eschesdo.cxx37
-rw-r--r--sw/qa/extras/ww8export/data/tdf128501.docbin0 -> 16587 bytes
-rw-r--r--sw/qa/extras/ww8export/ww8export3.cxx17
3 files changed, 46 insertions, 8 deletions
diff --git a/filter/source/msfilter/eschesdo.cxx b/filter/source/msfilter/eschesdo.cxx
index efe3c908b6b4..1443b46702c6 100644
--- a/filter/source/msfilter/eschesdo.cxx
+++ b/filter/source/msfilter/eschesdo.cxx
@@ -33,6 +33,7 @@
#include <com/sun/star/text/XText.hpp>
#include <com/sun/star/text/TextContentAnchorType.hpp>
#include <com/sun/star/drawing/CircleKind.hpp>
+#include <com/sun/star/drawing/FillStyle.hpp>
#include <comphelper/extract.hxx>
#include <com/sun/star/drawing/HomogenMatrix3.hpp>
#include <basegfx/matrix/b2dhommatrix.hxx>
@@ -263,15 +264,35 @@ sal_uInt32 ImplEESdrWriter::ImplWriteShape( ImplEESdrObject& rObj,
}
else
{
- addShape(sal::static_int_cast< sal_uInt16 >(eShapeType),
- nMirrorFlags | ShapeFlag::HaveShapeProperty | ShapeFlag::HaveAnchor);
- aPropOpt.CreateCustomShapeProperties( eShapeType, rObj.GetShapeRef() );
- aPropOpt.CreateFillProperties( rObj.mXPropSet, true );
- if ( rObj.ImplGetText() )
+ const Reference< XPropertySet > xPropSet = rObj.mXPropSet;
+ drawing::FillStyle eFS = drawing::FillStyle_NONE;
+ if(xPropSet.is())
+ {
+ uno::Reference< XPropertySetInfo > xPropInfo = xPropSet->getPropertySetInfo();
+ if ( xPropInfo.is() && xPropInfo->hasPropertyByName("FillStyle"))
+ xPropSet->getPropertyValue("FillStyle") >>= eFS;
+ }
+
+ if (eFS == drawing::FillStyle_BITMAP && eShapeType == mso_sptMax)
+ {
+ // We can't map this custom shape to a DOC preset and it has a bitmap fill.
+ // Make sure that at least the bitmap fill is not lost.
+ addShape( ESCHER_ShpInst_PictureFrame, ShapeFlag::HaveShapeProperty | ShapeFlag::HaveAnchor );
+ if ( aPropOpt.CreateGraphicProperties( rObj.mXPropSet, "Bitmap", false, true, true, bOOxmlExport ) )
+ aPropOpt.AddOpt( ESCHER_Prop_LockAgainstGrouping, 0x800080 );
+ }
+ else
{
- if ( !aPropOpt.IsFontWork() )
- aPropOpt.CreateTextProperties( rObj.mXPropSet, mpEscherEx->QueryTextID(
- rObj.GetShapeRef(), rObj.GetShapeId() ), true, false );
+ addShape(sal::static_int_cast< sal_uInt16 >(eShapeType),
+ nMirrorFlags | ShapeFlag::HaveShapeProperty | ShapeFlag::HaveAnchor);
+ aPropOpt.CreateCustomShapeProperties( eShapeType, rObj.GetShapeRef() );
+ aPropOpt.CreateFillProperties( rObj.mXPropSet, true );
+ if ( rObj.ImplGetText() )
+ {
+ if ( !aPropOpt.IsFontWork() )
+ aPropOpt.CreateTextProperties( rObj.mXPropSet, mpEscherEx->QueryTextID(
+ rObj.GetShapeRef(), rObj.GetShapeId() ), true, false );
+ }
}
}
}
diff --git a/sw/qa/extras/ww8export/data/tdf128501.doc b/sw/qa/extras/ww8export/data/tdf128501.doc
new file mode 100644
index 000000000000..3313e397a961
--- /dev/null
+++ b/sw/qa/extras/ww8export/data/tdf128501.doc
Binary files differ
diff --git a/sw/qa/extras/ww8export/ww8export3.cxx b/sw/qa/extras/ww8export/ww8export3.cxx
index a663a034074b..7d8756fbe6cb 100644
--- a/sw/qa/extras/ww8export/ww8export3.cxx
+++ b/sw/qa/extras/ww8export/ww8export3.cxx
@@ -71,6 +71,23 @@ DECLARE_WW8EXPORT_TEST(testArabicZeroNumbering, "arabic-zero-numbering.doc")
aMap["NumberingType"].get<sal_uInt16>());
}
+DECLARE_WW8EXPORT_TEST(testTdf128501, "tdf128501.doc")
+{
+ if (!mbExported)
+ {
+ uno::Reference<drawing::XShapeDescriptor> xShapeDescriptor = getShape(1);
+ CPPUNIT_ASSERT_EQUAL(OUString("com.sun.star.drawing.CustomShape"), xShapeDescriptor->getShapeType());
+ }
+ else
+ {
+ uno::Reference<drawing::XShapeDescriptor> xShapeDescriptor = getShape(1);
+ // Without the fix in place, this test would have failed with
+ // - Expected: FrameShape
+ // - Actual : com.sun.star.drawing.CustomShape
+ CPPUNIT_ASSERT_EQUAL(OUString("FrameShape"), xShapeDescriptor->getShapeType());
+ }
+}
+
CPPUNIT_TEST_FIXTURE(SwModelTestBase, testArabicZeroNumberingFootnote)
{
// Create a document, set footnote numbering type to ARABIC_ZERO.