DiaFont* dia_font_new_from_style(DiaFontStyle style, real height) { DiaFont* retval; /* in the future we could establish Dia's own default font * matching to be as (font-)system independent as possible. * For now fall back to Pangos configuration --hb */ PangoFontDescription* pfd = pango_font_description_new(); dia_pfd_set_family(pfd,DIA_FONT_STYLE_GET_FAMILY(style)); dia_pfd_set_weight(pfd,DIA_FONT_STYLE_GET_WEIGHT(style)); dia_pfd_set_slant(pfd,DIA_FONT_STYLE_GET_SLANT(style)); dia_pfd_set_height(pfd,height); retval = DIA_FONT(g_object_new(DIA_TYPE_FONT, NULL)); retval->pfd = pfd; _dia_font_adjust_size (retval, height, FALSE); retval->legacy_name = NULL; return retval; }
/*! * In Dia a font is usually referred to by it's (line-) height, not it's size. * * This methods "calculates" the latter from the former. This used to be some magic factor of 0.7 which did not * solve the resolution dependencance of the former calculation. In fact there is new magic factor now because * really calculating the font size from the height would involve two font loads which seem to be two expensive. */ static void _dia_font_adjust_size (DiaFont *font, real height, gboolean recalc_alwways) { if (font->height != height || !font->metrics || recalc_alwways) { PangoFont *loaded; dia_pfd_set_height (font->pfd, height); /* need to load a font to get it's metrics */ loaded = font->loaded; font->loaded = pango_context_load_font(dia_font_get_context(), font->pfd); if (loaded) /* drop old reference */ g_object_unref (loaded); if (font->metrics) pango_font_metrics_unref (font->metrics); /* caching metrics */ font->metrics = pango_font_get_metrics (font->loaded, NULL); font->height = height; } }