sc/source/filter/excel/xetable.cxx | 24 ++++++++++-------------- sc/source/filter/inc/xetable.hxx | 2 +- 2 files changed, 11 insertions(+), 15 deletions(-)
New commits: commit eb2a5390dfe3db3dc528ca25b424fd1bfdf3f240 Author: Eike Rathke <er...@redhat.com> Date: Thu Dec 8 00:33:51 2016 +0100 sc-perf: avoid calling GetRowHeight() twice or thrice It needs to be called once anyway so do it beforehand, but a second call for the previous row is only necessary if no other condition to add a row was met. A third call is superfluous. Change-Id: Id104cb608893f4d09a92733cf19342e3cb280dfd diff --git a/sc/source/filter/excel/xetable.cxx b/sc/source/filter/excel/xetable.cxx index 9cb15b4..a8627c0 100644 --- a/sc/source/filter/excel/xetable.cxx +++ b/sc/source/filter/excel/xetable.cxx @@ -1844,11 +1844,11 @@ void XclExpDefrowheight::WriteBody( XclExpStream& rStrm ) } XclExpRow::XclExpRow( const XclExpRoot& rRoot, sal_uInt32 nXclRow, - XclExpRowOutlineBuffer& rOutlineBfr, bool bAlwaysEmpty, bool bHidden ) : + XclExpRowOutlineBuffer& rOutlineBfr, bool bAlwaysEmpty, bool bHidden, sal_uInt16 nHeight ) : XclExpRecord( EXC_ID3_ROW, 16 ), XclExpRoot( rRoot ), mnXclRow( nXclRow ), - mnHeight( 0 ), + mnHeight( nHeight ), mnFlags( EXC_ROW_DEFAULTFLAGS ), mnXFIndex( EXC_XF_DEFAULTCELL ), mnOutlineLevel( 0 ), @@ -1867,13 +1867,6 @@ XclExpRow::XclExpRow( const XclExpRoot& rRoot, sal_uInt32 nXclRow, ::set_flag( mnFlags, EXC_ROW_UNSYNCED, bUserHeight ); ::set_flag( mnFlags, EXC_ROW_HIDDEN, bHidden ); - // *** Row height *** ----------------------------------------------------- - - // Always get the actual row height even if the manual size flag is not set, - // to correctly export the heights of rows with wrapped texts. - - mnHeight = GetDoc().GetRowHeight(nScRow, nScTab, false); - // *** Outline data *** --------------------------------------------------- rOutlineBfr.Update( nScRow ); @@ -2394,16 +2387,20 @@ XclExpRow& XclExpRowBuffer::GetOrCreateRow( sal_uInt32 nXclRow, bool bRowAlwaysE // if it is the desired row, for rows that height differ from previous, // if row is collapsed, has outline level (tdf#100347), or row is hidden (tdf#98106). bool bHidden = rDoc.RowHidden(nFrom, nScTab); + // Always get the actual row height even if the manual size flag is + // not set, to correctly export the heights of rows with wrapped + // texts. + const sal_uInt16 nHeight = rDoc.GetRowHeight(nFrom, nScTab, false); if ( !nFrom || ( nFrom == nXclRow ) || bHidden || - ( rDoc.GetRowHeight(nFrom, nScTab, false) != rDoc.GetRowHeight(nFrom - 1, nScTab, false) ) || ( maOutlineBfr.IsCollapsed() ) || - ( maOutlineBfr.GetLevel() != 0 ) ) + ( maOutlineBfr.GetLevel() != 0 ) || + ( nHeight != rDoc.GetRowHeight(nFrom - 1, nScTab, false) ) ) { if( maOutlineBfr.GetLevel() > mnHighestOutlineLevel ) { mnHighestOutlineLevel = maOutlineBfr.GetLevel(); } - RowRef p(new XclExpRow(GetRoot(), nFrom, maOutlineBfr, bRowAlwaysEmpty, bHidden)); + RowRef p(new XclExpRow(GetRoot(), nFrom, maOutlineBfr, bRowAlwaysEmpty, bHidden, nHeight)); maRowMap.insert(RowMap::value_type(nFrom, p)); } } diff --git a/sc/source/filter/inc/xetable.hxx b/sc/source/filter/inc/xetable.hxx index 2324b112..6354fff 100644 --- a/sc/source/filter/inc/xetable.hxx +++ b/sc/source/filter/inc/xetable.hxx @@ -836,7 +836,7 @@ public: @param bAlwaysEmpty true = This row will not be filled with blank cells in the Finalize() function. */ explicit XclExpRow( const XclExpRoot& rRoot, sal_uInt32 nXclRow, - XclExpRowOutlineBuffer& rOutlineBfr, bool bAlwaysEmpty, bool bHidden ); + XclExpRowOutlineBuffer& rOutlineBfr, bool bAlwaysEmpty, bool bHidden, sal_uInt16 nHeight ); /** Returns the excel row index of this ROW record. */ inline sal_uInt32 GetXclRow() const { return mnXclRow; } commit f5bca308c910c4486b2e5c8f67f628ae8e9c2457 Author: Eike Rathke <er...@redhat.com> Date: Thu Dec 8 00:14:13 2016 +0100 sc-perf: call RowHidden() only once, tdf#98106 follow-up Though it was only called twice if no other condition led to the row being added, but at least once anyway, so we can call it beforehand. Change-Id: Iff8dfa926b840d58b92ffec296febe4c2da8e5a9 diff --git a/sc/source/filter/excel/xetable.cxx b/sc/source/filter/excel/xetable.cxx index 37470f5..9cb15b4 100644 --- a/sc/source/filter/excel/xetable.cxx +++ b/sc/source/filter/excel/xetable.cxx @@ -1844,7 +1844,7 @@ void XclExpDefrowheight::WriteBody( XclExpStream& rStrm ) } XclExpRow::XclExpRow( const XclExpRoot& rRoot, sal_uInt32 nXclRow, - XclExpRowOutlineBuffer& rOutlineBfr, bool bAlwaysEmpty ) : + XclExpRowOutlineBuffer& rOutlineBfr, bool bAlwaysEmpty, bool bHidden ) : XclExpRecord( EXC_ID3_ROW, 16 ), XclExpRoot( rRoot ), mnXclRow( nXclRow ), @@ -1864,7 +1864,6 @@ XclExpRow::XclExpRow( const XclExpRoot& rRoot, sal_uInt32 nXclRow, CRFlags nRowFlags = GetDoc().GetRowFlags( nScRow, nScTab ); bool bUserHeight( nRowFlags & CRFlags::ManualSize ); - bool bHidden = GetDoc().RowHidden(nScRow, nScTab); ::set_flag( mnFlags, EXC_ROW_UNSYNCED, bUserHeight ); ::set_flag( mnFlags, EXC_ROW_HIDDEN, bHidden ); @@ -2394,17 +2393,17 @@ XclExpRow& XclExpRowBuffer::GetOrCreateRow( sal_uInt32 nXclRow, bool bRowAlwaysE // only create RowMap entries if it is first row in spreadsheet, // if it is the desired row, for rows that height differ from previous, // if row is collapsed, has outline level (tdf#100347), or row is hidden (tdf#98106). - if ( !nFrom || ( nFrom == nXclRow ) || + bool bHidden = rDoc.RowHidden(nFrom, nScTab); + if ( !nFrom || ( nFrom == nXclRow ) || bHidden || ( rDoc.GetRowHeight(nFrom, nScTab, false) != rDoc.GetRowHeight(nFrom - 1, nScTab, false) ) || ( maOutlineBfr.IsCollapsed() ) || - ( maOutlineBfr.GetLevel() != 0 ) || - ( rDoc.RowHidden(nFrom, nScTab) ) ) + ( maOutlineBfr.GetLevel() != 0 ) ) { if( maOutlineBfr.GetLevel() > mnHighestOutlineLevel ) { mnHighestOutlineLevel = maOutlineBfr.GetLevel(); } - RowRef p(new XclExpRow(GetRoot(), nFrom, maOutlineBfr, bRowAlwaysEmpty)); + RowRef p(new XclExpRow(GetRoot(), nFrom, maOutlineBfr, bRowAlwaysEmpty, bHidden)); maRowMap.insert(RowMap::value_type(nFrom, p)); } } diff --git a/sc/source/filter/inc/xetable.hxx b/sc/source/filter/inc/xetable.hxx index 16894b6..2324b112 100644 --- a/sc/source/filter/inc/xetable.hxx +++ b/sc/source/filter/inc/xetable.hxx @@ -836,7 +836,7 @@ public: @param bAlwaysEmpty true = This row will not be filled with blank cells in the Finalize() function. */ explicit XclExpRow( const XclExpRoot& rRoot, sal_uInt32 nXclRow, - XclExpRowOutlineBuffer& rOutlineBfr, bool bAlwaysEmpty ); + XclExpRowOutlineBuffer& rOutlineBfr, bool bAlwaysEmpty, bool bHidden ); /** Returns the excel row index of this ROW record. */ inline sal_uInt32 GetXclRow() const { return mnXclRow; } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits