diff options
author | Xisco Fauli <xiscofauli@libreoffice.org> | 2020-12-01 19:17:24 +0100 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.com> | 2020-12-17 16:52:15 +0100 |
commit | 33d85de4b964638192eabdb5753a5ca87d6892b7 (patch) | |
tree | 5fb39fdb72222db14b327cbb6d63b1b3bc22271c | |
parent | 4114e5304425ff54e6957ef417e96e01a4cef532 (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.cxx | 37 | ||||
-rw-r--r-- | sw/qa/extras/ww8export/data/tdf128501.doc | bin | 0 -> 16587 bytes | |||
-rw-r--r-- | sw/qa/extras/ww8export/ww8export3.cxx | 17 |
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 Binary files differnew file mode 100644 index 000000000000..3313e397a961 --- /dev/null +++ b/sw/qa/extras/ww8export/data/tdf128501.doc 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. |