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. --- docs/pango-sections.txt | 1 + pango/pango-fontmap-private.h | 1 - pango/pango-fontmap.c | 52 ++++++++++++++++++++++++++++++++++++ pango/pango-fontmap.h | 7 ++++- pango/pangofc-fontmap.c | 62 +++++++++++++++++++++++++++++++++---------- 5 files changed, 107 insertions(+), 16 deletions(-) diff --git a/docs/pango-sections.txt b/docs/pango-sections.txt index c875b91f..3abcf7c3 100644 --- a/docs/pango-sections.txt +++ b/docs/pango-sections.txt @@ -277,6 +277,7 @@ pango_font_map_create_context pango_font_map_load_font pango_font_map_load_fontset pango_font_map_list_families +pango_font_map_get_family pango_font_map_get_serial pango_font_map_changed diff --git a/pango/pango-fontmap-private.h b/pango/pango-fontmap-private.h index be06bd8f..3452fbca 100644 --- a/pango/pango-fontmap-private.h +++ b/pango/pango-fontmap-private.h @@ -28,7 +28,6 @@ G_BEGIN_DECLS - PANGO_DEPRECATED_IN_1_38 const char *pango_font_map_get_shape_engine_type (PangoFontMap *fontmap); diff --git a/pango/pango-fontmap.c b/pango/pango-fontmap.c index 46054ec1..20dbc3cf 100644 --- a/pango/pango-fontmap.c +++ b/pango/pango-fontmap.c @@ -31,12 +31,16 @@ static PangoFontset *pango_font_map_real_load_fontset (PangoFontMap PangoLanguage *language); +static PangoFontFamily *pango_font_map_real_get_family (PangoFontMap *fontmap, + const char *name); + G_DEFINE_ABSTRACT_TYPE (PangoFontMap, pango_font_map, G_TYPE_OBJECT) static void pango_font_map_class_init (PangoFontMapClass *class) { class->load_fontset = pango_font_map_real_load_fontset; + class->get_family = pango_font_map_real_get_family; } static void @@ -339,3 +343,51 @@ pango_font_map_changed (PangoFontMap *fontmap) if (PANGO_FONT_MAP_GET_CLASS (fontmap)->changed) PANGO_FONT_MAP_GET_CLASS (fontmap)->changed (fontmap); } + +static PangoFontFamily * +pango_font_map_real_get_family (PangoFontMap *fontmap, + const char *name) +{ + PangoFontFamily **families; + int n_families; + PangoFontFamily *family; + int i; + + pango_font_map_list_families (fontmap, &families, &n_families); + + family = NULL; + + for (i = 0; i < n_families; i++) + { + if (strcmp (name, pango_font_family_get_name (families[i])) == 0) + { + family = families[i]; + break; + } + } + + g_free (families); + + return family; +} + +/** + * pango_font_map_get_family: + * @fontmap: a #PangoFontMap + * @name: a family name + * + * Gets a font family by name. + * + * Returns: (transfer none): the #PangoFontFamily + * + * Since: 1.46 + */ +PangoFontFamily * +pango_font_map_get_family (PangoFontMap *fontmap, + const char *name) +{ + g_return_val_if_fail (PANGO_IS_FONT_MAP (fontmap), NULL); + + return PANGO_FONT_MAP_GET_CLASS (fontmap)->get_family (fontmap, name); +} + diff --git a/pango/pango-fontmap.h b/pango/pango-fontmap.h index b6206f1d..42ffc2ff 100644 --- a/pango/pango-fontmap.h +++ b/pango/pango-fontmap.h @@ -114,11 +114,13 @@ struct _PangoFontMapClass guint (*get_serial) (PangoFontMap *fontmap); void (*changed) (PangoFontMap *fontmap); + PangoFontFamily * (*get_family) (PangoFontMap *fontmap, + const char *name); + /*< private >*/ /* Padding for future expansion */ void (*_pango_reserved1) (void); - void (*_pango_reserved2) (void); }; PANGO_AVAILABLE_IN_ALL @@ -143,6 +145,9 @@ guint pango_font_map_get_serial (PangoFontMap *fontma PANGO_AVAILABLE_IN_1_34 void pango_font_map_changed (PangoFontMap *fontmap); +PANGO_AVAILABLE_IN_1_46 +PangoFontFamily *pango_font_map_get_family (PangoFontMap *fontmap, + const char *name); G_END_DECLS 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 From 044d31030af43722e79c582fc3c4d3e4ace9d9a3 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Tue, 13 Aug 2019 22:36:01 -0400 Subject: Add pango_font_family_get_face This lets us get a face by name. --- docs/pango-sections.txt | 1 + pango/fonts.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++ pango/pango-font.h | 9 ++++++++- pango/pangofc-fontmap.c | 51 +++++++++++++++++++++++++++++++++++++------------ 4 files changed, 98 insertions(+), 13 deletions(-) diff --git a/docs/pango-sections.txt b/docs/pango-sections.txt index 3abcf7c3..cb165610 100644 --- a/docs/pango-sections.txt +++ b/docs/pango-sections.txt @@ -264,6 +264,7 @@ pango_font_family_get_name pango_font_family_is_monospace pango_font_family_is_variable pango_font_family_list_faces +pango_font_family_get_face PangoFontFace pango_font_face_get_face_name diff --git a/pango/fonts.c b/pango/fonts.c index 4ffa0378..eaff2378 100644 --- a/pango/fonts.c +++ b/pango/fonts.c @@ -2160,9 +2160,13 @@ pango_font_metrics_get_strikethrough_thickness (PangoFontMetrics *metrics) G_DEFINE_ABSTRACT_TYPE (PangoFontFamily, pango_font_family, G_TYPE_OBJECT) +static PangoFontFace *pango_font_family_real_get_face (PangoFontFamily *family, + const char *name); + static void pango_font_family_class_init (PangoFontFamilyClass *class G_GNUC_UNUSED) { + class->get_face = pango_font_family_real_get_face; } static void @@ -2212,6 +2216,52 @@ pango_font_family_list_faces (PangoFontFamily *family, PANGO_FONT_FAMILY_GET_CLASS (family)->list_faces (family, faces, n_faces); } +static PangoFontFace * +pango_font_family_real_get_face (PangoFontFamily *family, + const char *name) +{ + PangoFontFace **faces; + int n_faces; + PangoFontFace *face; + int i; + + pango_font_family_list_faces (family, &faces, &n_faces); + + face = NULL; + for (i = 0; i < n_faces; i++) + { + if (strcmp (name, pango_font_face_get_face_name (faces[i])) == 0) + { + face = faces[i]; + break; + } + } + + g_free (faces); + + return face; +} + +/** + * pango_font_family_get_face: + * @family: a #PangoFontFamily + * @name: the name of a face + * + * Gets the #PangoFontFace of @family with the given name. + * + * Returns: (transfer none): the #PangoFontFace + * + * Since: 1.46 + */ +PangoFontFace * +pango_font_family_get_face (PangoFontFamily *family, + const char *name) +{ + g_return_val_if_fail (PANGO_IS_FONT_FAMILY (family), NULL); + + return PANGO_FONT_FAMILY_GET_CLASS (family)->get_face (family, name); +} + /** * pango_font_family_is_monospace: * @family: a #PangoFontFamily diff --git a/pango/pango-font.h b/pango/pango-font.h index 70c24d20..d84847a5 100644 --- a/pango/pango-font.h +++ b/pango/pango-font.h @@ -428,11 +428,14 @@ struct _PangoFontFamilyClass gboolean (*is_monospace) (PangoFontFamily *family); gboolean (*is_variable) (PangoFontFamily *family); + PangoFontFace * (*get_face) (PangoFontFamily *family, + const char *name); + + /*< private >*/ /* Padding for future expansion */ void (*_pango_reserved2) (void); - void (*_pango_reserved3) (void); }; #endif /* PANGO_DISABLE_DEPRECATED */ @@ -451,6 +454,10 @@ gboolean pango_font_family_is_monospace (PangoFontFamily *family) G_G PANGO_AVAILABLE_IN_1_44 gboolean pango_font_family_is_variable (PangoFontFamily *family) G_GNUC_PURE; +PANGO_AVAILABLE_IN_1_46 +PangoFontFace *pango_font_family_get_face (PangoFontFamily *family, + const char *name); + /* * PangoFontFace diff --git a/pango/pangofc-fontmap.c b/pango/pangofc-fontmap.c index 8b49bdce..aa8012f8 100644 --- a/pango/pangofc-fontmap.c +++ b/pango/pangofc-fontmap.c @@ -2583,20 +2583,10 @@ create_face (PangoFcFamily *fcfamily, } static void -pango_fc_family_list_faces (PangoFontFamily *family, - PangoFontFace ***faces, - int *n_faces) +ensure_faces (PangoFcFamily *fcfamily) { - PangoFcFamily *fcfamily = PANGO_FC_FAMILY (family); PangoFcFontMap *fcfontmap = fcfamily->fontmap; - PangoFcFontMapPrivate *priv; - - *faces = NULL; - *n_faces = 0; - if (G_UNLIKELY (!fcfontmap)) - return; - - priv = fcfontmap->priv; + PangoFcFontMapPrivate *priv = fcfontmap->priv; if (fcfamily->n_faces < 0) { @@ -2705,6 +2695,22 @@ pango_fc_family_list_faces (PangoFontFamily *family, fcfamily->faces = faces; } } +} + +static void +pango_fc_family_list_faces (PangoFontFamily *family, + PangoFontFace ***faces, + int *n_faces) +{ + PangoFcFamily *fcfamily = PANGO_FC_FAMILY (family); + + *faces = NULL; + *n_faces = 0; + + if (G_UNLIKELY (!fcfamily->fontmap)) + return; + + ensure_faces (fcfamily); if (n_faces) *n_faces = fcfamily->n_faces; @@ -2713,6 +2719,26 @@ pango_fc_family_list_faces (PangoFontFamily *family, *faces = g_memdup (fcfamily->faces, fcfamily->n_faces * sizeof (PangoFontFace *)); } +static PangoFontFace * +pango_fc_family_get_face (PangoFontFamily *family, + const char *name) +{ + PangoFcFamily *fcfamily = PANGO_FC_FAMILY (family); + int i; + + ensure_faces (fcfamily); + + for (i = 0; i < fcfamily->n_faces; i++) + { + PangoFontFace *face = PANGO_FONT_FACE (fcfamily->faces[i]); + + if (strcmp (name, pango_font_face_get_face_name (face)) == 0) + return face; + } + + return NULL; +} + static const char * pango_fc_family_get_name (PangoFontFamily *family) { @@ -2766,6 +2792,7 @@ pango_fc_family_class_init (PangoFcFamilyClass *class) object_class->finalize = pango_fc_family_finalize; class->list_faces = pango_fc_family_list_faces; + class->get_face = pango_fc_family_get_face; class->get_name = pango_fc_family_get_name; class->is_monospace = pango_fc_family_is_monospace; class->is_variable = pango_fc_family_is_variable; -- cgit v1.2.1 From 40a805478dfa8988315fd8b7f8515af65c3f90c7 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Tue, 13 Aug 2019 22:59:46 -0400 Subject: Add pango_font_face_get_family --- docs/pango-sections.txt | 1 + pango/fonts.c | 19 +++++++++++++++++++ pango/pango-font.h | 5 ++++- pango/pangocoretext-fontmap.c | 9 +++++++++ pango/pangofc-fontmap.c | 9 +++++++++ pango/pangowin32-fontmap.c | 15 +++++++++++++-- pango/pangowin32-private.h | 1 + 7 files changed, 56 insertions(+), 3 deletions(-) diff --git a/docs/pango-sections.txt b/docs/pango-sections.txt index cb165610..a409f70c 100644 --- a/docs/pango-sections.txt +++ b/docs/pango-sections.txt @@ -271,6 +271,7 @@ pango_font_face_get_face_name pango_font_face_list_sizes pango_font_face_describe pango_font_face_is_synthesized +pango_font_face_get_family PangoFontMap PangoFontMapClass diff --git a/pango/fonts.c b/pango/fonts.c index eaff2378..5c685f77 100644 --- a/pango/fonts.c +++ b/pango/fonts.c @@ -2431,6 +2431,25 @@ pango_font_face_list_sizes (PangoFontFace *face, } } +/** + * pango_font_face_get_family: + * @face: a #PangoFontFace + * + * Gets the #PangoFontFamily that @face + * belongs to. + * + * Returns: (transfer none): the #PangoFontFamily + * + * Since: 1.46 + */ +PangoFontFamily * +pango_font_face_get_family (PangoFontFace *face) +{ + g_return_val_if_fail (PANGO_IS_FONT_FACE (face), NULL); + + return PANGO_FONT_FACE_GET_CLASS (face)->get_family (face); +} + /** * pango_font_has_char: * @font: a #PangoFont diff --git a/pango/pango-font.h b/pango/pango-font.h index d84847a5..a456a75c 100644 --- a/pango/pango-font.h +++ b/pango/pango-font.h @@ -514,6 +514,7 @@ struct _PangoFontFaceClass int **sizes, int *n_sizes); gboolean (*is_synthesized) (PangoFontFace *face); + PangoFontFamily * (*get_family) (PangoFontFace *face); /*< private >*/ @@ -538,6 +539,9 @@ void pango_font_face_list_sizes (PangoFontFace *face, PANGO_AVAILABLE_IN_1_18 gboolean pango_font_face_is_synthesized (PangoFontFace *face) G_GNUC_PURE; +PANGO_AVAILABLE_IN_1_46 +PangoFontFamily * pango_font_face_get_family (PangoFontFace *face); + /* * PangoFont @@ -654,7 +658,6 @@ void pango_font_get_features (PangoFont *font, PANGO_AVAILABLE_IN_1_44 hb_font_t * pango_font_get_hb_font (PangoFont *font); - /** * PANGO_GLYPH_EMPTY: * diff --git a/pango/pangocoretext-fontmap.c b/pango/pangocoretext-fontmap.c index 038287a0..b3d9d71c 100644 --- a/pango/pangocoretext-fontmap.c +++ b/pango/pangocoretext-fontmap.c @@ -559,6 +559,14 @@ pango_core_text_face_is_synthesized (PangoFontFace *face) return cface->synthetic_italic; } +static PangoFontFamily * +pango_core_text_face_get_family (PangoFontFace *face) +{ + PangoCoreTextFace *cface = PANGO_CORE_TEXT_FACE (face); + + return PANGO_FONT_FAMILY (cface->family); +} + static void pango_core_text_face_class_init (PangoCoreTextFaceClass *klass) { @@ -571,6 +579,7 @@ pango_core_text_face_class_init (PangoCoreTextFaceClass *klass) pfclass->get_face_name = pango_core_text_face_get_face_name; pfclass->list_sizes = pango_core_text_face_list_sizes; pfclass->is_synthesized = pango_core_text_face_is_synthesized; + pfclass->get_family = pango_core_text_face_get_family; } /* diff --git a/pango/pangofc-fontmap.c b/pango/pangofc-fontmap.c index aa8012f8..dd066cd3 100644 --- a/pango/pangofc-fontmap.c +++ b/pango/pangofc-fontmap.c @@ -2527,6 +2527,14 @@ pango_fc_face_is_synthesized (PangoFontFace *face) return fcface->fake; } +static PangoFontFamily * +pango_fc_face_get_family (PangoFontFace *face) +{ + PangoFcFace *fcface = PANGO_FC_FACE (face); + + return PANGO_FONT_FAMILY (fcface->family); +} + static void pango_fc_face_finalize (GObject *object) { @@ -2554,6 +2562,7 @@ pango_fc_face_class_init (PangoFcFaceClass *class) class->get_face_name = pango_fc_face_get_face_name; class->list_sizes = pango_fc_face_list_sizes; class->is_synthesized = pango_fc_face_is_synthesized; + class->get_family = pango_fc_face_get_family; } diff --git a/pango/pangowin32-fontmap.c b/pango/pangowin32-fontmap.c index 1c0b70f2..ccdd69bd 100644 --- a/pango/pangowin32-fontmap.c +++ b/pango/pangowin32-fontmap.c @@ -690,6 +690,8 @@ create_standard_family (PangoWin32FontMap *win32fontmap, new_face->cached_fonts = NULL; + new_face->family = new_family; + new_family->faces = g_slist_append (new_family->faces, new_face); p = p->next; @@ -1633,12 +1635,12 @@ pango_win32_insert_font (PangoWin32FontMap *win32fontmap, win32face->cached_fonts = NULL; - win32family = + win32face->family = win32family = pango_win32_get_font_family (win32fontmap, pango_font_description_get_family (win32face->description)); if ((lfp->lfPitchAndFamily & 0xF0) == FF_MODERN) win32family->is_monospace = TRUE; - + win32family->faces = g_slist_append (win32family->faces, win32face); PING (("name=%s, length(faces)=%d", @@ -1711,6 +1713,14 @@ pango_win32_face_is_synthesized (PangoFontFace *face) return win32face->is_synthetic; } +static PangoFontFamily * +pango_win32_face_get_family (PangoFontFace *face) +{ + PangoWin32Face *win32face = PANGO_WIN32_FACE (face); + + return PANGO_FONT_FAMILY (win32face->family); +} + G_DEFINE_TYPE (PangoWin32Face, pango_win32_face, PANGO_TYPE_FONT_FACE) static void @@ -1743,6 +1753,7 @@ pango_win32_face_class_init (PangoFontFaceClass *class) class->get_face_name = pango_win32_face_get_face_name; class->list_sizes = pango_win32_face_list_sizes; class->is_synthesized = pango_win32_face_is_synthesized; + class->get_family = pango_win32_face_get_family; } static void diff --git a/pango/pangowin32-private.h b/pango/pangowin32-private.h index 9d9a0a73..082470e7 100644 --- a/pango/pangowin32-private.h +++ b/pango/pangowin32-private.h @@ -153,6 +153,7 @@ struct _PangoWin32Face { PangoFontFace parent_instance; + gpointer family; LOGFONTW logfontw; PangoFontDescription *description; PangoCoverage *coverage; -- cgit v1.2.1 From a582dbbb60da8aff7574d576cc636799e89c72d8 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Tue, 13 Aug 2019 23:15:00 -0400 Subject: Add pango_font_get_face Since we've run out of slots in PangoFontClass, this is implemented with a vfunc in PangoFontMapClass. --- docs/pango-sections.txt | 1 + pango/fonts.c | 18 ++++++++++++++++++ pango/pango-font.h | 3 +++ pango/pango-fontmap-private.h | 1 - pango/pango-fontmap.c | 1 - pango/pango-fontmap.h | 6 ++---- pango/pangocoretext-fontmap.c | 10 ++++++++++ pango/pangofc-fontmap.c | 24 ++++++++++++++++++++++++ pango/pangowin32-fontmap.c | 11 ++++++++++- 9 files changed, 68 insertions(+), 7 deletions(-) diff --git a/docs/pango-sections.txt b/docs/pango-sections.txt index a409f70c..0726f55e 100644 --- a/docs/pango-sections.txt +++ b/docs/pango-sections.txt @@ -251,6 +251,7 @@ PangoFont pango_font_find_shaper pango_font_describe pango_font_describe_with_absolute_size +pango_font_get_face pango_font_get_coverage pango_font_has_char pango_font_get_glyph_extents diff --git a/pango/fonts.c b/pango/fonts.c index 5c685f77..9e6325b7 100644 --- a/pango/fonts.c +++ b/pango/fonts.c @@ -1880,6 +1880,24 @@ pango_font_get_font_map (PangoFont *font) return NULL; } +/** + * pango_font_get_face: + * @font: a #PangoFont + * + * Gets the #PangoFontFace to which @font belongs. + * + * Returns: (transfer none): the #PangoFontFace + * + * Since: 1.46 + */ +PangoFontFace * +pango_font_get_face (PangoFont *font) +{ + PangoFontMap *map = pango_font_get_font_map (font); + + return PANGO_FONT_MAP_GET_CLASS (map)->get_face (map,font); +} + /** * pango_font_get_hb_font: (skip) * @font: a #PangoFont diff --git a/pango/pango-font.h b/pango/pango-font.h index a456a75c..ba1ea3ae 100644 --- a/pango/pango-font.h +++ b/pango/pango-font.h @@ -647,6 +647,9 @@ void pango_font_get_glyph_extents (PangoFont *font, PANGO_AVAILABLE_IN_1_10 PangoFontMap *pango_font_get_font_map (PangoFont *font); +PANGO_AVAILABLE_IN_1_46 +PangoFontFace * pango_font_get_face (PangoFont *font); + PANGO_AVAILABLE_IN_1_44 gboolean pango_font_has_char (PangoFont *font, gunichar wc); diff --git a/pango/pango-fontmap-private.h b/pango/pango-fontmap-private.h index 3452fbca..935fd713 100644 --- a/pango/pango-fontmap-private.h +++ b/pango/pango-fontmap-private.h @@ -31,7 +31,6 @@ G_BEGIN_DECLS PANGO_DEPRECATED_IN_1_38 const char *pango_font_map_get_shape_engine_type (PangoFontMap *fontmap); - G_END_DECLS #endif /* __PANGO_FONTMAP_PRIVATE_H__ */ diff --git a/pango/pango-fontmap.c b/pango/pango-fontmap.c index 20dbc3cf..54ac5d0d 100644 --- a/pango/pango-fontmap.c +++ b/pango/pango-fontmap.c @@ -390,4 +390,3 @@ pango_font_map_get_family (PangoFontMap *fontmap, return PANGO_FONT_MAP_GET_CLASS (fontmap)->get_family (fontmap, name); } - diff --git a/pango/pango-fontmap.h b/pango/pango-fontmap.h index 42ffc2ff..f30780ee 100644 --- a/pango/pango-fontmap.h +++ b/pango/pango-fontmap.h @@ -117,10 +117,8 @@ struct _PangoFontMapClass PangoFontFamily * (*get_family) (PangoFontMap *fontmap, const char *name); - /*< private >*/ - - /* Padding for future expansion */ - void (*_pango_reserved1) (void); + PangoFontFace * (*get_face) (PangoFontMap *fontmap, + PangoFont *font); }; PANGO_AVAILABLE_IN_ALL diff --git a/pango/pangocoretext-fontmap.c b/pango/pangocoretext-fontmap.c index b3d9d71c..5a81e388 100644 --- a/pango/pangocoretext-fontmap.c +++ b/pango/pangocoretext-fontmap.c @@ -1511,6 +1511,15 @@ pango_core_text_font_map_init (PangoCoreTextFontMap *ctfontmap) } } +static PangoFontFace * +pango_core_text_font_map_get_face (PangoFontMap *fontmap, + PangoFont *font) +{ + PangoCoreTextFont *cfont = PANGO_CORE_TEXT_FONT (font); + + return PANGO_FONT_FACE (_pango_core_text_font_get_face (cfont)); +} + static void pango_core_text_font_map_class_init (PangoCoreTextFontMapClass *class) { @@ -1525,6 +1534,7 @@ pango_core_text_font_map_class_init (PangoCoreTextFontMapClass *class) fontmap_class->shape_engine_type = PANGO_RENDER_TYPE_CORE_TEXT; fontmap_class->get_serial = pango_core_text_font_map_get_serial; fontmap_class->changed = pango_core_text_font_map_changed; + fontmap_class->get_face = pango_core_text_font_map_get_face; } /* diff --git a/pango/pangofc-fontmap.c b/pango/pangofc-fontmap.c index dd066cd3..03d508dd 100644 --- a/pango/pangofc-fontmap.c +++ b/pango/pangofc-fontmap.c @@ -228,6 +228,9 @@ static PangoFont *pango_fc_font_map_new_font (PangoFcFontMap *fontmap, PangoFcFontsetKey *fontset_key, FcPattern *match); +static PangoFontFace *pango_fc_font_map_get_face (PangoFontMap *fontmap, + PangoFont *font); + static guint pango_fc_font_face_data_hash (PangoFcFontFaceData *key); static gboolean pango_fc_font_face_data_equal (PangoFcFontFaceData *key1, PangoFcFontFaceData *key2); @@ -1193,6 +1196,7 @@ pango_fc_font_map_class_init (PangoFcFontMapClass *class) 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->get_face = pango_fc_font_map_get_face; fontmap_class->shape_engine_type = PANGO_RENDER_TYPE_FC; } @@ -1709,6 +1713,26 @@ pango_fc_font_map_new_font (PangoFcFontMap *fcfontmap, return (PangoFont *)fcfont; } +static PangoFontFace * +pango_fc_font_map_get_face (PangoFontMap *fontmap, + PangoFont *font) +{ + PangoFcFont *fcfont = PANGO_FC_FONT (font); + FcResult res; + const char *s; + PangoFontFamily *family; + + res = FcPatternGetString (fcfont->font_pattern, FC_FAMILY, 0, (FcChar8 **) &s); + g_assert (res == FcResultMatch); + + family = pango_font_map_get_family (fontmap, s); + + res = FcPatternGetString (fcfont->font_pattern, FC_STYLE, 0, (FcChar8 **)(void*)&s); + g_assert (res == FcResultMatch); + + return pango_font_family_get_face (family, s); +} + static void pango_fc_default_substitute (PangoFcFontMap *fontmap, PangoFcFontsetKey *fontsetkey, diff --git a/pango/pangowin32-fontmap.c b/pango/pangowin32-fontmap.c index ccdd69bd..905fdee2 100644 --- a/pango/pangowin32-fontmap.c +++ b/pango/pangowin32-fontmap.c @@ -764,7 +764,6 @@ pango_win32_font_map_fontset_add_fonts (PangoFontMap *fontmap, PangoWin32FontMap *win32fontmap = PANGO_WIN32_FONT_MAP (fontmap); lookup_aliases (win32fontmap->aliases, family, &aliases, &n_aliases); - if (n_aliases) { for (j = 0; j < n_aliases; j++) @@ -784,6 +783,15 @@ pango_win32_font_map_fontset_add_fonts (PangoFontMap *fontmap, } } +static PangoFontFace * +pango_win32_font_map_get_face (PangoFontMap *fontmap, + PangoFont *font) +{ + PangoWin32Font *win32font = PANGO_WIN32_FONT (font); + + return PANGO_FONT_FACE (win32font->win32face); +} + static void _pango_win32_font_map_class_init (PangoWin32FontMapClass *class) { @@ -797,6 +805,7 @@ _pango_win32_font_map_class_init (PangoWin32FontMapClass *class) fontmap_class->load_fontset = pango_win32_font_map_load_fontset; fontmap_class->list_families = pango_win32_font_map_list_families; fontmap_class->shape_engine_type = PANGO_RENDER_TYPE_WIN32; + fontmap_class->get_face = pango_win32_font_map_get_face; pango_win32_get_dc (); } -- cgit v1.2.1