Есть кроссплатформенное приложение (среда разработки для Windows - Borland Delphi 7, для Linux - Borland Kylix 3 Delphi IDE. Версия Linux - ASPLinux 7.3). При адаптации приложения под Linux возникла такая проблема: шрифты, которые поставляются с Linux для него не подходят. Выглядят они довольно коряво, при этом различия между полужирным и медиум шрифтом в толщине линии практически не видны, особенно плохо шрифты смотрятся в разрешении 800x600 (на которое приложение и расчитано). Для решения этой проблемы я взял TrueType шрифт из Windows и поставил его в Linux (шрифт: Courier New, нужен был именно моноширинный шрифт). В результате, приложение стало выглядеть значительно лучше, но размер символов определялся в нем не правильно и, как следствие, расстояние между строками было слишком большим, а также контролы (вроде TEdita) непомерно высокими. Покопавшись с этим шрифтом я пришел к выводу, что в Windows и Linux по разному определяется высота символов: в Windows - она задается ascender-ом и descender-ом, а в Linux - black box-ом (который в свою очередь определяется размером самого большого символа шрифта). И действительно, после удаления "лишних" (слишком больших) символов из шрифта все стало нормально. Однако проблемы это не решило, т.к. изменять шрифт не позволяет лицензия на него.
Если кто-нибудь знает ответ на один из следующих вопросов, заранее большое спасибо:
1. Как можно заставить стандартные шрифты в Linux выглядеть нормально?
2. Если я ошибаюсь на счет TrueType шрифта Courier New и все дело в настройках, то скажите в чем моя ошибка и как ее исправить.
3. Где можно достать хорошие терминальные шрифты (моноширинные и что бы вид у символов был как, например, в консоли) лишенные указанного недостатка Courier New?
4. Либо где можно взять шрифты с гибкой лицензией, позволяющей их редактировать?
Проблема со шрифтами
Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду
http://www.tldp.org/HOWTO/Font-HOWTO/getfonts.html
и, думаю, их из Open Office ещё позаимствовать можно.
и, думаю, их из Open Office ещё позаимствовать можно.
Даже самый дурацкий замысел можно воплотить мастерски
А кто знает, как посчитать для данного размера шрифта междустрочный интервал? капец как нада...
Вообще-то межстрочный интервал часто задается произвольно, не взирая на метрики: сколько надо, столько и задаешь (например, Line spacing в Word). Но есть и специальное значение по умолчанию, которое можно извлечь из метрик фонта:
Величина tm.tmExternalLeading - это межстрочное расстояние по умолчанию, рекомендуемое разработчиком фонта. Обычно используется в связке с tm.tmHeight - в сумме они как раз определяют смещение по Y между строками. Но полагаться на tmExternalLeading не стоит, она запросто может быть равна 0. Лучше проверять, и если 0, то задавать свой ненулевой интервал.
Код: Выделить всё
var tm: TTextMetric;
...
GetTextMetrics(hdc, tm);
...