From 033ad1d732c21ff576986805ca475d1cf83bae5a Mon Sep 17 00:00:00 2001 From: ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com> Date: Tue, 6 Jun 2023 16:55:05 +0200 Subject: Fix "Fl::get_font_name() with Pango is inconsistent"-cont'd (#732) --- src/drivers/Cairo/Fl_Cairo_Graphics_Driver.cxx | 7 +++++-- src/drivers/Xlib/Fl_Xlib_Graphics_Driver_font_xft.cxx | 7 +++++-- 2 files changed, 10 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/drivers/Cairo/Fl_Cairo_Graphics_Driver.cxx b/src/drivers/Cairo/Fl_Cairo_Graphics_Driver.cxx index c9e2c37f8..4a2e09159 100644 --- a/src/drivers/Cairo/Fl_Cairo_Graphics_Driver.cxx +++ b/src/drivers/Cairo/Fl_Cairo_Graphics_Driver.cxx @@ -1092,10 +1092,13 @@ Fl_Font Fl_Cairo_Graphics_Driver::set_fonts(const char* /*pattern_name*/) pango_font_family_list_faces(families[fam], &faces, &n_faces); for (int j = 0; j < n_faces; j++) { const char *p = pango_font_face_get_face_name(faces[j]); + // Remove " Regular" suffix from font names + if (!strcasecmp(p, "regular")) p = NULL; // build the font's FLTK name - int lfont = lfam + strlen(p) + 2; + int lfont = lfam + (p ? strlen(p) + 2 : 1); char *q = new char[lfont]; - snprintf(q, lfont, "%s %s", fam_name, p); + if (p) snprintf(q, lfont, "%s %s", fam_name, p); + else strcpy(q, fam_name); Fl::set_font((Fl_Font)(count++ + FL_FREE_FONT), q); } /*g_*/free(faces); // glib source code shows that g_free is equivalent to free diff --git a/src/drivers/Xlib/Fl_Xlib_Graphics_Driver_font_xft.cxx b/src/drivers/Xlib/Fl_Xlib_Graphics_Driver_font_xft.cxx index 06a8b9bae..959711b63 100644 --- a/src/drivers/Xlib/Fl_Xlib_Graphics_Driver_font_xft.cxx +++ b/src/drivers/Xlib/Fl_Xlib_Graphics_Driver_font_xft.cxx @@ -1412,10 +1412,13 @@ Fl_Font Fl_Xlib_Graphics_Driver::set_fonts(const char* pattern_name) pango_font_family_list_faces(families[fam], &faces, &n_faces); for (int j = 0; j < n_faces; j++) { const char *p = pango_font_face_get_face_name(faces[j]); + // Remove " Regular" suffix from font names + if (!strcasecmp(p, "regular")) p = NULL; // build the font's FLTK name - int lfont = lfam + strlen(p) + 2; + int lfont = lfam + (p ? strlen(p) + 2 : 1); char *q = new char[lfont]; - snprintf(q, lfont, "%s %s", fam_name, p); + if (p) snprintf(q, lfont, "%s %s", fam_name, p); + else strcpy(q, fam_name); Fl::set_font((Fl_Font)(count++ + FL_FREE_FONT), q); } /*g_*/free(faces); // glib source code shows that g_free is equivalent to free -- cgit v1.2.3