real dia_font_descent(const char* string, DiaFont* font, real height) { if (font->metrics) { real descent = pdu_to_dcm(pango_font_metrics_get_descent (font->metrics)); return descent * (height / font->height); } else { /* previous, _expensive_ but string specific way */ TextLine *text_line = text_line_new(string, font, height); real result = text_line_get_descent(text_line); text_line_destroy(text_line); return result; } }
static void calc_ascent_descent(Text *text) { real sig_a = 0.0,sig_d = 0.0; gint i; for ( i = 0; i < text->numlines; i++) { sig_a += text_line_get_ascent(text->lines[i]); sig_d += text_line_get_descent(text->lines[i]); } text->ascent = sig_a / (real)text->numlines; text->descent = sig_d / (real)text->numlines; }