From da00a6f31770b6f3eced6b87c49d89ec33c1e1ab Mon Sep 17 00:00:00 2001 From: YAMAMOTO Mitsuharu Date: Sun, 6 Dec 2020 14:21:35 +0900 Subject: [PATCH] Fix Xaw widget text disappearing when built with cairo (bug#43418) * lwlib/lwlib-utils.c (crxft_font_open_name): Use FcFontMatch to get a pattern to pass to cairo_ft_font_face_create_for_pattern. --- lwlib/lwlib-utils.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/lwlib/lwlib-utils.c b/lwlib/lwlib-utils.c index f15cb603a80..2b3aa55c3e6 100644 --- a/lwlib/lwlib-utils.c +++ b/lwlib/lwlib-utils.c @@ -148,6 +148,7 @@ XftFont * crxft_font_open_name (Display *dpy, int screen, const char *name) { XftFont *pub = NULL; + FcPattern *match = NULL; FcPattern *pattern = FcNameParse ((FcChar8 *) name); if (pattern) { @@ -162,12 +163,18 @@ crxft_font_open_name (Display *dpy, int screen, const char *name) FcPatternAddDouble (pattern, FC_DPI, dpi); } FcDefaultSubstitute (pattern); + FcResult result; + match = FcFontMatch (NULL, pattern, &result); + FcPatternDestroy (pattern); + } + if (match) + { cairo_font_face_t *font_face - = cairo_ft_font_face_create_for_pattern (pattern); + = cairo_ft_font_face_create_for_pattern (match); if (font_face) { double pixel_size; - if ((FcPatternGetDouble (pattern, FC_PIXEL_SIZE, 0, &pixel_size) + if ((FcPatternGetDouble (match, FC_PIXEL_SIZE, 0, &pixel_size) != FcResultMatch) || pixel_size < 1) pixel_size = 10; @@ -177,7 +184,7 @@ crxft_font_open_name (Display *dpy, int screen, const char *name) cairo_matrix_init_scale (&font_matrix, pixel_size, pixel_size); cairo_matrix_init_identity (&ctm); cairo_font_options_t *options = cairo_font_options_create (); - cairo_ft_font_options_substitute (options, pattern); + cairo_ft_font_options_substitute (options, match); pub->scaled_font = cairo_scaled_font_create (font_face, &font_matrix, &ctm, options); cairo_font_face_destroy (font_face); @@ -190,7 +197,7 @@ crxft_font_open_name (Display *dpy, int screen, const char *name) pub->height = lround (extents.height); pub->max_advance_width = lround (extents.max_x_advance); } - FcPatternDestroy (pattern); + FcPatternDestroy (match); } if (pub && pub->height <= 0) { -- 2.39.2