sd/qa/uitest/impress_tests/tdf91762.py | 2 +- sd/qa/unit/data/pptx/tablescale.pptx |binary sd/qa/unit/import-tests.cxx | 20 +++++++++++++++++++- svx/source/table/tablelayouter.cxx | 26 ++++++++++++++++++++++++-- 4 files changed, 44 insertions(+), 4 deletions(-)
New commits: commit 57752914d10557383e8dd59a2c8f9ab5901ddc57 Author: Gülşah Köse <gulsah.k...@collabora.com> AuthorDate: Fri Nov 6 21:18:24 2020 +0300 Commit: Gülşah Köse <gulsah.k...@collabora.com> CommitDate: Tue Nov 10 11:38:08 2020 +0100 tdf#137949 Fix table row heigths. Consider "Height" property of the the table while calculating the minimum row height. Reviewed-on: https://gerrit.libreoffice.org/c/core/+/105422 Tested-by: Jenkins Tested-by: Xisco Fauli <xiscofa...@libreoffice.org> Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org> Reviewed-by: Gülşah Köse <gulsah.k...@collabora.com> (cherry picked from commit b7b05dd36403af50b20fe06cbf8a10d8defb28a9) Change-Id: I4dbb0f7f87517423fd3075515b4b9817d6a9a71a Reviewed-on: https://gerrit.libreoffice.org/c/core/+/105466 Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com> Reviewed-by: Gülşah Köse <gulsah.k...@collabora.com> diff --git a/sd/qa/uitest/impress_tests/tdf91762.py b/sd/qa/uitest/impress_tests/tdf91762.py index 66e650b0bb2a..4fa9f266053c 100644 --- a/sd/qa/uitest/impress_tests/tdf91762.py +++ b/sd/qa/uitest/impress_tests/tdf91762.py @@ -42,7 +42,7 @@ class tdf91762(UITestCase): # tdf#138011: Without the fix in place, this test would have failed with # AssertionError: 5504 != 3559 - self.assertEqual(5504, document.DrawPages[0].getByIndex(1).BoundRect.Height) + self.assertEqual(5494, document.DrawPages[0].getByIndex(1).BoundRect.Height) self.ui_test.close_doc() diff --git a/sd/qa/unit/data/pptx/tablescale.pptx b/sd/qa/unit/data/pptx/tablescale.pptx new file mode 100644 index 000000000000..c4d946e5c619 Binary files /dev/null and b/sd/qa/unit/data/pptx/tablescale.pptx differ diff --git a/sd/qa/unit/import-tests.cxx b/sd/qa/unit/import-tests.cxx index 9ebb55d39a21..d3e776f2c50d 100644 --- a/sd/qa/unit/import-tests.cxx +++ b/sd/qa/unit/import-tests.cxx @@ -1451,9 +1451,27 @@ void SdImportTest::testRowHeight() uno::Reference< css::table::XTableRows > xRows( xTable->getRows(), uno::UNO_SET_THROW); uno::Reference< beans::XPropertySet > xRefRow( xRows->getByIndex(0), uno::UNO_QUERY_THROW ); xRefRow->getPropertyValue( sHeight ) >>= nHeight; - CPPUNIT_ASSERT_EQUAL( sal_Int32(507), nHeight); + CPPUNIT_ASSERT_EQUAL( sal_Int32(508), nHeight); xDocShRef->DoClose(); + + sd::DrawDocShellRef xDocShRef2 = loadURL( m_directories.getURLFromSrc("/sd/qa/unit/data/pptx/tablescale.pptx"), PPTX ); + const SdrPage *pPage2 = GetPage( 1, xDocShRef2 ); + + sdr::table::SdrTableObj *pTableObj2 = dynamic_cast<sdr::table::SdrTableObj*>(pPage2->GetObj(0)); + CPPUNIT_ASSERT( pTableObj2 ); + + uno::Reference< css::table::XTable > xTable2(pTableObj2->getTable(), uno::UNO_SET_THROW); + uno::Reference< css::table::XTableRows > xRows2( xTable2->getRows(), uno::UNO_SET_THROW); + + for(sal_Int32 nRow = 0; nRow < 7; ++nRow) + { + uno::Reference< beans::XPropertySet > xRefRow2( xRows2->getByIndex(nRow), uno::UNO_QUERY_THROW ); + xRefRow2->getPropertyValue( "Height" ) >>= nHeight; + CPPUNIT_ASSERT_EQUAL( sal_Int32(800), nHeight); + } + + xDocShRef2->DoClose(); } void SdImportTest::testTdf93830() diff --git a/svx/source/table/tablelayouter.cxx b/svx/source/table/tablelayouter.cxx index 11ac8da225d8..3e7ff37c00ac 100644 --- a/svx/source/table/tablelayouter.cxx +++ b/svx/source/table/tablelayouter.cxx @@ -730,6 +730,7 @@ void TableLayouter::LayoutTableHeight( tools::Rectangle& rArea, bool bFit ) { const sal_Int32 nColCount = getColumnCount(); const sal_Int32 nRowCount = getRowCount(); + if( nRowCount == 0 ) return; @@ -746,10 +747,14 @@ void TableLayouter::LayoutTableHeight( tools::Rectangle& rArea, bool bFit ) sal_Int32 nCol, nRow; for( nRow = 0; nRow < nRowCount; ++nRow ) { + Reference< XPropertySet > xRowSet( xRows->getByIndex(nRow), UNO_QUERY_THROW ); + sal_Int32 nRowPropHeight = 0; + xRowSet->getPropertyValue( gsSize ) >>= nRowPropHeight; sal_Int32 nMinHeight = 0; bool bIsEmpty = true; // check if all cells in this row are merged bool bRowHasText = false; + bool bRowHasCellInEditMode = false; for( nCol = 0; nCol < nColCount; ++nCol ) { @@ -767,7 +772,12 @@ void TableLayouter::LayoutTableHeight( tools::Rectangle& rArea, bool bFit ) else { bool bCellHasText = xCell->hasText(); - if (bRowHasText == bCellHasText) + bool bCellInEditMode = xCell->IsTextEditActive(); + + if (!bRowHasCellInEditMode && bCellInEditMode) + bRowHasCellInEditMode = true; + + if ((bRowHasText == bCellHasText) || (bRowHasText && bCellInEditMode)) { nMinHeight = std::max( nMinHeight, xCell->getMinimumHeight() ); } @@ -776,6 +786,19 @@ void TableLayouter::LayoutTableHeight( tools::Rectangle& rArea, bool bFit ) bRowHasText = true; nMinHeight = xCell->getMinimumHeight(); } + + // tdf#137949 We should consider "Heigth" property while calculating minimum height. + // This control decides when we use "Heigth" property value instead of calculated minimum height + // Case 1: * Row has "Heigth" property + // * Calculated minimum heigth is smaller than Height propery value. + // Case 2: * Row has "Heigth" property + // * Calculated minimum heigth is bigger than Height propery value and + // * Row has not any text of any cell in edit mode in the row (means completely empty) + if ((nMinHeight < nRowPropHeight && nRowPropHeight > 0 ) || + (nMinHeight > nRowPropHeight && nRowPropHeight > 0 && (!bRowHasText && !bRowHasCellInEditMode))) + { + nMinHeight = nRowPropHeight; + } } } } @@ -789,7 +812,6 @@ void TableLayouter::LayoutTableHeight( tools::Rectangle& rArea, bool bFit ) else { sal_Int32 nRowHeight = 0; - Reference< XPropertySet > xRowSet( xRows->getByIndex(nRow), UNO_QUERY_THROW ); bool bOptimal = false; xRowSet->getPropertyValue( sOptimalSize ) >>= bOptimal; _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits