oox/source/shape/ShapeContextHandler.cxx | 14 +++++++++++++- sw/qa/extras/ooxmlexport/data/fdo81031.docx |binary sw/qa/extras/ooxmlexport/ooxmlexport.cxx | 16 ++++++++++++++++ 3 files changed, 29 insertions(+), 1 deletion(-)
New commits: commit 0d5b053436eebac00948e95d64a87e150d195c07 Author: Vinaya Mandke <vinaya.man...@synerzip.com> Date: Tue Jul 8 15:32:29 2014 +0530 DOCX FILEOPEN VML Shape (image) is lost on import fdo#81031 ShapeContextHandler::getDrawingShapeContext mxDrawingShapeContext is set once and never reset. So in a file which has numPicBullets and vml shapes in document.xml there is a problem. First the fragment path is set as word/numbering.xml. But when msRelationFragmentPath changes to word/document.xml, mxDrawingShapeContext is not reset and hence the relationships are not resolved. Conflicts: sw/qa/extras/ooxmlexport/ooxmlexport.cxx Reviewed on: https://gerrit.libreoffice.org/10180 Change-Id: I4a1401103797972731257145430f2048b94a04bc diff --git a/oox/source/shape/ShapeContextHandler.cxx b/oox/source/shape/ShapeContextHandler.cxx index 53a6927..4ed6298 100644 --- a/oox/source/shape/ShapeContextHandler.cxx +++ b/oox/source/shape/ShapeContextHandler.cxx @@ -205,7 +205,19 @@ ShapeContextHandler::getDrawingShapeContext() (new oox::vml::DrawingFragment ( *mxFilterBase, msRelationFragmentPath, *mpDrawing ))); } - + else + { + // Reset the handler if fragment path has changed + OUString sHandlerFragmentPath = dynamic_cast<ContextHandler *>(mxDrawingFragmentHandler.get())->getFragmentPath(); + if ( !msRelationFragmentPath.equals(sHandlerFragmentPath) ) + { + mxDrawingFragmentHandler.clear(); + mxDrawingFragmentHandler.set + (dynamic_cast<ContextHandler *> + (new oox::vml::DrawingFragment + ( *mxFilterBase, msRelationFragmentPath, *mpDrawing ))); + } + } return mxDrawingFragmentHandler; } diff --git a/sw/qa/extras/ooxmlexport/data/fdo81031.docx b/sw/qa/extras/ooxmlexport/data/fdo81031.docx new file mode 100644 index 0000000..d80111d Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo81031.docx differ diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx index 0c530fb..7dd37a2 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx @@ -9,6 +9,8 @@ #include <swmodeltestbase.hxx> +#include <com/sun/star/awt/XBitmap.hpp> +#include <com/sun/star/graphic/XGraphic.hpp> #include <com/sun/star/frame/XStorable.hpp> #include <com/sun/star/drawing/FillStyle.hpp> #include <com/sun/star/drawing/LineJoint.hpp> @@ -3783,6 +3785,20 @@ DECLARE_OOXMLEXPORT_TEST(testFooterBodyDistance, "footer-body-distance.docx") assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:r/w:br", 1); } +DECLARE_OOXMLEXPORT_TEST(testfdo81031, "fdo81031.docx") +{ + // vml image was not rendered + // As there are also numPicBullets in the file, + // the fragmentPath was not changed hence relationships were not resolved. + + uno::Reference<drawing::XShape> image = getShape(1); + uno::Reference<beans::XPropertySet> xImage(image, uno::UNO_QUERY); + uno::Reference<graphic::XGraphic> xGraphic = getProperty<uno::Reference<graphic::XGraphic> >(xImage, "Graphic"); + uno::Reference<awt::XBitmap> xBitmap(xGraphic, uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL( static_cast<sal_Int32>(381), xBitmap->getSize().Width ); + CPPUNIT_ASSERT_EQUAL( static_cast<sal_Int32>(148), xBitmap->getSize().Height ); +} + CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits