mirror of
https://github.com/kovidgoyal/kitty
synced 2026-06-06 09:15:57 +02:00
Linux: When calculating cell widths use the actual rendered bitmap width in addition to the horizontal advance reported by FreeType.
The horizontal advance is insufficient for some fonts at some point sizes. So although rendering the characters is slower, we do it to ensure cell width is correct. Fixes #352
This commit is contained in:
@@ -278,8 +278,12 @@ calc_cell_width(Face *self) {
|
||||
unsigned int ans = 0;
|
||||
for (char_type i = 32; i < 128; i++) {
|
||||
int glyph_index = FT_Get_Char_Index(self->face, i);
|
||||
if (load_glyph(self, glyph_index, FT_LOAD_DEFAULT)) {
|
||||
ans = MAX(ans, (unsigned long)ceilf((float)self->face->glyph->metrics.horiAdvance / 64.f));
|
||||
// We actually render the bitmap and get its width even though this is very slow, because
|
||||
// there are fonts for which the horizontal advance is incorrect, see https://github.com/kovidgoyal/kitty/issues/352#issuecomment-376262576
|
||||
if (load_glyph(self, glyph_index, FT_LOAD_RENDER)) {
|
||||
unsigned int horizontal_advance = (unsigned int)ceilf((float)self->face->glyph->metrics.horiAdvance / 64.f);
|
||||
ans = MAX(ans, self->face->glyph->bitmap.width);
|
||||
ans = MAX(ans, horizontal_advance);
|
||||
}
|
||||
}
|
||||
return ans;
|
||||
|
||||
Reference in New Issue
Block a user