tdf#122717: fix handling of zero width/height lines
The code was introduced in 627c2469843c9461b665c4571f1214aca7fc36a4
< tdf#96674 drawingML import: fix handling of zero width/height lines >
and later on removed by 36bade04d3780bc54c51b46bb0b63e69789658a5
< tdf106792 Get rid of SvxShapePolyPolygonBezier > with the comment
"I doubt that the additional code to make a line not exactly hor/ver is needed.
Checked and it is not needed, thus removed the change from
tdf#96674 in shape.cxx."
it turned out, it's still needed
Change-Id: Ib64ee17227e3e588e94381abeabe5a2ff2e0b7d1
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/113102
Tested-by: Jenkins
Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
diff --git a/oox/source/drawingml/shape.cxx b/oox/source/drawingml/shape.cxx
index bc2d7b5..819d117 100644
--- a/oox/source/drawingml/shape.cxx
+++ b/oox/source/drawingml/shape.cxx
@@ -856,10 +856,17 @@
uno::Reference<lang::XServiceInfo> xModelInfo(rFilterBase.getModel(), uno::UNO_QUERY);
for( i = 0; i < nNumPoints; ++i )
{
const basegfx::B2DPoint aPoint( aPoly.getB2DPoint( i ) );
basegfx::B2DPoint aPoint( aPoly.getB2DPoint( i ) );
// tdf#106792 Not needed anymore due to the change in SdrPathObj::NbcResize:
// tdf#96674: Guard against zero width or height.
// Guard against zero width or height.
if (i)
{
const basegfx::B2DPoint& rPreviousPoint = aPoly.getB2DPoint(i - 1);
if (aPoint.getX() - rPreviousPoint.getX() == 0)
aPoint.setX(aPoint.getX() + 1);
if (aPoint.getY() - rPreviousPoint.getY() == 0)
aPoint.setY(aPoint.getY() + 1);
}
pPoints[i] = awt::Point(static_cast<sal_Int32>(aPoint.getX()), static_cast<sal_Int32>(aPoint.getY()));
}
diff --git a/sw/qa/extras/ooxmlimport/data/tdf122717.docx b/sw/qa/extras/ooxmlimport/data/tdf122717.docx
new file mode 100644
index 0000000..9a20982
--- /dev/null
+++ b/sw/qa/extras/ooxmlimport/data/tdf122717.docx
Binary files differ
diff --git a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
index b8f725a..216fb0d 100644
--- a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
+++ b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
@@ -1429,6 +1429,19 @@
CPPUNIT_ASSERT(aActualSize.Height > 0);
}
DECLARE_OOXMLIMPORT_TEST(testTdf122717, "tdf122717.docx")
{
uno::Reference<drawing::XShape> xShape = getShape(1);
CPPUNIT_ASSERT(xShape.is());
awt::Size aActualSize(xShape->getSize());
// Without the fix in place, this test would have failed with
// - Expected: 2
// - Actual : 8160
CPPUNIT_ASSERT_EQUAL(sal_Int32(2), aActualSize.Width);
CPPUNIT_ASSERT_EQUAL(sal_Int32(8160), aActualSize.Height);
}
DECLARE_OOXMLIMPORT_TEST(testTdf98882, "tdf98882.docx")
{
sal_Int32 nFlyHeight = parseDump("//fly/infos/bounds", "height").toInt32();