fix(engine-render): fix the issue of background rendering misalignment when hiding the first row of merged cells (#5858)

This commit is contained in:
wpxp123456
2025-09-15 14:45:27 +08:00
committed by GitHub
parent ad3f67b682
commit 7d70db085f
3 changed files with 38 additions and 6 deletions
@@ -187,10 +187,38 @@ export class Background extends SheetExtension {
return true;
}
// getRowVisible can take a lot of time, sometimes over 20+ms, this return condition should put in the last.
const visibleRow = spreadsheetSkeleton.worksheet.getRowVisible(row);
const visibleCol = spreadsheetSkeleton.worksheet.getColVisible(col);
if (!visibleRow || !visibleCol) return true;
if (!isMerged && !isMergedMainCell) {
// getRowVisible can take a lot of time, sometimes over 20+ms, this return condition should put in the last.
const visibleRow = spreadsheetSkeleton.worksheet.getRowVisible(row);
if (!visibleRow) return true;
const visibleCol = spreadsheetSkeleton.worksheet.getColVisible(col);
if (!visibleCol) return true;
} else {
let isAllRowHidden = true;
for (let r = mergeInfo.startRow; r <= mergeInfo.endRow; r++) {
const visibleRow = spreadsheetSkeleton.worksheet.getRowVisible(r);
if (visibleRow) {
isAllRowHidden = false;
break;
}
}
if (isAllRowHidden) return true;
let isAllColHidden = true;
for (let c = mergeInfo.startColumn; c <= mergeInfo.endColumn; c++) {
const visibleCol = spreadsheetSkeleton.worksheet.getColVisible(c);
if (visibleCol) {
isAllColHidden = false;
break;
}
}
if (isAllColHidden) return true;
}
// precise is a workaround for windows, macOS does not have this issue.
const startXPrecise = fixLineWidthByScale(startX, scaleX);
@@ -106,8 +106,10 @@ export class Border extends SheetExtension {
if (!isMerged) {
const visibleRow = spreadsheetSkeleton.worksheet.getRowVisible(row);
if (!visibleRow) return true;
const visibleCol = spreadsheetSkeleton.worksheet.getColVisible(col);
if (!visibleRow || !visibleCol) return true;
if (!visibleCol) return true;
}
if (!this.isRenderDiffRangesByRow(mergeInfo.startRow, mergeInfo.endRow, diffRanges)) {
@@ -246,8 +246,10 @@ export class Font extends SheetExtension {
if (notInMergeRange) {
const visibleRow = spreadsheetSkeleton.worksheet.getRowVisible(row);
if (!visibleRow) return true;
const visibleCol = spreadsheetSkeleton.worksheet.getColVisible(col);
if (!visibleRow || !visibleCol) return true;
if (!visibleCol) return true;
} else {
let isAllRowHidden = true;