From 7cf0e43d39172cc083e7b64e06cf0730f14bcf19 Mon Sep 17 00:00:00 2001 From: Regina Henschel Date: Sat, 9 Nov 2019 23:46:22 +0100 Subject: tdf#128651 SdrObjCustomShape::NbcSetSnapRect needs logic rect SdrObjCustomShape::NbcSetSnapRect needs a logic rect in its parameter. A general change to snap rect as input in NbcSetSnapRect is not possible, if the transformation has to be kept. Therefore callers need to be adapted. This is done her for SdrUndoAttrObj. The error was that for a transformed custom shape with text, undo and redo had generated a wrong size of the shape. A least the following actions were affected: extrusion on/off, shadow on/off, and changes in line or fill properties. The unit test uses extrusion on. Change-Id: I8b6990d3d57d25f15f18e8690fc49dbe5e2a2728 Reviewed-on: https://gerrit.libreoffice.org/82367 Tested-by: Jenkins Reviewed-by: Regina Henschel --- sd/qa/unit/data/tdf128651_CustomShapeUndo.odp | Bin 0 -> 13504 bytes sd/qa/unit/uiimpress.cxx | 39 ++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 sd/qa/unit/data/tdf128651_CustomShapeUndo.odp (limited to 'sd') diff --git a/sd/qa/unit/data/tdf128651_CustomShapeUndo.odp b/sd/qa/unit/data/tdf128651_CustomShapeUndo.odp new file mode 100644 index 000000000000..9e820da094ab Binary files /dev/null and b/sd/qa/unit/data/tdf128651_CustomShapeUndo.odp differ diff --git a/sd/qa/unit/uiimpress.cxx b/sd/qa/unit/uiimpress.cxx index 2125820c7c50..5923651c9db1 100644 --- a/sd/qa/unit/uiimpress.cxx +++ b/sd/qa/unit/uiimpress.cxx @@ -19,11 +19,14 @@ #include #include #include +#include #include +#include #include #include #include +#include #include #include @@ -151,6 +154,42 @@ CPPUNIT_TEST_FIXTURE(SdUiImpressTest, testTdf126197) // in SdrObjEditView::SdrEndTextEdit() pViewShell2->GetViewFrame()->GetDispatcher()->Execute(SID_DELETE, SfxCallMode::SYNCHRON); } + +CPPUNIT_TEST_FIXTURE(SdUiImpressTest, testTdf128651) +{ + // Error was, that undo and redo changes size of the shape. Affected actions were e.g. + // extrusion on/off, shadow on/off, changes on line or fill attributes. + // All these actions do not change the snap rectangle. + mxComponent = loadFromDesktop( + m_directories.getURLFromSrc("sd/qa/unit/data/tdf128651_CustomShapeUndo.odp")); + auto pXImpressDocument = dynamic_cast(mxComponent.get()); + sd::ViewShell* pViewShell = pXImpressDocument->GetDocShell()->GetViewShell(); + SdPage* pActualPage = pViewShell->GetActualPage(); + SdrObject* pObject = pActualPage->GetObj(0); + auto pCustomShape = dynamic_cast(pObject); + CPPUNIT_ASSERT_MESSAGE("No Shape", pCustomShape); + const sal_Int32 nOrigWidth(pCustomShape->GetSnapRect().GetWidth()); + + SdDrawDocument* pDocument = pXImpressDocument->GetDoc(); + sd::UndoManager* pUndoManager = pDocument->GetUndoManager(); + CPPUNIT_ASSERT_EQUAL(static_cast(0), pUndoManager->GetUndoActionCount()); + CPPUNIT_ASSERT_EQUAL(static_cast(0), pUndoManager->GetRedoActionCount()); + + SdrView* pView = pViewShell->GetView(); + pView->MarkObj(pCustomShape, pView->GetSdrPageView()); + pViewShell->GetViewFrame()->GetDispatcher()->Execute(SID_EXTRUSION_TOGGLE, + SfxCallMode::SYNCHRON); + CPPUNIT_ASSERT_EQUAL(static_cast(1), pUndoManager->GetUndoActionCount()); + + pViewShell->GetViewFrame()->GetDispatcher()->Execute(SID_UNDO, SfxCallMode::SYNCHRON); + const sal_Int32 nUndoWidth(pCustomShape->GetSnapRect().GetWidth()); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Undo changes width", nOrigWidth, nUndoWidth); + + CPPUNIT_ASSERT_EQUAL(static_cast(1), pUndoManager->GetRedoActionCount()); + pViewShell->GetViewFrame()->GetDispatcher()->Execute(SID_REDO, SfxCallMode::SYNCHRON); + const sal_Int32 nRedoWidth(pCustomShape->GetSnapRect().GetWidth()); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Redo changes width", nUndoWidth, nRedoWidth); +} CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -- cgit v1.2.3