include/test/xmltesttools.hxx | 2 - sd/qa/unit/data/pptx/tdf115753.pptx |binary sd/qa/unit/export-tests.cxx | 45 +++++++++++++++++++++++++++++ svx/source/table/viewcontactoftableobj.cxx | 14 --------- test/source/xmltesttools.cxx | 10 +++++- 5 files changed, 55 insertions(+), 16 deletions(-)
New commits: commit 2b19cd84f10552c438dace0a4c52a70ccd440369 Author: nd101 <[email protected]> AuthorDate: Sat May 9 11:45:25 2020 +0800 Commit: Miklos Vajna <[email protected]> CommitDate: Wed Jul 29 12:03:34 2020 +0200 tdf#115753 fix table border missing when there are merged cells Remove code that ignores merged cells. Change-Id: I907220e9ffc9d18561171efd7d6b39d14a8341fa Reviewed-on: https://gerrit.libreoffice.org/c/core/+/93836 Tested-by: Jenkins Reviewed-by: Miklos Vajna <[email protected]> diff --git a/include/test/xmltesttools.hxx b/include/test/xmltesttools.hxx index a2c08d7dc0e8..d27e40796363 100644 --- a/include/test/xmltesttools.hxx +++ b/include/test/xmltesttools.hxx @@ -35,7 +35,7 @@ public: /// Return xmlDocPtr representation of the XML stream read from pStream. static xmlDocUniquePtr parseXmlStream(SvStream* pStream); - static xmlDocUniquePtr dumpAndParse(MetafileXmlDump& rDumper, const GDIMetaFile& rGDIMetaFile); + static xmlDocUniquePtr dumpAndParse(MetafileXmlDump& rDumper, const GDIMetaFile& rGDIMetaFile, const OUString& rStreamName = OUString()); protected: XmlTestTools(); diff --git a/sd/qa/unit/data/pptx/tdf115753.pptx b/sd/qa/unit/data/pptx/tdf115753.pptx new file mode 100755 index 000000000000..0350ddaad44c Binary files /dev/null and b/sd/qa/unit/data/pptx/tdf115753.pptx differ diff --git a/sd/qa/unit/export-tests.cxx b/sd/qa/unit/export-tests.cxx index a6ad545b3221..eb97da60fd1f 100644 --- a/sd/qa/unit/export-tests.cxx +++ b/sd/qa/unit/export-tests.cxx @@ -18,13 +18,16 @@ #include <svx/svdograf.hxx> #include <svx/svdomedia.hxx> #include <unotools/mediadescriptor.hxx> +#include <unotools/streamwrap.hxx> #include <rtl/ustring.hxx> +#include <comphelper/propertysequence.hxx> #include <vcl/opengl/OpenGLWrapper.hxx> #include <vcl/skia/SkiaHelper.hxx> #include <com/sun/star/drawing/XDrawPage.hpp> #include <com/sun/star/drawing/XDrawPagesSupplier.hpp> +#include <com/sun/star/drawing/GraphicExportFilter.hpp> #include <com/sun/star/beans/XPropertySet.hpp> #include <com/sun/star/awt/XBitmap.hpp> #include <com/sun/star/graphic/XGraphic.hpp> @@ -77,6 +80,7 @@ public: void testGlow(); void testSoftEdges(); void testShadowBlur(); + void testTdf115753(); CPPUNIT_TEST_SUITE(SdExportTest); @@ -114,6 +118,7 @@ public: CPPUNIT_TEST(testGlow); CPPUNIT_TEST(testSoftEdges); CPPUNIT_TEST(testShadowBlur); + CPPUNIT_TEST(testTdf115753); CPPUNIT_TEST_SUITE_END(); @@ -549,6 +554,46 @@ void SdExportTest::testBnc480256() xDocShRef->DoClose(); } +void SdExportTest::testTdf115753() +{ + sd::DrawDocShellRef xDocShRef = loadURL(m_directories.getURLFromSrc("/sd/qa/unit/data/pptx/tdf115753.pptx"), PPTX); + xDocShRef = saveAndReload(xDocShRef.get(), PPTX); + uno::Reference< drawing::XDrawPagesSupplier > xDoc(xDocShRef->GetDoc()->getUnoModel(), uno::UNO_QUERY_THROW); + uno::Reference< drawing::XDrawPage > xPage(xDoc->getDrawPages()->getByIndex(0), uno::UNO_QUERY_THROW); + uno::Reference< drawing::XShape > xShape(xPage->getByIndex(0), uno::UNO_QUERY_THROW); + + // Save the first shape to a metafile. + uno::Reference<drawing::XGraphicExportFilter> xGraphicExporter = drawing::GraphicExportFilter::create(comphelper::getProcessComponentContext()); + uno::Reference<lang::XComponent> xSourceDoc(xShape, uno::UNO_QUERY); + xGraphicExporter->setSourceDocument(xSourceDoc); + + SvMemoryStream aStream; + uno::Reference<io::XOutputStream> xOutputStream(new utl::OStreamWrapper(aStream)); + uno::Sequence<beans::PropertyValue> aDescriptor(comphelper::InitPropertySequence({ + { "OutputStream", uno::Any(xOutputStream) }, + { "FilterName", uno::Any(OUString("SVM")) } + })); + xGraphicExporter->filter(aDescriptor); + aStream.Seek(STREAM_SEEK_TO_BEGIN); + + // Read it back and dump it as an XML file. + Graphic aGraphic; + ReadGraphic(aStream, aGraphic); + const GDIMetaFile& rMetaFile = aGraphic.GetGDIMetaFile(); + MetafileXmlDump dumper; + + xmlDocUniquePtr pXmlDoc = XmlTestTools::dumpAndParse(dumper, rMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + // Without the fix in place, it will print: + // - Expected: 21180 + // - Actual : 12714 + // because without the fix, one of the border lines is missing, + // and the value, which is where the line ends, will be shorter + // than it should be. + assertXPath(pXmlDoc, "/metafile/push[6]/polyline/point[2]", "x", "21180"); + xDocShRef->DoClose(); +} + void SdExportTest::testUnknownAttributes() { ::sd::DrawDocShellRef xDocShRef = loadURL(m_directories.getURLFromSrc("/sd/qa/unit/data/unknown-attribute.fodp"), FODP); diff --git a/svx/source/table/viewcontactoftableobj.cxx b/svx/source/table/viewcontactoftableobj.cxx index fe6d03f1d900..d2778e333383 100644 --- a/svx/source/table/viewcontactoftableobj.cxx +++ b/svx/source/table/viewcontactoftableobj.cxx @@ -254,20 +254,6 @@ namespace sdr::contact aArray.SetCellStyleRight(aCellPos.mnCol, aCellPos.mnRow, impGetLineStyle(rTableLayouter, aCellPos.mnCol + 1, aCellPos.mnRow, false, nColCount, nRowCount, bIsRTL)); aArray.SetCellStyleTop(aCellPos.mnCol, aCellPos.mnRow, impGetLineStyle(rTableLayouter, aCellPos.mnCol, aCellPos.mnRow, true, nColCount, nRowCount, bIsRTL)); aArray.SetCellStyleBottom(aCellPos.mnCol, aCellPos.mnRow, impGetLineStyle(rTableLayouter, aCellPos.mnCol, aCellPos.mnRow + 1, true, nColCount, nRowCount, bIsRTL)); - - // ignore merged cells (all except the top-left of a merged cell) - if(!xCurrentCell->isMerged()) - { - // check if we are the top-left of a merged cell - const sal_Int32 nXSpan(xCurrentCell->getColumnSpan()); - const sal_Int32 nYSpan(xCurrentCell->getRowSpan()); - - if(nXSpan > 1 || nYSpan > 1) - { - // if merged, set so at CellBorderArray for primitive creation - aArray.SetMergedRange(aCellPos.mnCol, aCellPos.mnRow, aCellPos.mnCol + nXSpan - 1, aCellPos.mnRow + nYSpan - 1); - } - } } if(xCurrentCell.is() && !xCurrentCell->isMerged()) diff --git a/test/source/xmltesttools.cxx b/test/source/xmltesttools.cxx index 27833af1e90d..defb2ec2d096 100644 --- a/test/source/xmltesttools.cxx +++ b/test/source/xmltesttools.cxx @@ -59,8 +59,16 @@ xmlDocUniquePtr XmlTestTools::parseXmlStream(SvStream* pStream) return xmlDocUniquePtr(xmlParseDoc(pCharBuffer)); } -xmlDocUniquePtr XmlTestTools::dumpAndParse(MetafileXmlDump& rDumper, const GDIMetaFile& rGDIMetaFile) +xmlDocUniquePtr XmlTestTools::dumpAndParse(MetafileXmlDump& rDumper, const GDIMetaFile& rGDIMetaFile, const OUString& rStreamName) { + if (!rStreamName.isEmpty()) + { + SvStream *pStream = new SvFileStream(rStreamName, StreamMode::STD_READWRITE | StreamMode::TRUNC); + rDumper.dump(rGDIMetaFile, *pStream); + pStream->Seek(STREAM_SEEK_TO_BEGIN); + return XmlTestTools::parseXmlStream(pStream); + } + SvMemoryStream aStream; rDumper.dump(rGDIMetaFile, aStream); aStream.Seek(STREAM_SEEK_TO_BEGIN); _______________________________________________ Libreoffice-commits mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
