bool FontPlatformData::isFixedPitch() { PangoFontDescription* description = pango_font_describe_with_absolute_size(m_font); PangoFontFamily* family = reinterpret_cast<PangoFontFamily*>(g_hash_table_lookup(m_hashTable, pango_font_description_get_family(description))); pango_font_description_free(description); return pango_font_family_is_monospace(family); }
static gboolean monospace_filter (const PangoFontFamily *family, const PangoFontFace *face, gpointer data) { return pango_font_family_is_monospace ((PangoFontFamily *) family); }
bool wxFontEnumerator::EnumerateFacenames(wxFontEncoding encoding, bool fixedWidthOnly) { if ( encoding != wxFONTENCODING_SYSTEM && encoding != wxFONTENCODING_UTF8 ) { // Pango supports only UTF-8 encoding (and system means any, so we // accept it too) return false; } #if defined(__WXGTK20__) || !defined(HAVE_PANGO_FONT_FAMILY_IS_MONOSPACE) if ( fixedWidthOnly #if defined(__WXGTK24__) && (gtk_check_version(2,4,0) != NULL) #endif ) { OnFacename( wxT("monospace") ); } else // !fixedWidthOnly #endif // __WXGTK20__ || !HAVE_PANGO_FONT_FAMILY_IS_MONOSPACE { PangoFontFamily **families = NULL; gint n_families = 0; pango_context_list_families ( #ifdef __WXGTK20__ gtk_widget_get_pango_context( wxGetRootWindow() ), #else wxTheApp->GetPangoContext(), #endif &families, &n_families ); qsort (families, n_families, sizeof (PangoFontFamily *), wxCompareFamilies); for (int i=0; i<n_families; i++) { #if defined(__WXGTK24__) || defined(HAVE_PANGO_FONT_FAMILY_IS_MONOSPACE) if (!fixedWidthOnly || ( #ifdef __WXGTK24__ !gtk_check_version(2,4,0) && #endif pango_font_family_is_monospace(families[i]) ) ) #endif { const gchar *name = pango_font_family_get_name(families[i]); OnFacename(wxString(name, wxConvUTF8)); } } g_free(families); } return true; }
// Inspects whether a given font family is monospace. If the font is not // available, it cannot make a decision and returns false by default. static bool IsMonospaceFontFamily(const char* family_name) { PangoFontFamily** families = 0; int n_families = 0; bool is_monospace = false; ListFontFamilies(&families, &n_families); ASSERT_HOST(n_families > 0); bool found = false; for (int i = 0; i < n_families; ++i) { if (!strcasecmp(family_name, pango_font_family_get_name(families[i]))) { is_monospace = pango_font_family_is_monospace(families[i]); found = true; break; } } if (!found) { tlog(1, "Could not find monospace property of family %s\n", family_name); } g_free(families); return is_monospace; }
static gboolean utils_font_desc_check_monospace(PangoContext *pc, PangoFontDescription *desc) { PangoFontFamily **families; gint n_families, i; const gchar *font; gboolean ret = TRUE; font = pango_font_description_get_family(desc); pango_context_list_families(pc, &families, &n_families); for (i = 0; i < n_families; i++) { if (utils_str_equal(font, pango_font_family_get_name(families[i]))) { if (!pango_font_family_is_monospace(families[i])) { ret = FALSE; } } } g_free(families); return ret; }
static void notify_font_cb (GtkFontChooser *fontchooser, GParamSpec *pspec, gpointer data) { PangoFontFamily *family; PangoFontFace *face; g_debug ("Changed font name %s", gtk_font_chooser_get_font (fontchooser)); family = gtk_font_chooser_get_font_family (fontchooser); face = gtk_font_chooser_get_font_face (fontchooser); if (family) { g_debug (" Family: %s is-monospace:%s", pango_font_family_get_name (family), pango_font_family_is_monospace (family) ? "true" : "false"); } else g_debug (" No font family!"); if (face) g_debug (" Face description: %s", pango_font_face_get_face_name (face)); else g_debug (" No font face!"); }
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); 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; }
static VALUE rg_monospace_p(VALUE self) { return CBOOL2RVAL(pango_font_family_is_monospace(_SELF(self))); }