Как мне вертикально выровнять глифы с помощью libraqm?

Мне удалось получить правильные глифы (формирование глифов), используя libraqm, и теперь я необходимо выполнить соединение глифов, чтобы глифы соединились правильно.

Мне удалось получить правильное горизонтальное продвижение, используя:

advance = (glyphs[i].x_advance / glyphs[i].ftface->units_per_EM) * fontsize;

Однако смещение не кажется правильным, потому что все смещения глифов x и y устанавливаются в 0 libraqm.

Первоначально я устанавливал положение глифов, используя:

const float left = (float)(origin_x + glyphs[i].x_offset); const float top = (float)(origin_y + font->leading + (font->ascent - glyphs[i].y_offset));

Но это привело к тому, что все глифы были выровнены по верхней части текстовой строки, например: текст с выравниванием по верхнему краю(пример случайного текста)

Поэтому я изменил код, чтобы выровнять глифы по нижней части строки текста, например так:

const float left = (float)(origin_x + glyphs[i].x_offset); const float top = (float)(origin_y + font->leading + (font->ascent - glyphs[i].y_offset)) - glyphs[i].ftface->glyph->bitmap.rows;

но хоть и выглядит лучше, но все же не совсем то...

выровненный по нижнему краю текст

Кто-нибудь знает, как я должен получить правильные смещения для каждого глифа, используя libraqm?


person Tim Orton    schedule 18.11.2019    source источник


Ответы (1)


вместо использования glyphs[i].ftface->glyph->bitmap.rows для получения высоты глифа используйте glyphs[i].ftface->glyph->bitmap_top, чтобы ваше вертикальное выравнивание выглядело так:

const float top = (float)(origin_y + font->leading + (font->ascent - glyphs[i].y_offset)) - glyphs[i].ftface->glyph->bitmap_top;

person Tim Orton    schedule 18.11.2019