summaryrefslogtreecommitdiff
path: root/svx
diff options
context:
space:
mode:
authorSarper Akdemir <sarper.akdemir@collabora.com>2022-08-17 16:23:29 +0300
committerSarper Akdemir <sarper.akdemir@collabora.com>2022-09-05 14:22:11 +0200
commitd29f1ffc03ac0ea2c5eb77ef6272259fe25e05c4 (patch)
tree9e79f674b77717225bc571e048ea5eccfec64886 /svx
parent515deea2c028a417b4193916a975a38e1842d267 (diff)
tdf#144092 pptx import: correct table height during import
It appears PowerPoint can export rows of a table with row heights that is less than the minimum height (for that row). And also export the total table height wrong with it. If PowerPoint imports such a table, those rows are individually expanded to the minimum height. (Also increasing the table's total height) In Impress import we calculate table height by adding up individual row heights. Table layouting code depends on the table height being correct. This is why rows with less than minimum height lead to layouting problems. To compensate for this, while importing tables, layouting is skipped until the table height is updated with the corrected height. The correct height is calculated by layouting the table without fitting to an area (i.e with bFit = false). Change-Id: I79187882470a4e285b45bca1eabb469a084067f5 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/138652 Tested-by: Jenkins Reviewed-by: Miklos Vajna <vmiklos@collabora.com> (cherry picked from commit a5126a21351c87138ff86a6636326eb6cd6a0f8c) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/139218 Reviewed-by: Sarper Akdemir <sarper.akdemir@collabora.com>
Diffstat (limited to 'svx')
-rw-r--r--svx/source/table/svdotable.cxx12
-rw-r--r--svx/source/table/tablelayouter.hxx6
2 files changed, 15 insertions, 3 deletions
diff --git a/svx/source/table/svdotable.cxx b/svx/source/table/svdotable.cxx
index 1b1d643d26d9..8b46feb29309 100644
--- a/svx/source/table/svdotable.cxx
+++ b/svx/source/table/svdotable.cxx
@@ -2393,6 +2393,18 @@ void SdrTableObj::CropTableModelToSelection(const CellPos& rStart, const CellPos
mpImpl->CropTableModelToSelection(rStart, rEnd);
}
+sal_Int32 SdrTableObj::getHeightWithoutFitting()
+{
+ tools::Rectangle aRect{};
+ if( mpImpl.is() && mpImpl->mpLayouter)
+ {
+ mpImpl->mpLayouter->LayoutTableHeight(aRect, /*bFit=*/false);
+ return aRect.GetHeight();
+ }
+ else
+ return 0;
+}
+
void SdrTableObj::DistributeColumns( sal_Int32 nFirstColumn, sal_Int32 nLastColumn, const bool bOptimize, const bool bMinimize )
{
if( mpImpl.is() && mpImpl->mpLayouter )
diff --git a/svx/source/table/tablelayouter.hxx b/svx/source/table/tablelayouter.hxx
index 309269bcce52..2ff69598e4e1 100644
--- a/svx/source/table/tablelayouter.hxx
+++ b/svx/source/table/tablelayouter.hxx
@@ -123,13 +123,13 @@ public:
const bool bMinimize );
void dumpAsXml(xmlTextWriterPtr pWriter) const;
+ void LayoutTableWidth(::tools::Rectangle& rArea, bool bFit);
+ void LayoutTableHeight(::tools::Rectangle& rArea, bool bFit);
+
private:
CellRef getCell( const CellPos& rPos ) const;
basegfx::B2ITuple getCellSize( const CellRef& xCell, const CellPos& rPos ) const;
- void LayoutTableWidth( ::tools::Rectangle& rArea, bool bFit );
- void LayoutTableHeight( ::tools::Rectangle& rArea, bool bFit );
-
bool isValidColumn( sal_Int32 nColumn ) const { return (nColumn >= 0) && (o3tl::make_unsigned(nColumn) < maColumns.size()); }
bool isValidRow( sal_Int32 nRow ) const { return (nRow >= 0) && (o3tl::make_unsigned(nRow) < maRows.size()); }
bool isValid( const CellPos& rPos ) const { return isValidColumn( rPos.mnCol ) && isValidRow( rPos.mnRow ); }