Skip to content

Commit 922c912

Browse files
authored
Have lineDecorationsWidth be computed based on font info such that reading it using editor.getOption(EditorOption.lineDecorationsWidth) always returns a number (microsoft#166982)
1 parent a13757c commit 922c912

File tree

2 files changed

+32
-10
lines changed

2 files changed

+32
-10
lines changed

src/vs/editor/common/config/editorOptions.ts

Lines changed: 31 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2454,17 +2454,10 @@ export class EditorLayoutInfoComputer extends ComputedEditorOption<EditorOption.
24542454
const scrollbarArrowSize = scrollbar.arrowSize;
24552455
const horizontalScrollbarHeight = scrollbar.horizontalScrollbarSize;
24562456

2457-
const rawLineDecorationsWidth = options.get(EditorOption.lineDecorationsWidth);
24582457
const folding = options.get(EditorOption.folding);
24592458
const showFoldingDecoration = options.get(EditorOption.showFoldingControls) !== 'never';
24602459

2461-
let lineDecorationsWidth: number;
2462-
if (typeof rawLineDecorationsWidth === 'string' && /^\d+(\.\d+)?ch$/.test(rawLineDecorationsWidth)) {
2463-
const multiple = parseFloat(rawLineDecorationsWidth.substr(0, rawLineDecorationsWidth.length - 2));
2464-
lineDecorationsWidth = EditorIntOption.clampedInt(multiple * typicalHalfwidthCharacterWidth, 0, 0, 1000);
2465-
} else {
2466-
lineDecorationsWidth = EditorIntOption.clampedInt(rawLineDecorationsWidth, 0, 0, 1000);
2467-
}
2460+
let lineDecorationsWidth = options.get(EditorOption.lineDecorationsWidth);
24682461
if (folding && showFoldingDecoration) {
24692462
lineDecorationsWidth += 16;
24702463
}
@@ -2808,6 +2801,35 @@ class EditorInlayHints extends BaseEditorOption<EditorOption.inlayHints, IEditor
28082801

28092802
//#endregion
28102803

2804+
//#region lineDecorationsWidth
2805+
2806+
class EditorLineDecorationsWidth extends BaseEditorOption<EditorOption.lineDecorationsWidth, number | string, number> {
2807+
2808+
constructor() {
2809+
super(EditorOption.lineDecorationsWidth, 'lineDecorationsWidth', 10);
2810+
}
2811+
2812+
public validate(input: any): number {
2813+
if (typeof input === 'string' && /^\d+(\.\d+)?ch$/.test(input)) {
2814+
const multiple = parseFloat(input.substring(0, input.length - 2));
2815+
return -multiple; // negative numbers signal a multiple
2816+
} else {
2817+
return EditorIntOption.clampedInt(input, this.defaultValue, 0, 1000);
2818+
}
2819+
}
2820+
2821+
public override compute(env: IEnvironmentalOptions, options: IComputedEditorOptions, value: number): number {
2822+
if (value < 0) {
2823+
// negative numbers signal a multiple
2824+
return EditorIntOption.clampedInt(-value * env.fontInfo.typicalHalfwidthCharacterWidth, this.defaultValue, 0, 1000);
2825+
} else {
2826+
return value;
2827+
}
2828+
}
2829+
}
2830+
2831+
//#endregion
2832+
28112833
//#region lineHeight
28122834

28132835
class EditorLineHeight extends EditorFloatOption<EditorOption.lineHeight> {
@@ -5151,7 +5173,7 @@ export const EditorOptions = {
51515173
{ description: nls.localize('letterSpacing', "Controls the letter spacing in pixels.") }
51525174
)),
51535175
lightbulb: register(new EditorLightbulb()),
5154-
lineDecorationsWidth: register(new SimpleEditorOption(EditorOption.lineDecorationsWidth, 'lineDecorationsWidth', 10 as number | string)),
5176+
lineDecorationsWidth: register(new EditorLineDecorationsWidth()),
51555177
lineHeight: register(new EditorLineHeight()),
51565178
lineNumbers: register(new EditorRenderLineNumbersOption()),
51575179
lineNumbersMinChars: register(new EditorIntOption(

src/vs/monaco.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4760,7 +4760,7 @@ declare namespace monaco.editor {
47604760
inDiffEditor: IEditorOption<EditorOption.inDiffEditor, boolean>;
47614761
letterSpacing: IEditorOption<EditorOption.letterSpacing, number>;
47624762
lightbulb: IEditorOption<EditorOption.lightbulb, Readonly<Required<IEditorLightbulbOptions>>>;
4763-
lineDecorationsWidth: IEditorOption<EditorOption.lineDecorationsWidth, string | number>;
4763+
lineDecorationsWidth: IEditorOption<EditorOption.lineDecorationsWidth, number>;
47644764
lineHeight: IEditorOption<EditorOption.lineHeight, number>;
47654765
lineNumbers: IEditorOption<EditorOption.lineNumbers, InternalEditorRenderLineNumbersOptions>;
47664766
lineNumbersMinChars: IEditorOption<EditorOption.lineNumbersMinChars, number>;

0 commit comments

Comments
 (0)