Skip to content

Defining variable fonts #248410

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 244 commits into
base: main
Choose a base branch
from
Draft
Changes from all commits
Commits
Show all changes
244 commits
Select commit Hold shift + click to select a range
03425a9
Fix advanced line wrap if decorations are present
remcohaszing Nov 21, 2023
88e5584
Support dynamic line heights using decorations
remcohaszing Sep 29, 2023
d84a703
undo commenting
aiday-mar Nov 5, 2024
a2637a1
fixing compiler errors
aiday-mar Nov 5, 2024
824113e
placing tests in block comment
aiday-mar Nov 5, 2024
c54ab2c
adding logs
aiday-mar Nov 14, 2024
a98064b
limiting amount of logging
aiday-mar Nov 14, 2024
8a71210
changikng the font size and the line height directly in the code
aiday-mar Nov 14, 2024
f4e5ada
wip
aiday-mar Nov 15, 2024
8afcd7b
wip
aiday-mar Nov 15, 2024
6c110ab
removing monaco editor related code
aiday-mar Nov 18, 2024
5ee4853
wip
aiday-mar Nov 21, 2024
38dfbf6
wip
aiday-mar Nov 21, 2024
d0685e2
wip
aiday-mar Nov 22, 2024
f7ba276
adding wip
aiday-mar Nov 22, 2024
f7d47a3
setting doc as internal
aiday-mar Nov 22, 2024
cf367af
pushing to text to the bottom
aiday-mar Nov 22, 2024
e329622
adding support for font size
aiday-mar Nov 25, 2024
91d4be2
placing at the end
aiday-mar Nov 25, 2024
f7837fb
fixing tests
aiday-mar Nov 25, 2024
25492d2
adding likne height setting
aiday-mar Nov 25, 2024
aaaad55
adding comments
aiday-mar Nov 25, 2024
6395ef1
adding todo
aiday-mar Nov 29, 2024
549e9ed
overriding the font size in sticky scroll
aiday-mar Nov 29, 2024
95f7739
making sticky scroll also use the editor lines heights
aiday-mar Nov 29, 2024
ce134e3
updating sticky scroll on decoration change, investigating lines
aiday-mar Nov 29, 2024
9dec371
Merge branch 'main' into line-height
aiday-mar Jan 6, 2025
952f891
removing changes for font size, focusing on line height changes
aiday-mar Jan 6, 2025
9f7b34c
adding code
aiday-mar Jan 6, 2025
c6d8a6d
adding css changes to position text at the bottom
aiday-mar Jan 7, 2025
6ab9c03
adding also the chnages for demo
aiday-mar Jan 7, 2025
20d1702
adding code
aiday-mar Jan 7, 2025
54e8958
making content widgets correctly position themselves
aiday-mar Jan 7, 2025
e75e7f1
adding css changes to sticky scroll
aiday-mar Jan 7, 2025
c7ce4b2
adding more methods
aiday-mar Jan 7, 2025
13e7c56
adding code
aiday-mar Jan 8, 2025
5addef1
polishing
aiday-mar Jan 8, 2025
4ee17c5
adding code
aiday-mar Jan 8, 2025
b4b62de
polishing
aiday-mar Jan 8, 2025
4888a4d
adding css to sticky scroll
aiday-mar Jan 8, 2025
61dbab1
fixing bug
aiday-mar Jan 8, 2025
aae1f6d
remove testing code
aiday-mar Jan 8, 2025
35b214a
fixing tests
aiday-mar Jan 8, 2025
295a526
removing extension surfacing
aiday-mar Jan 8, 2025
1e596ca
Merge branch 'main' into line-height
alexdima Jan 8, 2025
cdf8764
removing part of doc string
aiday-mar Jan 9, 2025
6ead1c3
removing line height from renderLineInput
aiday-mar Jan 9, 2025
3414d8a
directly getting the line heights from the view context, not the view…
aiday-mar Jan 9, 2025
f06a20f
remove special line heights from the viewModel
aiday-mar Jan 9, 2025
1e5a72e
adding new events for line height changes
aiday-mar Jan 9, 2025
1d64cc5
adding back line height into renderLineInput
aiday-mar Jan 9, 2025
ed5fbf5
wip
aiday-mar Jan 9, 2025
5b0665d
polishing
aiday-mar Jan 13, 2025
b5991d0
refactore viewmodelimpl
aiday-mar Jan 13, 2025
39256ee
updating the special line height listener on model change
aiday-mar Jan 13, 2025
b0b2822
clearing when model is not defined
aiday-mar Jan 13, 2025
9f5d14c
take into account line height in ime
aiday-mar Jan 13, 2025
6f38e62
fixing the offset error
aiday-mar Jan 14, 2025
62d9099
adding height
aiday-mar Jan 14, 2025
9f044eb
making the decorations render full height
aiday-mar Jan 14, 2025
131cc22
take into account line height in cursor
aiday-mar Jan 14, 2025
d1aecd1
fixes the context menu not showing at the correct position
aiday-mar Jan 14, 2025
ad4af0e
centering the folding icon
aiday-mar Jan 14, 2025
71e1d3a
line height
aiday-mar Jan 14, 2025
1a44ac3
adding code in order to continue investigation
aiday-mar Jan 14, 2025
c51902a
Revert "adding code in order to continue investigation"
aiday-mar Jan 15, 2025
904ecee
updating the line heights on editing
aiday-mar Jan 15, 2025
8a14e16
using view positions instead of model
aiday-mar Jan 27, 2025
6a1d6fd
Merge branch 'main' into line-height-2
aiday-mar Feb 4, 2025
f2d0121
fixing compiler error
aiday-mar Feb 4, 2025
85989ab
surfacing through editor
aiday-mar Feb 4, 2025
4ee905f
adding code
aiday-mar Feb 4, 2025
2b715cc
adding code
aiday-mar Feb 6, 2025
d37dedf
adding beginning of code
aiday-mar Feb 17, 2025
fc878f2
adding code
aiday-mar Feb 18, 2025
ba40aee
adding code
aiday-mar Feb 19, 2025
5205609
adding code which commits and recaclulates the data
aiday-mar Feb 19, 2025
dd3053e
allowing to insert or change a special line height
aiday-mar Feb 20, 2025
14a0f30
polishing
aiday-mar Feb 20, 2025
47d97b8
adding logs
aiday-mar Feb 20, 2025
891d46b
separating the logic of user insertion/deletion and decoration changes
aiday-mar Feb 20, 2025
563abf5
adding code for testing
aiday-mar Feb 20, 2025
3e91431
fixing runtime errors
aiday-mar Feb 20, 2025
b7c77f3
adding code
aiday-mar Feb 20, 2025
a72a081
adding elements before invalid index
aiday-mar Feb 20, 2025
9c2ab35
fixing indices
aiday-mar Feb 21, 2025
c2787b8
adding code
aiday-mar Feb 21, 2025
5201398
removing console logs
aiday-mar Feb 21, 2025
9777349
adding code
aiday-mar Feb 21, 2025
aebb432
removing logs in file
aiday-mar Feb 21, 2025
258e9b2
adding changes to sticky lines
aiday-mar Feb 24, 2025
e66aeb8
fixing line insertion
aiday-mar Feb 24, 2025
46c53a4
updating correctly on insert and on delete
aiday-mar Feb 24, 2025
ea2821f
adding code to send initial edit
aiday-mar Feb 24, 2025
50ec1e4
adding code
aiday-mar Feb 25, 2025
244f83a
fixing insertion
aiday-mar Feb 25, 2025
08511d4
adding edits
aiday-mar Feb 25, 2025
810ad8a
adding content changes
aiday-mar Feb 27, 2025
33c3da4
updating the indices
aiday-mar Feb 27, 2025
2e751e0
polishing
aiday-mar Feb 27, 2025
fd68a99
differentiating between case when actually lines are deleted and when…
aiday-mar Feb 27, 2025
6409b7e
modified code for deletion to take into account new special maximum h…
aiday-mar Feb 28, 2025
9764d5b
fixing the indices
aiday-mar Feb 28, 2025
e7ee66c
adding code
aiday-mar Feb 28, 2025
30467fa
adding fix
aiday-mar Feb 28, 2025
5fbfa28
changing the insertion logic
aiday-mar Feb 28, 2025
fcd3639
removing logs
aiday-mar Mar 10, 2025
6507580
Merge branch 'main' into line-height-3
aiday-mar Mar 10, 2025
fb640ea
removing logs
aiday-mar Mar 10, 2025
0b24cb6
removing code that removes the decorations
aiday-mar Mar 17, 2025
e59e82d
setting correct line height
aiday-mar Mar 17, 2025
8c2e0a3
removing line height from RenderLineInput
aiday-mar Mar 17, 2025
6cbc94b
Merge branch 'main' into line-height-3
aiday-mar Mar 17, 2025
11754b1
cleaning
aiday-mar Mar 17, 2025
82e9ba0
Merge branch 'main' into line-height-3
aiday-mar Mar 17, 2025
8a0097e
converting to string
aiday-mar Mar 17, 2025
4b2d310
undoing css change, setting line height also on the folding icon
aiday-mar Mar 17, 2025
2b0bc2d
set line height in the renderLine method
aiday-mar Mar 17, 2025
cf0060b
polishing
aiday-mar Mar 18, 2025
5c662b5
polishing
aiday-mar Mar 18, 2025
d544365
changing deletion logic
aiday-mar Mar 18, 2025
4425ca8
adding code to test
aiday-mar Mar 18, 2025
d6bfa9c
removing testing code
aiday-mar Mar 18, 2025
076524e
fixing candidate
aiday-mar Mar 18, 2025
2c67758
polishing
aiday-mar Mar 19, 2025
7f00f5a
Merge branch 'main' into line-height-3
aiday-mar Mar 19, 2025
ab923ec
adding font infos
aiday-mar Mar 19, 2025
7e79ac1
polishing
aiday-mar Mar 19, 2025
d836d0b
adding remaining values of barefontinfo
aiday-mar Mar 19, 2025
7a5641f
=choosing right line for rendering depending on if there is a special…
aiday-mar Mar 19, 2025
aa406f7
rewriting font decoration logic
aiday-mar Mar 19, 2025
686d4f2
setting different border for testing
aiday-mar Mar 20, 2025
00a976c
fixing scroll top
aiday-mar Mar 20, 2025
7852d96
set variable to make the font size never be larger than the line height
aiday-mar Mar 20, 2025
80f8f36
adding code which sets the font size of the ghost text
aiday-mar Mar 21, 2025
30609f5
adding overflow hidden in order to fix the font size overfkiw
aiday-mar Mar 21, 2025
69048cf
updating widget height using the height of the rendered sticky lines
aiday-mar Mar 21, 2025
375f346
aligning items in the center
aiday-mar Mar 21, 2025
d188ca9
=fetching the correct font info
aiday-mar Mar 21, 2025
02df057
computing the correct left position depending on the font siue within…
aiday-mar Mar 24, 2025
8593460
placing the text area also so the text aligns
aiday-mar Mar 28, 2025
16156e1
adding check so inline completions are always visible
aiday-mar Mar 28, 2025
9ec92f0
adding wip
aiday-mar Mar 31, 2025
1840c01
using same structure as line heights
aiday-mar Apr 1, 2025
0e1b5ae
fixing errors
aiday-mar Apr 1, 2025
2ce71a4
polishing
aiday-mar Apr 1, 2025
77403b4
wip
aiday-mar Apr 2, 2025
77c8c14
adding code for insert
aiday-mar Apr 2, 2025
f199693
=refactoring
aiday-mar Apr 2, 2025
1e0e183
investigating the line breaks
aiday-mar Apr 2, 2025
7583158
save break data
aiday-mar Apr 3, 2025
f4b05fa
adding code to determine line breaks based on font info
aiday-mar Apr 4, 2025
70e1dce
wip
aiday-mar Apr 7, 2025
1d5fa54
removing code because will use other approach
aiday-mar Apr 10, 2025
19a81f8
adding logs
aiday-mar Apr 10, 2025
126c111
adding back logic for font decorations on text model
aiday-mar Apr 11, 2025
74622f4
using the renderViewLine code for the line breaks
aiday-mar Apr 11, 2025
71d8d05
wip
aiday-mar Apr 14, 2025
5e3ed36
Merge branch main into font-size
aiday-mar Apr 14, 2025
17b196a
adding monaco.ts changes
aiday-mar Apr 14, 2025
71b4471
fixing merge issues
aiday-mar Apr 14, 2025
b5ab23f
making line breaks work
aiday-mar Apr 14, 2025
ad495af
dom breaking now works
aiday-mar Apr 14, 2025
0b616c2
adding code to reflect font info changes in the custom font manager
aiday-mar Apr 14, 2025
b257adb
using other rendering tactic
aiday-mar Apr 15, 2025
391813f
adding code to rerender the line type
aiday-mar Apr 15, 2025
c59b9ce
adding code
aiday-mar Apr 16, 2025
d48a290
removing custom font manager
aiday-mar Apr 16, 2025
edd9795
using model line number instead in the constructLines method
aiday-mar Apr 16, 2025
944bc8e
using model line number also for model whitespaces
aiday-mar Apr 16, 2025
ae06caa
adding code in order to make the native edit context show also the sa…
aiday-mar Apr 16, 2025
17c0a15
setting the correct range
aiday-mar Apr 17, 2025
a2d6ce1
resetting the code for text area edit context and disabling custom fo…
aiday-mar Apr 17, 2025
f73dbd2
cleaning the code a bit
aiday-mar Apr 17, 2025
5f6ad6e
wip
aiday-mar Apr 17, 2025
5ad6efe
making the screen reader support use the font sizes from the rendered…
aiday-mar Apr 18, 2025
eda0079
Merge branch 'main' into font-size-2
aiday-mar May 5, 2025
fc7d79e
screen reader
aiday-mar May 5, 2025
132108f
wip
aiday-mar May 5, 2025
486bea6
wip
aiday-mar May 6, 2025
e16b5e5
wip
aiday-mar May 6, 2025
327dc5a
wip
aiday-mar May 7, 2025
b9cc84b
wip
aiday-mar May 7, 2025
9d58a26
adding renderwhitespace from editor config
aiday-mar May 7, 2025
ff1f085
wip
aiday-mar May 8, 2025
148c805
remove the code for font
aiday-mar May 8, 2025
299b179
adding code
aiday-mar May 8, 2025
a41b841
wip
aiday-mar May 8, 2025
0acbd2e
fetching the relevant font size in the text area code
aiday-mar May 8, 2025
cb5a2e2
adding code from other pr
aiday-mar May 13, 2025
64dc6cd
wip
aiday-mar May 13, 2025
62c7185
writing screen reader content
aiday-mar May 13, 2025
602b6c2
adding code
aiday-mar May 13, 2025
2600671
using character mapping inthe dom line breaks computer
aiday-mar May 14, 2025
58df476
Merge branch 'main' into font-size-3
aiday-mar May 14, 2025
87bfa95
wip
aiday-mar May 14, 2025
236cfaa
removing accessibility service check
aiday-mar May 14, 2025
6fd96a5
=wip
aiday-mar May 14, 2025
1e42469
wip
aiday-mar May 14, 2025
6e2bf48
wip
aiday-mar May 14, 2025
ba09833
adding wip
aiday-mar May 14, 2025
ef376b7
wip
aiday-mar May 14, 2025
de39604
wip
aiday-mar May 15, 2025
b12e2a8
wip
aiday-mar May 15, 2025
7e68f00
wip
aiday-mar May 15, 2025
2906d86
wip
aiday-mar May 15, 2025
cbb6ac9
removing screen reader code and reverting to disabling font size in s…
aiday-mar May 16, 2025
c1f60ec
wip
aiday-mar May 16, 2025
f99523a
adding code to react on font change
aiday-mar May 16, 2025
d9db89f
wip
aiday-mar May 16, 2025
dd8ac39
making the diff editor not take the font size and the font family
aiday-mar May 16, 2025
da4c3a3
use maximum line height of 300
aiday-mar May 18, 2025
befd426
wip
aiday-mar May 19, 2025
02a009b
wip
aiday-mar May 26, 2025
0485af5
wip
aiday-mar May 26, 2025
88a85d9
wip
aiday-mar May 26, 2025
c7eebd0
Merge branch 'main' into font-size-3
aiday-mar May 26, 2025
8b3866e
wip
aiday-mar May 26, 2025
30a2554
wip
aiday-mar May 26, 2025
4871826
wip
aiday-mar May 26, 2025
c0b141f
wip
aiday-mar May 26, 2025
89e82b5
wip
aiday-mar May 26, 2025
e7f3ba8
wip
aiday-mar May 27, 2025
e309b5b
wip
aiday-mar May 27, 2025
cd12985
wip
aiday-mar May 27, 2025
c59a5ba
wip
aiday-mar May 28, 2025
2991ed9
wip
aiday-mar May 28, 2025
d186c78
wip
aiday-mar May 28, 2025
c4ecb27
wip
aiday-mar May 28, 2025
6d3ac79
wip
aiday-mar May 28, 2025
ddb2413
wip
aiday-mar Jun 2, 2025
7f3ff7b
wip
aiday-mar Jun 2, 2025
e6e121b
wip
aiday-mar Jun 2, 2025
f22684e
wip
aiday-mar Jun 2, 2025
f9c9052
Merge branch 'main' into font-size-3
aiday-mar Jun 12, 2025
43d8b1c
wip
aiday-mar Jun 12, 2025
08c68e8
wip
aiday-mar Jun 13, 2025
783dd9f
wip
aiday-mar Jun 13, 2025
5885605
wip
aiday-mar Jun 15, 2025
e549781
wip
aiday-mar Jun 16, 2025
175d2b0
wip
aiday-mar Jun 16, 2025
9ebf6b1
wip
aiday-mar Jun 16, 2025
e934d43
polish
aiday-mar Jun 16, 2025
44d355e
polish
aiday-mar Jun 16, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -124,11 +124,14 @@ class TypeScriptDocumentSymbolProvider implements vscode.DocumentSymbolProvider
}
}

