diff options
-rw-r--r-- | include/svx/svdopath.hxx | 1 | ||||
-rw-r--r-- | svx/source/svdraw/svdopath.cxx | 13 | ||||
-rw-r--r-- | sw/qa/extras/ww8export/data/shapes-line-ellipse.doc | bin | 0 -> 40448 bytes | |||
-rw-r--r-- | sw/qa/extras/ww8export/ww8export2.cxx | 30 |
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 Binary files differnew file mode 100644 index 000000000000..184881c00a6d --- /dev/null +++ b/sw/qa/extras/ww8export/data/shapes-line-ellipse.doc 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 |