воскресенье, 18 ноября 2012 г.

1920x1080 #3

Итак, Java/Swing приложения настроены на использование GTK+ L&F темы, а опции антиалиасинга включены - все равно остаются две проблемы.

Проблема #1: меню и контролы рисуются правильным шрифтом, но с full-хинтингом. В то, что Java под Linux использует неотключаемый full-хинтинг можно удостовериться включив временно такой же хинтинг во всей системе (я все таки предпочитаю slight) - приложения на Java/Swing и родные приложения станут похожи. Как чинить это не совсем понятно. Некоторые предлагают патчить OpenJDK

Проблема #2: В элементах, которые отрисовывает само Java/Swing приложение (например все текстовые редакторы) шрифты отрисовываются в неправильных размерах. Например, мне приходится выставлять в IDEA в качестве моноширийного шрифта шрифт размером 16pt, тогда как в нативных приложениях с этой ролью справляется шрифт размером 10pt. Суть проблемы в том, что под Linux рендерингом занимается сама Java, вычисляя размер в пикселах относительно фиксированного разрешения в 72 DPI. Остается завидовать владельцам маков, где такая проблема решена. Само несоответствие размеров - полбеды, беда в том, что при этом хинтинг работает неправильно и рисунок шрифта кардинально отличается от того, что должно быть. При этом full-хинтинг делает буквы тонкими и ажурными, что терпимо в случае меню и контролов, но вызывает раздражение в моноширийном шрифте текстового редактора.

Некоторые предлагают вырезать из шрифта весь хинтинг. Шрифт действительно становится более мясистым, но при этом возникает куча артефактов, что, конечно, никуда не годится

Я уже приготовился смириться с этим и выставил Lucida Typewriter 16 pt, как наиболее удобоваримый шрифт в моей ситуации, но мне на глаза попалась утилита ttfautohint, которая удаляет встроенный в шрифт хинтинг, заменяя его своим. Попробовал обработать пару шрифтов и вот оно! - желаемая мясистость моноширийного достигнута, причем без каких-либо заметных артефактов.

Комментариев нет:

Отправить комментарий