summaryrefslogtreecommitdiff
path: root/pango/pangofc-fontmap.c
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2019-08-13 22:18:32 -0400
committerMatthias Clasen <mclasen@redhat.com>2019-10-31 19:52:03 -0400
commite1b05c6e7327e83eccffd64b4bf515220a5183ca (patch)
tree15f12ee1934d2f7126f2a207ac8163c25239ed77 /pango/pangofc-fontmap.c
parent5ed6d2589f8c553bfdfff080b8bea5c90bfefad6 (diff)
downloadpango-e1b05c6e7327e83eccffd64b4bf515220a5183ca.tar.gz
Add pango_font_map_get_family
This lets us get a PangoFontFamily by name.
Diffstat (limited to 'pango/pangofc-fontmap.c')
-rw-r--r--pango/pangofc-fontmap.c62
1 files changed, 48 insertions, 14 deletions
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)
{