export let typeScriptDocumentSymbolProvider: TypeScriptDocumentSymbolProvider | undefined = undefined;

export function register(
selector: DocumentSelector,
client: ITypeScriptServiceClient,
cachedResponse: CachedResponse<Proto.NavTreeResponse>,
) {
typeScriptDocumentSymbolProvider = new TypeScriptDocumentSymbolProvider(client, cachedResponse);
return vscode.languages.registerDocumentSymbolProvider(selector.syntax,
new TypeScriptDocumentSymbolProvider(client, cachedResponse), { label: 'TypeScript' });
typeScriptDocumentSymbolProvider, { label: 'TypeScript' });
}
172 changes: 171 additions & 1 deletion extensions/typescript-language-features/src/languageProvider.ts
Original file line number Diff line number Diff line change
@@ -19,13 +19,51 @@ import TypeScriptServiceClient from './typescriptServiceClient';
import TypingsStatus from './ui/typingsStatus';
import { Disposable } from './utils/dispose';
import { isWeb, isWebAndHasSharedArrayBuffers, supportsReadableByteStreams } from './utils/platform';
import { typeScriptDocumentSymbolProvider } from './languageFeatures/documentSymbol';


const validateSetting = 'validate.enable';
const suggestionSetting = 'suggestionActions.enabled';

