diff options
author | Gülşah Köse <gulsah.kose@collabora.com> | 2020-11-06 21:18:24 +0300 |
---|---|---|
committer | Xisco Fauli <xiscofauli@libreoffice.org> | 2020-11-09 15:35:24 +0100 |
commit | 5c37f0c0347d8cccda6fc6a2ca4dd28bb36823a9 (patch) | |
tree | ddf34f61bc4cc6522bdc7991c6c84773570afdbd /svx | |
parent | 6dee385e10c859928e5d6406d002983529eff9f9 (diff) |
tdf#137949 Fix table row heigths.
Consider "Height" property of the the table while calculating
the minimum row height.
Change-Id: I4dbb0f7f87517423fd3075515b4b9817d6a9a71a
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/105422
Tested-by: Jenkins
Tested-by: Xisco Fauli <xiscofauli@libreoffice.org>
Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
Reviewed-by: Gülşah Köse <gulsah.kose@collabora.com>
Signed-off-by: Xisco Fauli <xiscofauli@libreoffice.org>
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/105480
Diffstat (limited to 'svx')
-rw-r--r-- | svx/source/table/tablelayouter.cxx | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/svx/source/table/tablelayouter.cxx b/svx/source/table/tablelayouter.cxx index b5dddef4ddd1..2d0fc0f22a3f 100644 --- a/svx/source/table/tablelayouter.cxx +++ b/svx/source/table/tablelayouter.cxx @@ -724,6 +724,7 @@ void TableLayouter::LayoutTableHeight( tools::Rectangle& rArea, bool bFit ) { const sal_Int32 nColCount = getColumnCount(); const sal_Int32 nRowCount = getRowCount(); + if( nRowCount == 0 ) return; @@ -740,10 +741,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 ) { @@ -761,7 +766,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() ); } @@ -770,6 +780,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; + } } } } @@ -783,7 +806,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; |