summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--meson_options.txt2
-rw-r--r--pango/itemize.c14
-rw-r--r--pango/pangowin32-fontmap.c48
3 files changed, 57 insertions, 7 deletions
diff --git a/meson_options.txt b/meson_options.txt
index 58200e00..3cd1b0bc 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -10,7 +10,7 @@ option('introspection',
option('install-tests',
description : 'Install tests',
type: 'boolean',
- value: 'false')
+ value: false)
option('fontconfig',
description : 'Build with FontConfig support. Passing \'auto\' or \'disabled\' disables fontconfig where it is optional, i.e. on Windows and macOS. Passing \'disabled\' on platforms where fontconfig is required results in error.',
type: 'feature',
diff --git a/pango/itemize.c b/pango/itemize.c
index 01399b7e..728ad7d9 100644
--- a/pango/itemize.c
+++ b/pango/itemize.c
@@ -1164,6 +1164,9 @@ apply_scale_to_item (PangoContext *context,
PangoFontDescription *desc;
double size;
+ if (!item->analysis.font)
+ return;
+
if (is_small_caps)
pango_analysis_set_size_font (&item->analysis, item->analysis.font);
@@ -1294,11 +1297,14 @@ static PangoVariant
get_font_variant (PangoItem *item)
{
PangoFontDescription *desc;
- PangoVariant variant;
+ PangoVariant variant = PANGO_VARIANT_NORMAL;
- desc = pango_font_describe (item->analysis.font);
- variant = pango_font_description_get_variant (desc);
- pango_font_description_free (desc);
+ if (item->analysis.font)
+ {
+ desc = pango_font_describe (item->analysis.font);
+ variant = pango_font_description_get_variant (desc);
+ pango_font_description_free (desc);
+ }
return variant;
}
diff --git a/pango/pangowin32-fontmap.c b/pango/pangowin32-fontmap.c
index 43cffc37..c5a590dd 100644
--- a/pango/pangowin32-fontmap.c
+++ b/pango/pangowin32-fontmap.c
@@ -83,6 +83,9 @@ static void pango_win32_font_map_finalize (GObject
static PangoFont *pango_win32_font_map_load_font (PangoFontMap *fontmap,
PangoContext *context,
const PangoFontDescription *description);
+static PangoFont *pango_win32_font_map_real_load_font (PangoFontMap *fontmap,
+ PangoContext *context,
+ const PangoFontDescription *description);
static PangoFontset *pango_win32_font_map_load_fontset (PangoFontMap *fontmap,
PangoContext *context,
const PangoFontDescription *desc,
@@ -729,8 +732,9 @@ _pango_win32_font_map_init (PangoWin32FontMap *win32fontmap)
g_hash_table_foreach (win32fontmap->families, synthesize_foreach, win32fontmap);
- /* Create synthetic "Sans", "Serif", "Monospace", "Cursive", "Fantasy" and "System-ui" families */
+ /* Create synthetic "Sans", "Sans-Serif", "Serif", "Monospace", "Cursive", "Fantasy" and "System-ui" families */
create_standard_family (win32fontmap, "Sans");
+ create_standard_family (win32fontmap, "Sans-Serif");
create_standard_family (win32fontmap, "Serif");
create_standard_family (win32fontmap, "Monospace");
create_standard_family (win32fontmap, "Cursive");
@@ -794,7 +798,7 @@ _pango_win32_font_map_class_init (PangoWin32FontMapClass *class)
class->find_font = pango_win32_font_map_real_find_font;
object_class->finalize = pango_win32_font_map_finalize;
- fontmap_class->load_font = pango_win32_font_map_load_font;
+ fontmap_class->load_font = pango_win32_font_map_real_load_font;
/* we now need a load_fontset implementation for the Win32 backend */
fontmap_class->load_fontset = pango_win32_font_map_load_fontset;
fontmap_class->list_families = pango_win32_font_map_list_families;
@@ -1011,6 +1015,46 @@ pango_win32_get_font_family (PangoWin32FontMap *win32fontmap,
return win32family;
}
+static gboolean
+get_first_font (PangoFontset *fontset G_GNUC_UNUSED,
+ PangoFont *font,
+ gpointer data)
+{
+ *(PangoFont **)data = font;
+
+ return TRUE;
+}
+
+static PangoFont *
+pango_win32_font_map_real_load_font (PangoFontMap *fontmap,
+ PangoContext *context,
+ const PangoFontDescription *description)
+{
+ PangoLanguage *language;
+ PangoFontset *fontset;
+ PangoFont *font = NULL;
+
+ if (context)
+ language = pango_context_get_language (context);
+ else
+ language = NULL;
+
+ fontset = pango_font_map_load_fontset (fontmap, context,
+ description, language);
+
+ if (fontset)
+ {
+ pango_fontset_foreach (fontset, get_first_font, &font);
+
+ if (font)
+ g_object_ref (font);
+
+ g_object_unref (fontset);
+ }
+
+ return font;
+}
+
static PangoFont *
pango_win32_font_map_load_font (PangoFontMap *fontmap,
PangoContext *context,