sw/qa/extras/uiwriter/uiwriter6.cxx | 63 ------------------------------------ sw/source/core/layout/flylay.cxx | 38 ++------------------- 2 files changed, 5 insertions(+), 96 deletions(-)
New commits: commit db94d1079a83eae9ac0c8d92f4547698d016daf8 Author: Stephan Bergmann <stephan.bergm...@allotropia.de> AuthorDate: Mon May 27 10:57:41 2024 +0200 Commit: Stephan Bergmann <stephan.bergm...@allotropia.de> CommitDate: Wed May 29 10:38:41 2024 +0200 Revert "tdf#161261 sw: fix lost size of image resized in fixed-height cell" This reverts commit 4da6f52f5fd164082fd42fc58fc7d31da567c924 plus follow-up 24f65bf5940adb0aa3590443752110119e2bea5e "Fix typo". It caused CppunitTest_sw_uiwriter6 to fail with > /sw/source/core/layout/flylay.cxx:1426:51: runtime error: downcast of address 0x606000c4b620 which does not point to an object of type 'const SwDrawContact' > 0x606000c4b620: note: object is of type 'SwFlyDrawContact' > 00 00 00 00 50 3d 2f b8 99 7f 00 00 c0 3d 2f b8 99 7f 00 00 00 00 00 00 00 00 00 00 d0 64 50 00 > ^~~~~~~~~~~~~~~~~~~~~~~ > vptr for 'SwFlyDrawContact' > #0 0x7f99ae257936 in CalcClipRect(SdrObject const*, SwRect&, bool) /sw/source/core/layout/flylay.cxx:1426:51 > #1 0x7f99ad5b2607 in SwDrawView::TakeDragLimit(SdrDragMode, tools::Rectangle&) const /sw/source/core/draw/dview.cxx:694:13 > #2 0x7f99c317c1a0 in SdrDragView::BegDragObj(Point const&, OutputDevice*, SdrHdl*, short, SdrDragMethod*) /svx/source/svdraw/svddrgv.cxx:199:21 > #3 0x7f99c18eef25 in E3dView::BegDragObj(Point const&, OutputDevice*, SdrHdl*, short, SdrDragMethod*) /svx/source/engine3d/view3d.cxx:1243:21 > #4 0x7f99adcfa821 in SwFEShell::BeginDrag(Point const*, bool) /sw/source/core/frmedt/feshview.cxx:741:20 > #5 0x7f99b3ea5ffd in SwWrtShell::BeginFrameDrag(Point const*, bool) /sw/source/uibase/wrtsh/select.cxx:761:20 > #6 0x7f99b27a8238 in SwWrtShell::Drag(Point const*, bool) /sw/source/uibase/inc/wrtsh.hxx:124:56 > #7 0x7f99b2742135 in SwEditWin::MouseMove(MouseEvent const&) /sw/source/uibase/docvw/edtwin.cxx:4489:25 > #8 0x7f99dcdc6f64 in testTdf161261::TestBody() /sw/qa/extras/uiwriter/uiwriter6.cxx:1613:14 (<https://ci.libreoffice.org/job/lo_ubsan/3185/>) Change-Id: Idf0c0c75d39a28671c852fc526549439892d0902 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/168177 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <stephan.bergm...@allotropia.de> diff --git a/sw/qa/extras/uiwriter/uiwriter6.cxx b/sw/qa/extras/uiwriter/uiwriter6.cxx index 6322120748da..fb3ecb357bcd 100644 --- a/sw/qa/extras/uiwriter/uiwriter6.cxx +++ b/sw/qa/extras/uiwriter/uiwriter6.cxx @@ -36,7 +36,6 @@ #include <sfx2/dispatch.hxx> #include <cmdid.h> #include <tools/json_writer.hxx> -#include <tools/UnitConversion.hxx> #include <boost/property_tree/json_parser.hpp> #include <com/sun/star/text/XTextTable.hpp> @@ -1560,68 +1559,6 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest6, testTdf160836) CPPUNIT_ASSERT_EQUAL(tools::Long(1980), pCellA1->getFrameArea().Height()); } -CPPUNIT_TEST_FIXTURE(SwUiWriterTest6, testTdf161261) -{ - createSwDoc("tdf160842.fodt"); - SwDoc* pDoc = getSwDoc(); - CPPUNIT_ASSERT(pDoc); - SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); - CPPUNIT_ASSERT(pWrtShell); - // the cursor is not in the table - CPPUNIT_ASSERT(!pWrtShell->IsCursorInTable()); - - SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout(); - auto pPage = dynamic_cast<SwPageFrame*>(pLayout->Lower()); - CPPUNIT_ASSERT(pPage); - const SwSortedObjs& rPageObjs = *pPage->GetSortedObjs(); - CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), rPageObjs.size()); - auto pPageFly = dynamic_cast<SwFlyAtContentFrame*>(rPageObjs[0]); - CPPUNIT_ASSERT(pPageFly); - auto pTable = dynamic_cast<SwTabFrame*>(pPageFly->GetLower()); - CPPUNIT_ASSERT(pTable); - auto pRow1 = pTable->GetLower(); - CPPUNIT_ASSERT(pRow1->IsRowFrame()); - auto pCellA1 = pRow1->GetLower(); - CPPUNIT_ASSERT(pCellA1); - const SwRect& rCellA1Rect = pCellA1->getFrameArea(); - auto nRowHeight = rCellA1Rect.Height(); - - // select image by clicking on it at the center of the upper cell - Point ptFrom(rCellA1Rect.Left() + rCellA1Rect.Width() / 2, rCellA1Rect.Top() + nRowHeight / 2); - vcl::Window& rEditWin = pDoc->GetDocShell()->GetView()->GetEditWin(); - Point aFrom = rEditWin.LogicToPixel(ptFrom); - MouseEvent aClickEvent(aFrom, 1, MouseEventModifiers::SIMPLECLICK, MOUSE_LEFT); - rEditWin.MouseButtonDown(aClickEvent); - rEditWin.MouseButtonUp(aClickEvent); - - // Then make sure that the image is selected: - SelectionType eType = pWrtShell->GetSelectionType(); - CPPUNIT_ASSERT_EQUAL(SelectionType::Graphic, eType); - - uno::Reference<drawing::XShape> xShape = getShape(2); - CPPUNIT_ASSERT(xShape.is()); - - // zoom image by drag & drop using right bottom handle of the image - const SwRect& rSelRect = pWrtShell->GetAnyCurRect(CurRectType::Frame); - Point ptFromHandle(rSelRect.Right(), rSelRect.Bottom()); - Point aFromHandle = rEditWin.LogicToPixel(ptFromHandle); - Point ptTo(rSelRect.Left() + rSelRect.Width() * 1.5, rSelRect.Top() + rSelRect.Height() * 1.5); - Point aTo = rEditWin.LogicToPixel(ptTo); - MouseEvent aClickEvent2(aFromHandle, 1, MouseEventModifiers::SIMPLECLICK, MOUSE_LEFT); - rEditWin.MouseButtonDown(aClickEvent2); - MouseEvent aClickEvent3(aTo, 0, MouseEventModifiers::SIMPLEMOVE, MOUSE_LEFT); - rEditWin.MouseMove(aClickEvent3); - rEditWin.MouseMove(aClickEvent3); - MouseEvent aClickEvent4(aTo, 1, MouseEventModifiers::SIMPLECLICK, MOUSE_LEFT); - rEditWin.MouseButtonUp(aClickEvent4); - Scheduler::ProcessEventsToIdle(); - - // Make sure image is greater than before, instead of minimizing it to the cell size - // This was 8707 and 6509 - CPPUNIT_ASSERT_GREATER(sal_Int32(10000), xShape->getSize().Width); - CPPUNIT_ASSERT_GREATER(sal_Int32(8000), xShape->getSize().Height); -} - CPPUNIT_TEST_FIXTURE(SwUiWriterTest6, testTdf115132) { createSwDoc(); diff --git a/sw/source/core/layout/flylay.cxx b/sw/source/core/layout/flylay.cxx index 35eb225782f9..1a39b735d2d8 100644 --- a/sw/source/core/layout/flylay.cxx +++ b/sw/source/core/layout/flylay.cxx @@ -1409,45 +1409,17 @@ bool CalcClipRect( const SdrObject *pSdrObj, SwRect &rRect, bool bMove ) { const SwFrame *pUp = pFly->GetAnchorFrame()->GetUpper(); SwRectFnSet aRectFnSet(pFly->GetAnchorFrame()); - bool bOnlyCellFrame = pUp->IsCellFrame(); while( pUp->IsColumnFrame() || pUp->IsSctFrame() || pUp->IsColBodyFrame()) pUp = pUp->GetUpper(); rRect = pUp->getFrameArea(); if( !pUp->IsBodyFrame() ) { - bool bCropByFixedHeightCell = false; - // allow zoom image cropped by fixed height table cell - if ( bOnlyCellFrame && pUp->IsCellFrame() && pUp->GetUpper() && - // is a fixed height table row? - pUp->GetUpper()->IsRowFrame() && SwFrameSize::Fixed == - pUp->GetUpper()->GetAttrSet()->GetFrameSize().GetHeightSizeType() ) + rRect += pUp->getFramePrintArea().Pos(); + rRect.SSize( pUp->getFramePrintArea().SSize() ); + if ( pUp->IsCellFrame() ) { - // is image anchored as character? - if (const SwDrawContact* pC = static_cast<const SwDrawContact*>(GetUserCall(pSdrObj))) - { - const SwFrameFormat* pFormat = pC->GetFormat(); - const SwFormatAnchor& rAnch = pFormat->GetAnchor(); - if ( RndStdIds::FLY_AS_CHAR == rAnch.GetAnchorId() ) - { - const SwPageFrame *pPageFrame = pFly->FindPageFrame(); - Size aSize( pPageFrame->getFramePrintArea().SSize() ); - // TODO doubled print area is still cropped by full page size, yet - rRect.SSize(Size(aSize.getWidth() * 2, aSize.getHeight() * 2)); - bCropByFixedHeightCell = true; - } - } - } - - if ( !bCropByFixedHeightCell ) - { - rRect += pUp->getFramePrintArea().Pos(); - rRect.SSize( pUp->getFramePrintArea().SSize() ); - - if ( pUp->IsCellFrame() ) - { - const SwFrame *pTab = pUp->FindTabFrame(); - aRectFnSet.SetBottom( rRect, aRectFnSet.GetPrtBottom(*pTab->GetUpper()) ); // set bottom - } + const SwFrame *pTab = pUp->FindTabFrame(); + aRectFnSet.SetBottom( rRect, aRectFnSet.GetPrtBottom(*pTab->GetUpper()) ); } } else if ( pUp->GetUpper()->IsPageFrame() )