diff options
author | Miklos Vajna <vmiklos@collabora.com> | 2019-01-28 17:18:34 +0100 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.com> | 2019-01-28 19:15:36 +0100 |
commit | 4218caf142a7ecac34548c6d38c6f6fbebb898b9 (patch) | |
tree | 1601702e92c11494456df6cf260f35cc939bcd8e | |
parent | 608c82472da65d9ac0b81f5a985dfa329e6c5136 (diff) |
tdf#122942 sw: update shape insert UI for the AddVerticalFrameOffsets option
Regression from commit 50223ea6e212b60b7d33839c2753c5601fb50f95
(tdf#98987 sw: add AddVerticalFrameOffsets compat mode, 2016-03-31),
SwFEShell::ImpEndCreate() was not adapted to call
SwTextFrame::GetBaseVertOffsetForFly() when determining the vertical
position of the inserted shape.
The call can be unconditional, the returned value is already 0 when the
DocumentSettingId::ADD_VERTICAL_FLY_OFFSETS compat setting is false.
Change-Id: Iec6af5a6d1ff3466e08377853cc8ca84f33a76d1
Reviewed-on: https://gerrit.libreoffice.org/67017
Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
Tested-by: Jenkins
-rw-r--r-- | sw/qa/extras/uiwriter/data2/tdf122942.odt | bin | 0 -> 9864 bytes | |||
-rw-r--r-- | sw/qa/extras/uiwriter/uiwriter2.cxx | 34 | ||||
-rw-r--r-- | sw/source/core/frmedt/feshview.cxx | 23 |
3 files changed, 48 insertions, 9 deletions
diff --git a/sw/qa/extras/uiwriter/data2/tdf122942.odt b/sw/qa/extras/uiwriter/data2/tdf122942.odt Binary files differnew file mode 100644 index 000000000000..c56583d305f2 --- /dev/null +++ b/sw/qa/extras/uiwriter/data2/tdf122942.odt diff --git a/sw/qa/extras/uiwriter/uiwriter2.cxx b/sw/qa/extras/uiwriter/uiwriter2.cxx index 147936818d68..8a54f0a97910 100644 --- a/sw/qa/extras/uiwriter/uiwriter2.cxx +++ b/sw/qa/extras/uiwriter/uiwriter2.cxx @@ -29,6 +29,7 @@ #include <sortedobjs.hxx> #include <anchoredobject.hxx> #include <swtypes.hxx> +#include <fmtornt.hxx> namespace { @@ -57,6 +58,7 @@ public: void testUnfloating(); void testTdf122893(); void testTdf122901(); + void testTdf122942(); CPPUNIT_TEST_SUITE(SwUiWriterTest2); CPPUNIT_TEST(testRedlineMoveInsertInDelete); @@ -76,6 +78,7 @@ public: CPPUNIT_TEST(testUnfloating); CPPUNIT_TEST(testTdf122893); CPPUNIT_TEST(testTdf122901); + CPPUNIT_TEST(testTdf122942); CPPUNIT_TEST_SUITE_END(); private: @@ -789,6 +792,37 @@ void SwUiWriterTest2::testTdf122901() getProperty<sal_Int32>(getParagraph(1), "ParaBottomMargin")); } +void SwUiWriterTest2::testTdf122942() +{ + load(DATA_DIRECTORY, "tdf122942.odt"); + SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get()); + SwWrtShell* pWrtShell = pTextDoc->GetDocShell()->GetWrtShell(); + + // Do the moral equivalent of mouse button down, move and up. + // Start creating a custom shape that overlaps with the rounded rectangle + // already present in the document. + Point aStartPos(8000, 3000); + pWrtShell->BeginCreate(static_cast<sal_uInt16>(OBJ_CUSTOMSHAPE), aStartPos); + + // Set its size. + Point aMovePos(10000, 5000); + pWrtShell->MoveCreate(aMovePos); + + // Finish creation. + pWrtShell->EndCreate(SdrCreateCmd::ForceEnd); + + // Make sure that the shape is inserted. + SwDoc* pDoc = pWrtShell->GetDoc(); + const SwFrameFormats& rFormats = *pDoc->GetSpzFrameFormats(); + CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(2), rFormats.size()); + + // Without the accompanying fix in place, this test would have failed with + // 'Expected less than: 0; Actual : 1030', i.e. the shape was below the + // paragraph mark, not above it. + const SwFormatVertOrient& rVert = rFormats[1]->GetVertOrient(); + CPPUNIT_ASSERT_LESS(static_cast<SwTwips>(0), rVert.GetPos()); +} + CPPUNIT_TEST_SUITE_REGISTRATION(SwUiWriterTest2); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/source/core/frmedt/feshview.cxx b/sw/source/core/frmedt/feshview.cxx index c841bb322d0e..e7486384e692 100644 --- a/sw/source/core/frmedt/feshview.cxx +++ b/sw/source/core/frmedt/feshview.cxx @@ -1961,17 +1961,22 @@ bool SwFEShell::ImpEndCreate() nXOffset = pAnch->getFrameArea().Left()+pAnch->getFrameArea().Width()-rBound.Right(); else nXOffset = rBound.Left() - pAnch->getFrameArea().Left(); - if( pAnch->IsTextFrame() && static_cast<const SwTextFrame*>(pAnch)->IsFollow() ) + if (pAnch->IsTextFrame()) { const SwTextFrame* pTmp = static_cast<const SwTextFrame*>(pAnch); - do { - pTmp = pTmp->FindMaster(); - OSL_ENSURE( pTmp, "Where's my Master?" ); - // OD 2004-03-30 #i26791# - correction: add frame area height - // of master frames. - nYOffset += pTmp->IsVertical() ? - pTmp->getFrameArea().Width() : pTmp->getFrameArea().Height(); - } while ( pTmp->IsFollow() ); + if (pTmp->IsFollow()) + { + do { + pTmp = pTmp->FindMaster(); + OSL_ENSURE(pTmp, "Where's my Master?"); + // OD 2004-03-30 #i26791# - correction: add frame area height + // of master frames. + nYOffset += pTmp->IsVertical() ? + pTmp->getFrameArea().Width() : pTmp->getFrameArea().Height(); + } while (pTmp->IsFollow()); + } + + nYOffset -= pTmp->GetBaseVertOffsetForFly(false); } } |