Почему толщина переменной курсора/каретки 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.