[Libreoffice-commits] core.git: sc/qa sc/source
Regina Henschel (via logerrit)
logerrit at kemper.freedesktop.org
Tue Nov 10 23:20:49 UTC 2020
sc/qa/unit/data/ods/loadVerticalFlip.ods |binary
sc/qa/unit/scshapetest.cxx | 30 ++++++++++++++++++++++++++++++
sc/source/core/data/drwlayer.cxx | 5 +++--
3 files changed, 33 insertions(+), 2 deletions(-)
New commits:
commit 122d1e391625ca21345c67c90720e971819aa4a6
Author: Regina Henschel <rb.henschel at t-online.de>
AuthorDate: Tue Nov 10 23:37:20 2020 +0100
Commit: Regina Henschel <rb.henschel at t-online.de>
CommitDate: Wed Nov 11 00:20:07 2020 +0100
Correction to improve 'resize with cell'
Error: A vertical flipped shape lost flip on loading. The error slipped
in, when I have implemented the suggestions from Jan-Marek. The object
is vertical flipped, to have no flip for calculating the full sized
logical rectangle. Therefore the second call to method
lcl_NeedsMirrorYCorrection gives wrong result 'false'. I need to
remember the result of the first call.
Change-Id: Ia411fe7108be9fdcbbf748ee9de9f443e55d6ed0
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/105570
Tested-by: Jenkins
Reviewed-by: Regina Henschel <rb.henschel at t-online.de>
diff --git a/sc/qa/unit/data/ods/loadVerticalFlip.ods b/sc/qa/unit/data/ods/loadVerticalFlip.ods
new file mode 100644
index 000000000000..e18809cef2ac
Binary files /dev/null and b/sc/qa/unit/data/ods/loadVerticalFlip.ods differ
diff --git a/sc/qa/unit/scshapetest.cxx b/sc/qa/unit/scshapetest.cxx
index d2c8cc946296..279c9be43eda 100644
--- a/sc/qa/unit/scshapetest.cxx
+++ b/sc/qa/unit/scshapetest.cxx
@@ -33,6 +33,7 @@ public:
ScShapeTest();
void saveAndReload(css::uno::Reference<css::lang::XComponent>& xComponent,
const OUString& rFilter);
+ void testLoadVerticalFlip();
void testTdf117948_CollapseBeforeShape();
void testTdf137355_UndoHideRows();
void testTdf115655_HideDetail();
@@ -40,6 +41,7 @@ public:
void testCustomShapeCellAnchoredRotatedShape();
CPPUNIT_TEST_SUITE(ScShapeTest);
+ CPPUNIT_TEST(testLoadVerticalFlip);
CPPUNIT_TEST(testTdf117948_CollapseBeforeShape);
CPPUNIT_TEST(testTdf137355_UndoHideRows);
CPPUNIT_TEST(testTdf115655_HideDetail);
@@ -97,6 +99,34 @@ static void lcl_AssertRectEqualWithTolerance(const OString& sInfo,
labs(rExpected.GetHeight() - rActual.GetHeight()) <= nTolerance);
}
+void ScShapeTest::testLoadVerticalFlip()
+{
+ // The document has a cell anchored custom shape with vertical flip. Error was, that the
+ // flip was lost on loading.
+ OUString aFileURL;
+ createFileURL("loadVerticalFlip.ods", aFileURL);
+ uno::Reference<css::lang::XComponent> xComponent = loadFromDesktop(aFileURL);
+ CPPUNIT_ASSERT(xComponent.is());
+
+ // Get the document model
+ SfxObjectShell* pFoundShell = SfxObjectShell::GetShellFromComponent(xComponent);
+ CPPUNIT_ASSERT_MESSAGE("Failed to access document shell", pFoundShell);
+ ScDocShell* pDocSh = dynamic_cast<ScDocShell*>(pFoundShell);
+ CPPUNIT_ASSERT(pDocSh);
+
+ // Get the shape and check that it is flipped
+ ScDocument& rDoc = pDocSh->GetDocument();
+ ScDrawLayer* pDrawLayer = rDoc.GetDrawLayer();
+ CPPUNIT_ASSERT(pDrawLayer);
+ const SdrPage* pPage = pDrawLayer->GetPage(0);
+ CPPUNIT_ASSERT(pPage);
+ SdrObjCustomShape* pObj = dynamic_cast<SdrObjCustomShape*>(pPage->GetObj(0));
+ CPPUNIT_ASSERT(pObj);
+ CPPUNIT_ASSERT_MESSAGE("Load: Object should be vertically flipped", pObj->IsMirroredY());
+
+ pDocSh->DoClose();
+}
+
void ScShapeTest::testTdf117948_CollapseBeforeShape()
{
// The document contains a column group left from the image. The group is exanded. Collapse the
diff --git a/sc/source/core/data/drwlayer.cxx b/sc/source/core/data/drwlayer.cxx
index a9e177f01567..88335082c41f 100644
--- a/sc/source/core/data/drwlayer.cxx
+++ b/sc/source/core/data/drwlayer.cxx
@@ -673,7 +673,8 @@ void lcl_SetLogicRectFromAnchor(SdrObject* pObj, ScDrawObjData& rAnchor, ScDocum
// set the logic rectangle, and apply flip again. You cannot simple use a 180deg-rotated
// rectangle, because custom shape mirroring is internally applied after the other
// transformations.
- if (lcl_NeedsMirrorYCorrection(pObj))
+ const bool bNeedsMirrorYCorrection = lcl_NeedsMirrorYCorrection(pObj); // remember state
+ if (bNeedsMirrorYCorrection)
{
const tools::Rectangle aRect(pObj->GetSnapRect());
const Point aLeft(aRect.Left(), (aRect.Top() + aRect.Bottom()) >> 1);
@@ -703,7 +704,7 @@ void lcl_SetLogicRectFromAnchor(SdrObject* pObj, ScDrawObjData& rAnchor, ScDocum
pObj->NbcSetLogicRect(lcl_makeSafeRectangle(aNewRectangle));
// The shape has the correct logical rectangle now. Reapply the above removed mirroring.
- if (lcl_NeedsMirrorYCorrection(pObj))
+ if (bNeedsMirrorYCorrection)
{
const tools::Rectangle aRect(pObj->GetSnapRect());
const Point aLeft(aRect.Left(), (aRect.Top() + aRect.Bottom()) >> 1);
More information about the Libreoffice-commits
mailing list