export default class LanguageProvider extends Disposable {

private readonly _classFontSizeDecorationType1: vscode.TextEditorDecorationType = vscode.window.createTextEditorDecorationType({ lineHeight: 70, fontSize: 60, fontWeight: 'bold', fontFamily: 'Arial' });
private readonly _interfaceFontSizeDecorationType1: vscode.TextEditorDecorationType = vscode.window.createTextEditorDecorationType({ lineHeight: 70, fontSize: 80, fontWeight: 'bold' }); // fontFamily: 'Times New Roman'
private readonly _functionFontSizeDecorationType1: vscode.TextEditorDecorationType = vscode.window.createTextEditorDecorationType({ lineHeight: 50, fontSize: 40, fontWeight: 'italic', fontFamily: 'Courier New' });
private readonly _methodFontSizeDecorationType1: vscode.TextEditorDecorationType = vscode.window.createTextEditorDecorationType({ lineHeight: 30, fontSize: 20, fontWeight: 'italic', fontFamily: 'Georgia' });

private readonly _classFontSizeDecorationType2: vscode.TextEditorDecorationType = vscode.window.createTextEditorDecorationType({ lineHeight: 70, fontSize: 60, fontWeight: 'italic', fontFamily: 'Georgia' });
private readonly _interfaceFontSizeDecorationType2: vscode.TextEditorDecorationType = vscode.window.createTextEditorDecorationType({ lineHeight: 70, fontSize: 60, fontWeight: 'italic' }); // fontFamily: 'Arial'
private readonly _functionFontSizeDecorationType2: vscode.TextEditorDecorationType = vscode.window.createTextEditorDecorationType({ lineHeight: 50, fontSize: 30, fontWeight: 'bold', fontFamily: 'Times New Roman' });
private readonly _methodFontSizeDecorationType2: vscode.TextEditorDecorationType = vscode.window.createTextEditorDecorationType({ lineHeight: 30, fontSize: 10, fontWeight: 'bold', fontFamily: 'Courier New' });

private readonly _classFontSizeDecorationType3: vscode.TextEditorDecorationType = vscode.window.createTextEditorDecorationType({ lineHeight: 70, fontSize: 20, fontWeight: 'bold', fontFamily: 'Consolas' });
private readonly _interfaceFontSizeDecorationType3: vscode.TextEditorDecorationType = vscode.window.createTextEditorDecorationType({ lineHeight: 70, fontSize: 20, fontWeight: 'bold', fontFamily: 'Consolas' });
private readonly _functionFontSizeDecorationType3: vscode.TextEditorDecorationType = vscode.window.createTextEditorDecorationType({ lineHeight: 50, fontSize: 20, fontWeight: 'italic', fontFamily: 'Consolas' });
private readonly _methodFontSizeDecorationType3: vscode.TextEditorDecorationType = vscode.window.createTextEditorDecorationType({ lineHeight: 30, fontSize: 10, fontWeight: 'italic', fontFamily: 'Consolas' });

private readonly _classFontSizeDecorationType4: vscode.TextEditorDecorationType = vscode.window.createTextEditorDecorationType({ lineHeight: 70, fontSize: 20, fontWeight: 'italic', fontFamily: 'Consolas' });
private readonly _interfaceFontSizeDecorationType4: vscode.TextEditorDecorationType = vscode.window.createTextEditorDecorationType({ lineHeight: 70, fontSize: 20, fontWeight: 'italic', fontFamily: 'Consolas' });
private readonly _functionFontSizeDecorationType4: vscode.TextEditorDecorationType = vscode.window.createTextEditorDecorationType({ lineHeight: 50, fontSize: 20, fontWeight: 'bold', fontFamily: 'Consolas' });
private readonly _methodFontSizeDecorationType4: vscode.TextEditorDecorationType = vscode.window.createTextEditorDecorationType({ lineHeight: 30, fontSize: 10, fontWeight: 'bold', fontFamily: 'Consolas' });

// private readonly _classFontSizeDecorationTypeInjectedText: vscode.TextEditorDecorationType = vscode.window.createTextEditorDecorationType({ after: { contentText: 'AFTER CLASS', fontWeight: 'italic', fontFamily: 'Segoe' } });
// private readonly _interfaceFontSizeDecorationTypeInjectedText: vscode.TextEditorDecorationType = vscode.window.createTextEditorDecorationType({ after: { contentText: 'AFTER INTERFACE', fontWeight: 'italic', fontFamily: 'Roboto' } });
// private readonly _functionFontSizeDecorationTypeInjectedText: vscode.TextEditorDecorationType = vscode.window.createTextEditorDecorationType({ after: { contentText: 'AFTER FUNCTION', fontWeight: 'bold', fontFamily: 'Nunito' } });
// private readonly _methodFontSizeDecorationTypeInjectedText: vscode.TextEditorDecorationType = vscode.window.createTextEditorDecorationType({ after: { contentText: 'AFTER METHOD', fontWeight: 'bold', fontFamily: 'Arial' } });

// PROD CODE

// private readonly _classLineHeightDecorationType: vscode.TextEditorDecorationType = vscode.window.createTextEditorDecorationType({ lineHeight: 22 });
// private readonly _interfaceLineHeightDecorationType: vscode.TextEditorDecorationType = vscode.window.createTextEditorDecorationType({ lineHeight: 22 });
// private readonly _functionLineHeightDecorationType: vscode.TextEditorDecorationType = vscode.window.createTextEditorDecorationType({ lineHeight: 20 });
// private readonly _methodLineHeightDecorationType: vscode.TextEditorDecorationType = vscode.window.createTextEditorDecorationType({ lineHeight: 20 });

// private readonly _classFontSizeDecorationType: vscode.TextEditorDecorationType = vscode.window.createTextEditorDecorationType({ fontSize: 20 });
// private readonly _interfaceFontSizeDecorationType: vscode.TextEditorDecorationType = vscode.window.createTextEditorDecorationType({ fontSize: 20 });
// private readonly _functionFontSizeDecorationType: vscode.TextEditorDecorationType = vscode.window.createTextEditorDecorationType({ fontSize: 18 });
// private readonly _methodFontSizeDecorationType: vscode.TextEditorDecorationType = vscode.window.createTextEditorDecorationType({ fontSize: 18 });

constructor(
private readonly client: TypeScriptServiceClient,
private readonly description: LanguageDescription,
@@ -39,7 +77,139 @@ export default class LanguageProvider extends Disposable {
vscode.workspace.onDidChangeConfiguration(this.configurationChanged, this, this._disposables);
this.configurationChanged();

client.onReady(() => this.registerProviders());
client.onReady(async () => {
await this.registerProviders();
vscode.window.onDidChangeVisibleTextEditors(e => {
e.forEach(async editor => {
this._registerDecorationsForEditor(editor);
setTimeout(() => {
console.log('Changing decorations after 5 seconds');
this._clearDecorationsForEditor(editor);
this._registerDecorationsForEditor2(editor);
}, 5000);
});
});
vscode.window.visibleTextEditors.forEach(async editor => {
this._registerDecorationsForEditor(editor);
setTimeout(() => {
console.log('Changing decorations after 5 seconds');
this._clearDecorationsForEditor(editor);
this._registerDecorationsForEditor2(editor);
}, 5000);
});
vscode.workspace.onDidChangeTextDocument(_ => {
const activeTextEditor = vscode.window.activeTextEditor;
if (!activeTextEditor) {
return;
}
});
});
}


private async _registerDecorationsForEditor(editor: vscode.TextEditor): Promise<void> {
if (!typeScriptDocumentSymbolProvider) {
return;
}
const document = editor.document;
const token = new vscode.CancellationTokenSource().token;
const result = await typeScriptDocumentSymbolProvider.provideDocumentSymbols(document, token);
if (result === undefined) {
return;
}

const classRangesFonts1: vscode.Range[] = [];
const classRangesFonts2: vscode.Range[] = [];
this._getRanges(editor, result, vscode.SymbolKind.Class, classRangesFonts1, classRangesFonts2);

const interfaceRangesFonts1: vscode.Range[] = [];
const interfaceRangesFonts2: vscode.Range[] = [];
this._getRanges(editor, result, vscode.SymbolKind.Interface, interfaceRangesFonts1, interfaceRangesFonts2);

const functionRangesFonts1: vscode.Range[] = [];
const functionRangesFonts2: vscode.Range[] = [];
this._getRanges(editor, result, vscode.SymbolKind.Function, functionRangesFonts1, functionRangesFonts2);

const methodRangesFonts1: vscode.Range[] = [];
const methodRangesFonts2: vscode.Range[] = [];
this._getRanges(editor, result, vscode.SymbolKind.Method, methodRangesFonts1, methodRangesFonts2);

editor.setDecorations(this._classFontSizeDecorationType1, classRangesFonts1);
editor.setDecorations(this._interfaceFontSizeDecorationType1, interfaceRangesFonts1);
editor.setDecorations(this._functionFontSizeDecorationType1, functionRangesFonts1);
editor.setDecorations(this._methodFontSizeDecorationType1, methodRangesFonts1);

editor.setDecorations(this._classFontSizeDecorationType2, classRangesFonts2);
editor.setDecorations(this._interfaceFontSizeDecorationType2, interfaceRangesFonts2);
editor.setDecorations(this._functionFontSizeDecorationType2, functionRangesFonts2);
editor.setDecorations(this._methodFontSizeDecorationType2, methodRangesFonts2);

// editor.setDecorations(this._classFontSizeDecorationTypeInjectedText, classRangesFonts2);
// editor.setDecorations(this._interfaceFontSizeDecorationTypeInjectedText, interfaceRangesFonts2);
// editor.setDecorations(this._functionFontSizeDecorationTypeInjectedText, functionRangesFonts2);
// editor.setDecorations(this._methodFontSizeDecorationTypeInjectedText, methodRangesFonts2);
}

private _clearDecorationsForEditor(editor: vscode.TextEditor): void {
editor.setDecorations(this._classFontSizeDecorationType1, []);
editor.setDecorations(this._interfaceFontSizeDecorationType1, []);
editor.setDecorations(this._functionFontSizeDecorationType1, []);
editor.setDecorations(this._methodFontSizeDecorationType1, []);

editor.setDecorations(this._classFontSizeDecorationType2, []);
editor.setDecorations(this._interfaceFontSizeDecorationType2, []);
editor.setDecorations(this._functionFontSizeDecorationType2, []);
editor.setDecorations(this._methodFontSizeDecorationType2, []);
}

private async _registerDecorationsForEditor2(editor: vscode.TextEditor): Promise<void> {
if (!typeScriptDocumentSymbolProvider) {
return;
}
const document = editor.document;
const token = new vscode.CancellationTokenSource().token;
const result = await typeScriptDocumentSymbolProvider.provideDocumentSymbols(document, token);
if (result === undefined) {
return;
}

const classRangesFonts1: vscode.Range[] = [];
const classRangesFonts2: vscode.Range[] = [];
this._getRanges(editor, result, vscode.SymbolKind.Class, classRangesFonts1, classRangesFonts2);

const interfaceRangesFonts1: vscode.Range[] = [];
const interfaceRangesFonts2: vscode.Range[] = [];
this._getRanges(editor, result, vscode.SymbolKind.Interface, interfaceRangesFonts1, interfaceRangesFonts2);

const functionRangesFonts1: vscode.Range[] = [];
const functionRangesFonts2: vscode.Range[] = [];
this._getRanges(editor, result, vscode.SymbolKind.Function, functionRangesFonts1, functionRangesFonts2);

const methodRangesFonts1: vscode.Range[] = [];
const methodRangesFonts2: vscode.Range[] = [];
this._getRanges(editor, result, vscode.SymbolKind.Method, methodRangesFonts1, methodRangesFonts2);

editor.setDecorations(this._classFontSizeDecorationType3, classRangesFonts1);
editor.setDecorations(this._interfaceFontSizeDecorationType3, interfaceRangesFonts1);
editor.setDecorations(this._functionFontSizeDecorationType3, functionRangesFonts1);
editor.setDecorations(this._methodFontSizeDecorationType3, methodRangesFonts1);

editor.setDecorations(this._classFontSizeDecorationType4, classRangesFonts2);
editor.setDecorations(this._interfaceFontSizeDecorationType4, interfaceRangesFonts2);
editor.setDecorations(this._functionFontSizeDecorationType4, functionRangesFonts2);
editor.setDecorations(this._methodFontSizeDecorationType4, methodRangesFonts2);
}

private _getRanges(activeTextEditor: vscode.TextEditor, symbols: vscode.DocumentSymbol[], kind: vscode.SymbolKind, rangesForFontSize1: vscode.Range[], rangesForFontSize2: vscode.Range[]) {
const border = 10; // Infinity in production
for (const symbol of symbols) {
if (symbol.kind === kind) {
const line = symbol.range.start.line;
rangesForFontSize1.push(activeTextEditor.document.validateRange(new vscode.Range(line, 0, line, border)));
rangesForFontSize2.push(activeTextEditor.document.validateRange(new vscode.Range(line, border - 5, line, Infinity)));
}
this._getRanges(activeTextEditor, symbol.children, kind, rangesForFontSize1, rangesForFontSize2);
}
}

private get documentSelector(): DocumentSelector {
Original file line number Diff line number Diff line change
@@ -72,7 +72,7 @@ export class NativeEditContext extends AbstractEditContext {
private readonly _selectionChangeListener: MutableDisposable<IDisposable>;

constructor(
ownerID: string,
owner: number,
context: ViewContext,
overflowGuardContainer: FastDomNode<HTMLElement>,
private readonly _viewController: ViewController,
@@ -211,7 +211,7 @@ export class NativeEditContext extends AbstractEditContext {
reenableTracking = true;
}
}));
this._register(NativeEditContextRegistry.register(ownerID, this));
this._register(NativeEditContextRegistry.register(owner, this));
}

// --- Public methods ---
Original file line number Diff line number Diff line change
@@ -8,19 +8,19 @@ import { NativeEditContext } from './nativeEditContext.js';

class NativeEditContextRegistryImpl {

private _nativeEditContextMapping: Map<string, NativeEditContext> = new Map();
private _nativeEditContextMapping: Map<number, NativeEditContext> = new Map();

register(ownerID: string, nativeEditContext: NativeEditContext): IDisposable {
this._nativeEditContextMapping.set(ownerID, nativeEditContext);
register(owner: number, nativeEditContext: NativeEditContext): IDisposable {
this._nativeEditContextMapping.set(owner, nativeEditContext);
return {
dispose: () => {
this._nativeEditContextMapping.delete(ownerID);
this._nativeEditContextMapping.delete(owner);
}
};
}

get(ownerID: string): NativeEditContext | undefined {
return this._nativeEditContextMapping.get(ownerID);
get(owner: number): NativeEditContext | undefined {
return this._nativeEditContextMapping.get(owner);
}
}

Original file line number Diff line number Diff line change
@@ -112,6 +112,7 @@ const canUseZeroSizeTextarea = (browser.isFirefox);

export class TextAreaEditContext extends AbstractEditContext {

private readonly _ownerId: number;
private readonly _viewController: ViewController;
private readonly _visibleRangeProvider: IVisibleRangeProvider;
private _scrollLeft: number;
@@ -146,6 +147,7 @@ export class TextAreaEditContext extends AbstractEditContext {
private readonly _textAreaInput: TextAreaInput;

constructor(
ownerId: number,
context: ViewContext,
overflowGuardContainer: FastDomNode<HTMLElement>,
viewController: ViewController,
@@ -155,6 +157,7 @@ export class TextAreaEditContext extends AbstractEditContext {
) {
super(context);

this._ownerId = ownerId;
this._viewController = viewController;
this._visibleRangeProvider = visibleRangeProvider;
this._scrollLeft = 0;
@@ -742,8 +745,8 @@ export class TextAreaEditContext extends AbstractEditContext {
}

// Try to render the textarea with the color/font style to match the text under it
const viewPosition = this._context.viewModel.coordinatesConverter.convertViewPositionToModelPosition(new Position(startPosition.lineNumber, 1));
const lineHeight = this._context.viewLayout.getLineHeightForLineNumber(viewPosition.lineNumber);
const lineHeight = this._context.viewLayout.getLineHeightForLineNumber(startPosition.lineNumber);
const fontSize = this._getFontSizeAtPosition(this._primaryCursorPosition);
const viewLineData = this._context.viewModel.getViewLineData(startPosition.lineNumber);
const startTokenIndex = viewLineData.tokens.findTokenIndexAtOffset(startPosition.column - 1);
const endTokenIndex = viewLineData.tokens.findTokenIndexAtOffset(endPosition.column - 1);
@@ -766,7 +769,8 @@ export class TextAreaEditContext extends AbstractEditContext {
italic: presentation.italic,
bold: presentation.bold,
underline: presentation.underline,
strikethrough: presentation.strikethrough
strikethrough: presentation.strikethrough,
fontSize
});
}
return;
@@ -845,6 +849,7 @@ export class TextAreaEditContext extends AbstractEditContext {
const tac = this.textAreaCover;

applyFontInfo(ta, this._fontInfo);
ta.setFontSize(renderData.fontSize ?? this._fontInfo.fontSize);
ta.setTop(renderData.top);
ta.setLeft(renderData.left);
ta.setWidth(renderData.width);
@@ -876,6 +881,20 @@ export class TextAreaEditContext extends AbstractEditContext {
}
}
}

private _getFontSizeAtPosition(position: Position): number {
const viewModel = this._context.viewModel;
const modelPosition = viewModel.coordinatesConverter.convertViewPositionToModelPosition(position);
const fontDecorations = viewModel.model.getFontDecorationsInRange(Range.fromPositions(modelPosition), this._ownerId);
let fontSize: number = this._fontInfo.fontSize;
for (const fontDecoration of fontDecorations) {
if (fontDecoration.options.fontSize) {
fontSize = fontDecoration.options.fontSize;
break;
}
}
return fontSize;
}
}

interface IRenderData {
@@ -889,6 +908,7 @@ interface IRenderData {
color?: Color | null;
italic?: boolean;
bold?: boolean;
fontSize?: number;
underline?: boolean;
strikethrough?: boolean;
}
6 changes: 6 additions & 0 deletions src/vs/editor/browser/editorBrowser.ts
Original file line number Diff line number Diff line change
@@ -1011,6 +1011,12 @@ export interface ICodeEditor extends editorCommon.IEditor {
*/
getDecorationsInRange(range: Range): IModelDecoration[] | null;

/**
* Get all the font decorations for a range (filtering out decorations from other editors).
* @param range The range to get font decorations for.
*/
getFontDecorationsInRange(range: Range): IModelDecoration[] | null;

/**
* All decorations added through this call will get the ownerId of this editor.
* @deprecated Use `createDecorationsCollection`
Original file line number Diff line number Diff line change
@@ -376,7 +376,7 @@ export class FullFileRenderStrategy extends BaseRenderStrategy {
decorationStyleSetOpacity = undefined;

// Apply supported inline decoration styles to the cell metadata
for (decoration of lineData.inlineDecorations) {
for (decoration of lineData.inlineDecorations.decorations) {
// This is Range.strictContainsPosition except it works at the cell level,
// it's also inlined to avoid overhead.
if (
Original file line number Diff line number Diff line change
@@ -279,7 +279,7 @@ export class ViewportRenderStrategy extends BaseRenderStrategy {
decorationStyleSetOpacity = undefined;

// Apply supported inline decoration styles to the cell metadata
for (decoration of lineData.inlineDecorations) {
for (decoration of lineData.inlineDecorations.decorations) {
// This is Range.strictContainsPosition except it works at the cell level,
// it's also inlined to avoid overhead.
if (
Loading
Oops, something went wrong.