summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/svx/svdopath.hxx1
-rw-r--r--svx/source/svdraw/svdopath.cxx13
-rw-r--r--sw/qa/extras/ww8export/data/shapes-line-ellipse.docbin0 -> 40448 bytes
-rw-r--r--sw/qa/extras/ww8export/ww8export2.cxx30
4 files changed, 44 insertions, 0 deletions
diff --git a/include/svx/svdopath.hxx b/include/svx/svdopath.hxx
index be345a850b7d..134643c4d3ea 100644
--- a/include/svx/svdopath.hxx
+++ b/include/svx/svdopath.hxx
@@ -88,6 +88,7 @@ public:
virtual sal_uInt32 GetHdlCount() const override;
virtual void AddToHdlList(SdrHdlList& rHdlList) const override;
virtual void AddToPlusHdlList(SdrHdlList& rHdlList, SdrHdl& rHdl) const override;
+ virtual const tools::Rectangle& GetLogicRect() const override;
// special drag methods
virtual bool hasSpecialDrag() const override;
diff --git a/svx/source/svdraw/svdopath.cxx b/svx/source/svdraw/svdopath.cxx
index a9aaefae3239..62525af19552 100644
--- a/svx/source/svdraw/svdopath.cxx
+++ b/svx/source/svdraw/svdopath.cxx
@@ -2059,6 +2059,19 @@ void SdrPathObj::AddToPlusHdlList(SdrHdlList& rHdlList, SdrHdl& rHdl) const
}
}
+// tdf#123321: Make sure that SdrPathObj (e.g. line) has big enough extent for
+// visibility. This is realised by ensuring GetLogicRect() is the same as
+// GetSnapRect() for the SdrPathObj. Other SdrTextObj objects like
+// SdrObjCustomShape will still use a different version of this method that
+// does not consider the rotation. Otherwise, the rotated SdrObjCustomShape
+// would become mistakenly larger after save and reload (tdf#91687).
+// The invokation of the GetLogicRect() method that caused tdf#123321 was in
+// PlcDrawObj::WritePlc().
+const tools::Rectangle &SdrPathObj::GetLogicRect() const
+{
+ return GetSnapRect();
+}
+
// dragging
bool SdrPathObj::hasSpecialDrag() const
diff --git a/sw/qa/extras/ww8export/data/shapes-line-ellipse.doc b/sw/qa/extras/ww8export/data/shapes-line-ellipse.doc
new file mode 100644
index 000000000000..184881c00a6d
--- /dev/null
+++ b/sw/qa/extras/ww8export/data/shapes-line-ellipse.doc
Binary files differ
diff --git a/sw/qa/extras/ww8export/ww8export2.cxx b/sw/qa/extras/ww8export/ww8export2.cxx
index 3dc101b6f626..bf751ee46426 100644
--- a/sw/qa/extras/ww8export/ww8export2.cxx
+++ b/sw/qa/extras/ww8export/ww8export2.cxx
@@ -414,6 +414,36 @@ DECLARE_WW8EXPORT_TEST(testTdf108072, "tdf108072.doc")
CPPUNIT_ASSERT_EQUAL(true, getProperty<bool>(xTableRows->getByIndex(0), "IsSplitAllowed"));
}
+DECLARE_WW8EXPORT_TEST(testTdf123321, "shapes-line-ellipse.doc")
+{
+ // These are the 3 lines in which 1st and 3rd one were disappearing before
+ uno::Reference<drawing::XShape> l1 = getShape(7);
+ uno::Reference<drawing::XShape> l2 = getShape(8);
+ uno::Reference<drawing::XShape> l3 = getShape(9);
+
+ // first line (smallest)
+ // Fails without the fix: Expected: 423, Actual: 2
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(423), l1->getSize().Height);
+ // Fails without the fix: Expected: 0, Actual: 2
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), l1->getSize().Width);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(7908), l1->getPosition().X);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(37), l1->getPosition().Y);
+
+ // second line (larger)
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(2542), l2->getSize().Height);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(2), l2->getSize().Width);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(7916), l2->getPosition().X);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(289), l2->getPosition().Y);
+
+ // third line (largest)
+ // Fails without the fix: Expected: 7027, Actual: 2
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(7027), l3->getSize().Height);
+ // Fails without the fix: Expected: 0, Actual: 2
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), l3->getSize().Width);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(7911), l3->getPosition().X);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(231), l3->getPosition().Y);
+}
+
DECLARE_WW8EXPORT_TEST(testTdf91687, "tdf91687.doc")
{
// Exported Watermarks were resized