fix(engine-render): repaint text during incremental scrolling (#7563)

This commit is contained in:
Univer
2026-08-20 21:25:38 +08:00
committed by GitHub
parent 69a4795bc5
commit 5885b675b0
2 changed files with 33 additions and 3 deletions
@@ -45,6 +45,7 @@ import { Canvas } from '../../../canvas';
import { Engine } from '../../../engine';
import { MAIN_VIEW_PORT_KEY, Scene } from '../../../scene';
import { Viewport } from '../../../viewport';
import { Font } from '../extensions/font';
import { SHEET_VIEWPORT_KEY } from '../interfaces';
import {
convertTransformToOffsetX,
@@ -709,6 +710,38 @@ describe('spreadsheet integration', () => {
noSkeletonSpreadsheet.dispose();
});
it('repaints text across the cleared incremental scroll bound', () => {
const { spreadsheet, skeleton, scene, cacheCanvas, mainCanvas } = fixture;
const context = mainCanvas.getContext();
const viewportInfo = createViewportInfo(scene, cacheCanvas, {
diffBounds: [createBound(46, 28, 118, 52)],
diffX: 0,
diffY: 24,
isDirty: 0,
isForceDirty: false,
});
skeleton.setStylesCache(createViewportInfo(scene, cacheCanvas));
const fontExtension = new Font();
spreadsheet.register(fontExtension);
Reflect.set(spreadsheet, '_fontExtension', fontExtension);
Reflect.set(skeleton, '_incrementalFontRenderRanges', [{
startRow: 10,
endRow: 10,
startColumn: 0,
endColumn: 0,
}]);
Reflect.set(spreadsheet, '_refreshIncrementalState', true);
const renderFontSpy = vi.spyOn(
fontExtension as unknown as { _renderFontEachCell: (...args: unknown[]) => void },
'_renderFontEachCell'
);
spreadsheet.draw(context, viewportInfo);
expect(renderFontSpy.mock.calls.some(([, row, column]) => row === 0 && column === 0)).toBe(true);
});
it('skips merge gridline cleanup during merge-free drawing', () => {
const { spreadsheet, skeleton, scene, cacheCanvas, mainCanvas } = fixture;
const context = mainCanvas.getContext() as any;
@@ -383,9 +383,6 @@ export class Spreadsheet extends SheetComponent {
extension.draw(ctx, parentScale, spreadsheetSkeleton, extensionDiffRanges, {
viewRanges: extensionViewRanges,
checkOutOfViewBound: true,
fontRenderRanges: extension === this._fontExtension && !isMergeRepair
? spreadsheetSkeleton.incrementalFontRenderRanges
: undefined,
hasMergeData,
viewportKey: viewportInfo.viewportKey,
viewBound: viewportInfo.cacheBound,