sc/source/ui/view/output.cxx | 38 ++++++++++++++++++++++---------------- 1 file changed, 22 insertions(+), 16 deletions(-)
New commits: commit cf95c0024ad9312ebdda382aba8f3cc201a0fdb2 Author: Luboš Luňák <l.lu...@collabora.com> AuthorDate: Thu Mar 10 18:00:28 2022 +0100 Commit: Luboš Luňák <l.lu...@collabora.com> CommitDate: Fri Mar 11 08:19:37 2022 +0100 don't bother drawing zero-width cells If a document has most columns hidden, then they'd be "drawn" anyway, since ScGridWindow::Draw() calls ExtendHidden(), this appears to be needed in order to drawn properly background after the last cell. So at least try avoid zero-sized draw operations which may add up enough to be noticeable with 16k columns Change-Id: I631e3be7467f8ea2dbfb824e647f900a7573da61 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/131326 Tested-by: Jenkins Reviewed-by: Luboš Luňák <l.lu...@collabora.com> diff --git a/sc/source/ui/view/output.cxx b/sc/source/ui/view/output.cxx index 045066e96689..09a1fc041eeb 100644 --- a/sc/source/ui/view/output.cxx +++ b/sc/source/ui/view/output.cxx @@ -1099,6 +1099,27 @@ void ScOutputData::DrawBackground(vcl::RenderContext& rRenderContext) nOldMerged = nMergedCols; + tools::Long nNewPosX = nPosX; + // extend for all merged cells + nMergedCols = 1; + if (pInfo->bMerged && pInfo->pPatternAttr) + { + const ScMergeAttr* pMerge = + &pInfo->pPatternAttr->GetItem(ATTR_MERGE); + nMergedCols = std::max<SCCOL>(1, pMerge->GetColMerge()); + } + + for (SCCOL nMerged = 0; nMerged < nMergedCols; ++nMerged) + { + SCCOL nCol = nX+nOldMerged+nMerged; + if (nCol > nX2+2) + break; + nNewPosX += pRowInfo[0].basicCellInfo(nCol-1).nWidth * nLayoutSign; + } + + if (nNewPosX == nPosX) + continue; // Zero width, no need to draw. + if (bCellContrast) { // high contrast for cell borders and backgrounds -> empty background @@ -1142,22 +1163,7 @@ void ScOutputData::DrawBackground(vcl::RenderContext& rRenderContext) drawCells(rRenderContext, pColor, pBackground, pOldColor, pOldBackground, aRect, nPosXLogic, nLayoutSign, nOneXLogic, nOneYLogic, pDataBarInfo, pOldDataBarInfo, pIconSetInfo, pOldIconSetInfo, mpDoc->GetIconSetBitmapMap()); - // extend for all merged cells - nMergedCols = 1; - if (pInfo->bMerged && pInfo->pPatternAttr) - { - const ScMergeAttr* pMerge = - &pInfo->pPatternAttr->GetItem(ATTR_MERGE); - nMergedCols = std::max<SCCOL>(1, pMerge->GetColMerge()); - } - - for (SCCOL nMerged = 0; nMerged < nMergedCols; ++nMerged) - { - SCCOL nCol = nX+nOldMerged+nMerged; - if (nCol > nX2+2) - break; - nPosX += pRowInfo[0].basicCellInfo(nCol-1).nWidth * nLayoutSign; - } + nPosX = nNewPosX; } tools::Long nPosXLogic = nPosX;