diff options
author | nd101 <Fong@nd.com.cn> | 2020-05-09 11:45:25 +0800 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.com> | 2020-07-29 12:03:34 +0200 |
commit | 2b19cd84f10552c438dace0a4c52a70ccd440369 (patch) | |
tree | 8aa6e793074cf336b115f4c06f543aacb92e4cf5 | |
parent | 5ad17c85dc93973c0cbb1d633b9eed144f0677de (diff) |
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 <vmiklos@collabora.com>
-rw-r--r-- | include/test/xmltesttools.hxx | 2 | ||||
-rwxr-xr-x | sd/qa/unit/data/pptx/tdf115753.pptx | bin | 0 -> 34324 bytes | |||
-rw-r--r-- | sd/qa/unit/export-tests.cxx | 45 | ||||
-rw-r--r-- | svx/source/table/viewcontactoftableobj.cxx | 14 | ||||
-rw-r--r-- | test/source/xmltesttools.cxx | 10 |
5 files changed, 55 insertions, 16 deletions
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 Binary files differnew file mode 100755 index 000000000000..0350ddaad44c --- /dev/null +++ b/sd/qa/unit/data/pptx/tdf115753.pptx 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); |