Merge pull request #5929 from xtermjs/cursor/atlas-cache-texture-size-7cad
fix(webgl): include texture size and cell dimensions in atlas cache equality
This commit is contained in:
@@ -0,0 +1,87 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2026 The xterm.js authors. All rights reserved.
|
||||||
|
* @license MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { assert } from 'chai';
|
||||||
|
import { configEquals } from './CharAtlasUtils';
|
||||||
|
import { ICharAtlasConfig } from './Types';
|
||||||
|
import { NULL_COLOR } from 'common/Color';
|
||||||
|
import { IColor } from 'common/Types';
|
||||||
|
|
||||||
|
function createTestConfig(overrides: Partial<ICharAtlasConfig> = {}): ICharAtlasConfig {
|
||||||
|
const color: IColor = { css: '#ffffff', rgba: 0xffffffff };
|
||||||
|
const contrastCache = {
|
||||||
|
clear: () => {},
|
||||||
|
setCss: () => {},
|
||||||
|
getCss: () => undefined,
|
||||||
|
setColor: () => {},
|
||||||
|
getColor: () => undefined
|
||||||
|
};
|
||||||
|
const colors = {
|
||||||
|
foreground: color,
|
||||||
|
background: color,
|
||||||
|
cursor: NULL_COLOR,
|
||||||
|
cursorAccent: NULL_COLOR,
|
||||||
|
selectionForeground: undefined,
|
||||||
|
selectionBackgroundTransparent: NULL_COLOR,
|
||||||
|
selectionBackgroundOpaque: NULL_COLOR,
|
||||||
|
selectionInactiveBackgroundTransparent: NULL_COLOR,
|
||||||
|
selectionInactiveBackgroundOpaque: NULL_COLOR,
|
||||||
|
overviewRulerBorder: NULL_COLOR,
|
||||||
|
scrollbarSliderBackground: NULL_COLOR,
|
||||||
|
scrollbarSliderHoverBackground: NULL_COLOR,
|
||||||
|
scrollbarSliderActiveBackground: NULL_COLOR,
|
||||||
|
ansi: new Array(256).fill(color),
|
||||||
|
contrastCache,
|
||||||
|
halfContrastCache: contrastCache
|
||||||
|
};
|
||||||
|
return {
|
||||||
|
customGlyphs: true,
|
||||||
|
devicePixelRatio: 1,
|
||||||
|
deviceMaxTextureSize: 4096,
|
||||||
|
letterSpacing: 0,
|
||||||
|
lineHeight: 1,
|
||||||
|
fontSize: 15,
|
||||||
|
fontFamily: 'monospace',
|
||||||
|
fontWeight: 'normal',
|
||||||
|
fontWeightBold: 'bold',
|
||||||
|
deviceCellWidth: 10,
|
||||||
|
deviceCellHeight: 20,
|
||||||
|
deviceCharWidth: 8,
|
||||||
|
deviceCharHeight: 16,
|
||||||
|
allowTransparency: false,
|
||||||
|
drawBoldTextInBrightColors: true,
|
||||||
|
minimumContrastRatio: 1,
|
||||||
|
colors,
|
||||||
|
...overrides
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
describe('CharAtlasUtils', () => {
|
||||||
|
describe('configEquals', () => {
|
||||||
|
it('should return true for identical configs', () => {
|
||||||
|
const a = createTestConfig();
|
||||||
|
const b = createTestConfig();
|
||||||
|
assert.ok(configEquals(a, b));
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should return false when deviceMaxTextureSize differs', () => {
|
||||||
|
const a = createTestConfig();
|
||||||
|
const b = createTestConfig({ deviceMaxTextureSize: 8192 });
|
||||||
|
assert.ok(!configEquals(a, b));
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should return false when deviceCellWidth differs', () => {
|
||||||
|
const a = createTestConfig();
|
||||||
|
const b = createTestConfig({ deviceCellWidth: 11 });
|
||||||
|
assert.ok(!configEquals(a, b));
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should return false when deviceCellHeight differs', () => {
|
||||||
|
const a = createTestConfig();
|
||||||
|
const b = createTestConfig({ deviceCellHeight: 21 });
|
||||||
|
assert.ok(!configEquals(a, b));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -59,6 +59,7 @@ export function configEquals(a: ICharAtlasConfig, b: ICharAtlasConfig): boolean
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
return a.devicePixelRatio === b.devicePixelRatio &&
|
return a.devicePixelRatio === b.devicePixelRatio &&
|
||||||
|
a.deviceMaxTextureSize === b.deviceMaxTextureSize &&
|
||||||
a.customGlyphs === b.customGlyphs &&
|
a.customGlyphs === b.customGlyphs &&
|
||||||
a.lineHeight === b.lineHeight &&
|
a.lineHeight === b.lineHeight &&
|
||||||
a.letterSpacing === b.letterSpacing &&
|
a.letterSpacing === b.letterSpacing &&
|
||||||
@@ -67,6 +68,8 @@ export function configEquals(a: ICharAtlasConfig, b: ICharAtlasConfig): boolean
|
|||||||
a.fontWeight === b.fontWeight &&
|
a.fontWeight === b.fontWeight &&
|
||||||
a.fontWeightBold === b.fontWeightBold &&
|
a.fontWeightBold === b.fontWeightBold &&
|
||||||
a.allowTransparency === b.allowTransparency &&
|
a.allowTransparency === b.allowTransparency &&
|
||||||
|
a.deviceCellWidth === b.deviceCellWidth &&
|
||||||
|
a.deviceCellHeight === b.deviceCellHeight &&
|
||||||
a.deviceCharWidth === b.deviceCharWidth &&
|
a.deviceCharWidth === b.deviceCharWidth &&
|
||||||
a.deviceCharHeight === b.deviceCharHeight &&
|
a.deviceCharHeight === b.deviceCharHeight &&
|
||||||
a.drawBoldTextInBrightColors === b.drawBoldTextInBrightColors &&
|
a.drawBoldTextInBrightColors === b.drawBoldTextInBrightColors &&
|
||||||
|
|||||||
Reference in New Issue
Block a user