Исходное положение пера в фритайпе?

После рисования глифа свободным шрифтом перо перемещается следующим образом:

pen.x += face->glyph->advance.x;
pen.y += face->glyph->advance.y;

Мой вопрос: как установить начальное положение пера первого символа относительно верхней левой границы поверхности рисования?

{0,0} неверно, так как первая линия будет отображаться в основном над верхней частью поверхности рисования и слишком близко к левой границе.

Я подозреваю, что это какая-то комбинация:

struct FT_FaceRec {
  ...
  FT_BBox           bbox;

  FT_UShort         units_per_EM;
  FT_Short          ascender;
  FT_Short          descender;
  FT_Short          height;

  FT_Short          max_advance_width;
  FT_Short          max_advance_height;
  ...
}

но не очень понятно.


person Andrew Tomazos    schedule 20.07.2020    source источник
comment
Планируете ли вы использовать очень высокий шрифт? Если первый символ выступает влево — скажем, f в нижнем регистре с наклонным курсивом — хотите ли вы переместить его вправо, чтобы он был полностью виден? Всегда один и тот же шрифт и размер? Это для интерактивного ввода или статического текста? Нужно ли учитывать акценты при определении смещения по оси y? На столицах? Включая вьетнамский (несколько сложенных акцентов)? Включая текст zalgo? (... множество расставленных акцентов..)   -  person Jongware    schedule 22.07.2020


Ответы (1)


Для записи я использовал в качестве начальной позиции пера:

пер.х = 0; pen.y = -лицо-›размер-›metrics.ascender;

Кажется, это подходящая минимальная граница слева вверху от начала первого глифа.

Далее, используя face-›size-›metrics.descender после последней базовой линии (происхождение последнего глифа), для нижней границы. И использование положения пера x после продвижения (+= .advance.x) за начало координат самого правого глифа в качестве минимальной правой границы.

person Andrew Tomazos    schedule 30.07.2020