From e1b05c6e7327e83eccffd64b4bf515220a5183ca Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Tue, 13 Aug 2019 22:18:32 -0400 Subject: Add pango_font_map_get_family This lets us get a PangoFontFamily by name. --- pango/pangofc-fontmap.c | 62 ++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 48 insertions(+), 14 deletions(-) (limited to 'pango/pangofc-fontmap.c') diff --git a/pango/pangofc-fontmap.c b/pango/pangofc-fontmap.c index 535a6f0e..8b49bdce 100644 --- a/pango/pangofc-fontmap.c +++ b/pango/pangofc-fontmap.c @@ -219,6 +219,8 @@ static PangoFontset *pango_fc_font_map_load_fontset (PangoFontMap static void pango_fc_font_map_list_families (PangoFontMap *fontmap, PangoFontFamily ***families, int *n_families); +static PangoFontFamily *pango_fc_font_map_get_family (PangoFontMap *fontmap, + const char *name); static double pango_fc_font_map_get_resolution (PangoFcFontMap *fcfontmap, PangoContext *context); @@ -1190,6 +1192,7 @@ pango_fc_font_map_class_init (PangoFcFontMapClass *class) fontmap_class->load_font = pango_fc_font_map_load_font; fontmap_class->load_fontset = pango_fc_font_map_load_fontset; fontmap_class->list_families = pango_fc_font_map_list_families; + fontmap_class->get_family = pango_fc_font_map_get_family; fontmap_class->shape_engine_type = PANGO_RENDER_TYPE_FC; } @@ -1356,26 +1359,13 @@ is_alias_family (const char *family_name) } static void -pango_fc_font_map_list_families (PangoFontMap *fontmap, - PangoFontFamily ***families, - int *n_families) +ensure_families (PangoFcFontMap *fcfontmap) { - PangoFcFontMap *fcfontmap = PANGO_FC_FONT_MAP (fontmap); PangoFcFontMapPrivate *priv = fcfontmap->priv; FcFontSet *fontset; int i; int count; - if (priv->closed) - { - if (families) - *families = NULL; - if (n_families) - *n_families = 0; - - return; - } - if (priv->n_families < 0) { FcObjectSet *os = FcObjectSetBuild (FC_FAMILY, FC_SPACING, FC_STYLE, FC_WEIGHT, FC_WIDTH, FC_SLANT, @@ -1448,6 +1438,27 @@ pango_fc_font_map_list_families (PangoFontMap *fontmap, priv->n_families = count; } +} + +static void +pango_fc_font_map_list_families (PangoFontMap *fontmap, + PangoFontFamily ***families, + int *n_families) +{ + PangoFcFontMap *fcfontmap = PANGO_FC_FONT_MAP (fontmap); + PangoFcFontMapPrivate *priv = fcfontmap->priv; + + if (priv->closed) + { + if (families) + *families = NULL; + if (n_families) + *n_families = 0; + + return; + } + + ensure_families (fcfontmap); if (n_families) *n_families = priv->n_families; @@ -1456,6 +1467,29 @@ pango_fc_font_map_list_families (PangoFontMap *fontmap, *families = g_memdup (priv->families, priv->n_families * sizeof (PangoFontFamily *)); } +static PangoFontFamily * +pango_fc_font_map_get_family (PangoFontMap *fontmap, + const char *name) +{ + PangoFcFontMap *fcfontmap = PANGO_FC_FONT_MAP (fontmap); + PangoFcFontMapPrivate *priv = fcfontmap->priv; + int i; + + if (priv->closed) + return NULL; + + ensure_families (fcfontmap); + + for (i = 0; i < priv->n_families; i++) + { + PangoFontFamily *family = PANGO_FONT_FAMILY (priv->families[i]); + if (strcmp (name, pango_font_family_get_name (family)) == 0) + return family; + } + + return NULL; +} + static double pango_fc_convert_weight_to_fc (PangoWeight pango_weight) { -- cgit v1.2.1