[wxGTK2] Do what we (I) can wrt the win32 centric wxNativeFontInfo::GetFamily
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@35271 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
4a767dd5cd
commit
b67d14bee0
@ -747,8 +747,15 @@ int wxFont::GetFamily() const
|
||||
wxCHECK_MSG( Ok(), 0, wxT("invalid font") );
|
||||
|
||||
#if wxUSE_PANGO
|
||||
return M_FONTDATA->HasNativeFont() ? M_FONTDATA->m_nativeFontInfo.GetFamily()
|
||||
: M_FONTDATA->m_family;
|
||||
int ret = M_FONTDATA->m_family;
|
||||
if (M_FONTDATA->HasNativeFont())
|
||||
// wxNativeFontInfo::GetFamily is expensive, must not call more than once
|
||||
ret = M_FONTDATA->m_nativeFontInfo.GetFamily();
|
||||
|
||||
if (ret == wxFONTFAMILY_DEFAULT)
|
||||
ret = M_FONTDATA->m_family;
|
||||
|
||||
return ret;
|
||||
#else
|
||||
return M_FONTDATA->m_family;
|
||||
#endif
|
||||
|
@ -747,8 +747,15 @@ int wxFont::GetFamily() const
|
||||
wxCHECK_MSG( Ok(), 0, wxT("invalid font") );
|
||||
|
||||
#if wxUSE_PANGO
|
||||
return M_FONTDATA->HasNativeFont() ? M_FONTDATA->m_nativeFontInfo.GetFamily()
|
||||
: M_FONTDATA->m_family;
|
||||
int ret = M_FONTDATA->m_family;
|
||||
if (M_FONTDATA->HasNativeFont())
|
||||
// wxNativeFontInfo::GetFamily is expensive, must not call more than once
|
||||
ret = M_FONTDATA->m_nativeFontInfo.GetFamily();
|
||||
|
||||
if (ret == wxFONTFAMILY_DEFAULT)
|
||||
ret = M_FONTDATA->m_family;
|
||||
|
||||
return ret;
|
||||
#else
|
||||
return M_FONTDATA->m_family;
|
||||
#endif
|
||||
|
@ -138,43 +138,62 @@ wxString wxNativeFontInfo::GetFaceName() const
|
||||
|
||||
wxFontFamily wxNativeFontInfo::GetFamily() const
|
||||
{
|
||||
#ifndef HAVE_PANGO_FONT_FAMILY_IS_MONOSPACE
|
||||
if (g_ascii_strcasecmp( pango_font_description_get_family( description ), "monospace" ) == 0)
|
||||
return wxFONTFAMILY_TELETYPE;
|
||||
#else
|
||||
|
||||
PangoFontFamily **families;
|
||||
PangoFontFamily *family;
|
||||
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)
|
||||
wxFontFamily ret = wxFONTFAMILY_DEFAULT;
|
||||
char *family_text = g_ascii_strdown( pango_font_description_get_family( description ), -1 );
|
||||
// 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"
|
||||
#ifdef HAVE_PANGO_FONT_FAMILY_IS_MONOSPACE
|
||||
else
|
||||
{
|
||||
if (g_ascii_strcasecmp(pango_font_family_get_name( families[i] ), pango_font_description_get_family( description )) == 0 )
|
||||
PangoFontFamily **families;
|
||||
PangoFontFamily *family;
|
||||
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)
|
||||
{
|
||||
family = families[i];
|
||||
break;
|
||||
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);
|
||||
|
||||
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 (pango_font_family_is_monospace( family ))
|
||||
ret = wxFONTFAMILY_TELETYPE; // is deemed a monospace font by pango
|
||||
}
|
||||
|
||||
g_free(families);
|
||||
|
||||
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 (pango_font_family_is_monospace( family ))
|
||||
return wxFONTFAMILY_TELETYPE;
|
||||
#endif // pango_font_family_is_monospace
|
||||
|
||||
return wxFONTFAMILY_SWISS;
|
||||
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"
|
||||
}
|
||||
|
||||
free(family_text);
|
||||
return ret;
|
||||
}
|
||||
|
||||
wxFontEncoding wxNativeFontInfo::GetEncoding() const
|
||||
|
Loading…
Reference in New Issue
Block a user