wxFontFamily wxNativeFontInfo::GetFamily() const { wxFontFamily ret = wxFONTFAMILY_DEFAULT; // note: not passing -1 as the 2nd parameter to g_ascii_strdown to work // around a bug in the 64-bit glib shipped with solaris 10, -1 causes it // to try to allocate 2^32 bytes. const char *family_name = pango_font_description_get_family( description ); if ( !family_name ) return ret; wxGtkString family_text(g_ascii_strdown(family_name, strlen(family_name))); // Check for some common fonts, to salvage what we can from the current win32 centric wxFont API: if (strncmp( family_text, "monospace", 9 ) == 0) ret = wxFONTFAMILY_TELETYPE; // begins with "Monospace" else if (strncmp( family_text, "courier", 7 ) == 0) ret = wxFONTFAMILY_TELETYPE; // begins with "Courier" #if defined(__WXGTK24__) || defined(HAVE_PANGO_FONT_FAMILY_IS_MONOSPACE) else #ifdef __WXGTK24__ if (!gtk_check_version(2,4,0)) #endif { PangoFontFamily **families; PangoFontFamily *family = NULL; int n_families; pango_context_list_families( #ifdef __WXGTK20__ gtk_widget_get_pango_context( wxGetRootWindow() ), #else wxTheApp->GetPangoContext(), #endif &families, &n_families); for (int i = 0;i < n_families;++i) { if (g_ascii_strcasecmp(pango_font_family_get_name( families[i] ), pango_font_description_get_family( description )) == 0 ) { family = families[i]; break; } } g_free(families); // Some gtk+ systems might query for a non-existing font from wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT) // on initialization, don't assert until wxSystemSettings::GetFont is checked for this - MR // wxASSERT_MSG( family, wxT("wxNativeFontInfo::GetFamily() - No appropriate PangoFontFamily found for ::description") ); //BCI: Cache the wxFontFamily inside the class. Validate cache with //BCI: g_ascii_strcasecmp(pango_font_description_get_family(description), pango_font_family_get_name(family)) == 0 if (family != NULL && pango_font_family_is_monospace( family )) ret = wxFONTFAMILY_TELETYPE; // is deemed a monospace font by pango } #endif // gtk24 || HAVE_PANGO_FONT_FAMILY_IS_MONOSPACE if (ret == wxFONTFAMILY_DEFAULT) { if (strstr( family_text, "sans" ) != NULL) // checked before serif, so that "* Sans Serif" fonts are detected correctly ret = wxFONTFAMILY_SWISS; // contains "Sans" else if (strstr( family_text, "serif" ) != NULL) ret = wxFONTFAMILY_ROMAN; // contains "Serif" else if (strncmp( family_text, "times", 5 ) == 0) ret = wxFONTFAMILY_ROMAN; // begins with "Times" else if (strncmp( family_text, "old", 3 ) == 0) ret = wxFONTFAMILY_DECORATIVE; // Begins with "Old" - "Old English", "Old Town" } return ret; }
wxFontFamily wxNativeFontInfo::GetFamily() const { wxFontFamily ret = wxFONTFAMILY_UNKNOWN; const char *family_name = pango_font_description_get_family( description ); // note: not passing -1 as the 2nd parameter to g_ascii_strdown to work // around a bug in the 64-bit glib shipped with solaris 10, -1 causes it // to try to allocate 2^32 bytes. if ( !family_name ) return ret; wxGtkString family_text(g_ascii_strdown(family_name, strlen(family_name))); // Check for some common fonts, to salvage what we can from the current // win32 centric wxFont API: if (wxStrnicmp( family_text, "monospace", 9 ) == 0) ret = wxFONTFAMILY_TELETYPE; // begins with "Monospace" else if (wxStrnicmp( family_text, "courier", 7 ) == 0) ret = wxFONTFAMILY_TELETYPE; // begins with "Courier" #if defined(__WXGTK20__) || defined(HAVE_PANGO_FONT_FAMILY_IS_MONOSPACE) else { PangoFontFamily **families; PangoFontFamily *family = NULL; int n_families; PangoContext* context = wxGetPangoContext(); pango_context_list_families(context, &families, &n_families); #if defined(__INTEL_COMPILER) && 1 /* VDM auto patch */ # pragma ivdep # pragma swp # pragma unroll # pragma prefetch # if 0 # pragma simd noassert # endif #endif /* VDM auto patch */ for (int i = 0; i < n_families; ++i) { if (g_ascii_strcasecmp(pango_font_family_get_name( families[i] ), pango_font_description_get_family( description )) == 0 ) { family = families[i]; break; } } g_free(families); g_object_unref(context); // Some gtk+ systems might query for a non-existing font from // wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT) on initialization, // don't assert until wxSystemSettings::GetFont is checked for this - MR // wxASSERT_MSG( family, "No appropriate PangoFontFamily found for ::description" ); if (family != NULL && pango_font_family_is_monospace( family )) ret = wxFONTFAMILY_TELETYPE; // is deemed a monospace font by pango } #endif // GTK+ 2 || HAVE_PANGO_FONT_FAMILY_IS_MONOSPACE if (ret == wxFONTFAMILY_UNKNOWN) { if (strstr( family_text, "sans" ) != NULL || strstr( family_text, "Sans" ) != NULL) // checked before serif, so that "* Sans Serif" fonts are detected correctly ret = wxFONTFAMILY_SWISS; // contains "Sans" else if (strstr( family_text, "serif" ) != NULL || strstr( family_text, "Serif" ) != NULL) ret = wxFONTFAMILY_ROMAN; // contains "Serif" else if (wxStrnicmp( family_text, "times", 5 ) == 0) ret = wxFONTFAMILY_ROMAN; // begins with "Times" else if (wxStrnicmp( family_text, "old", 3 ) == 0) ret = wxFONTFAMILY_DECORATIVE; // begins with "Old" - "Old English", "Old Town" } return ret; }