Почему толщина переменной курсора/каретки Visual Studio?

Когда я перемещаюсь в разные места строки в Visual Studio, я замечаю, что толщина курсора меняется. Я не имею в виду переход в режим вставки или изменение каких-либо настроек операционной системы или самой VS.

Та же самая переменная толщина курсора происходит, если курсор находится между двумя пробельными символами, между пробельными и непробельными символами или между несколькими непробельными символами (например, в середине имени переменной).

При ограниченном исследовании кажется, что одно и то же место в файле имеет одинаковую толщину, даже если файл закрывается и снова открывается или Visual Studio перезапускается.

В настоящее время я использую версию 2022 версии 17.6.2, но я считаю, что такое поведение характерно не только для этой версии.

Ниже приведены два скриншота, сделанные из одной и той же строки кода.

Кажется, что такое поведение происходит только в текстовом редакторе. В таких местах, как окно вывода, панель поиска, окно интерпретации и окно команд, отображается обычный острый курсор.

Если я увеличу масштаб в редакторе до 380%, курсор по-прежнему будет казаться мне немного непоследовательным, но степень этого несоответствия будет меньше.

1 ответ

Похоже, что в какой-то момент средство визуализации текста в представлении редактора Visual Studio было изменено. Теперь вы можете переключить режим рендеринга в меню «Параметры» → « Текстовый редактор » → «Дополнительно » → «Метод форматирования текста» :

Выбрав «Дисплей» (как видно на скриншоте), вы можете получить рендеринг с регулировкой пикселей. Курсор будет одинаковым во всех столбцах (а также синие точки, символы и многое другое).

(Эти параметры соответствуют перечислению TextFormattingMode .)

Цитата из этого старого сообщения в блоге о разнице:

Идеал. Идеальные метрики текста — это метрики, которые использовались для форматирования текста с момента появления WPF. Эти метрики приводят к тому, что формы глифов сохраняют высокую точность своих контуров из файла шрифта. Окончательное размещение глифов не учитывается при создании растровых изображений глифов или позиционировании глифов относительно друг друга.

Отображение. В этом новом режиме форматирования WPF использует текстовые метрики, совместимые с GDI. Это гарантирует, что каждый глиф имеет ширину в несколько целых пикселей и располагается на целых пикселях. Использование текстовых показателей, совместимых с GDI, также означает, что размеры глифов и разрыв строк аналогичны платформам на основе GDI. Тем не менее, размеры глифов — не единственные входные данные для алгоритма разрыва строк, используемого WPF. Несмотря на то, что мы используем те же метрики, что и GDI, наш перенос строк не будет точно таким же.

Самая важная часть: это гарантирует, что каждый глиф имеет ширину в несколько целых пикселей и располагается на целых пикселях.


Мое личное мнение: идеальный рендеринг отлично смотрится при высоком PPI (например, на дисплеях Retina). Это отстой при 96 PPI.

Другие вопросы по тегам