I'm using FreeType for a terminal emulator application, and I need
some advice for calculating the appropriate size for cells in the
terminal emulator, given a monospace font.
For bitmap fonts, I'm assuming this is easy (just using
FT_FaceRec.bbox). Let me know if this assumption is incorrect.
For scalable fonts, I'm trying to determine the best way to calculate
terminal cell size given a monospace scalable font of a certain size.
Right now I'm just using FT_FaceRec.bbox as follows:
double x_pixels_per_unit, y_pixels_per_unit, units_per_em;
/* Compute a scaling factor to convert from font units to pixels, as
* described in
* <
https://www.freetype.org/freetype2/docs/tutorial/step2.html> */
units_per_em = (double)face->units_per_EM;
x_pixels_per_unit = face->size->metrics.x_ppem / units_per_em;
y_pixels_per_unit = face->size->metrics.y_ppem / units_per_em;
cellWidth = (int)ceil(
(double)(face->bbox.xMax - face->bbox.xMin) * x_pixels_per_unit);
cellHeight = (int)ceil(
(double)(face->bbox.yMax - face->bbox.yMin) * y_pixels_per_unit);
My problem is the results appear much too large; with cells this large
there is far too much spacing between glyphs. Assuming my code isn't
buggy, does this mean bbox isn't appropriate for computing terminal
emulator cell size?
I know there is more than one way to do this, but is there a robust
way to calculate the appropriate cell size that will work for most
monospace fonts? Right now I'm only testing with DejaVu Sans Mono, but
I would like to be able to use any font, so I can't use any
font-specific hacks.
Regards,
Jonathan