X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/cb362386011324baf3949aa9bbd7c545e5ebed69..7b9da2077d0975db6c965a85c91d5aca671ab5e3:/src/gtk/font.cpp diff --git a/src/gtk/font.cpp b/src/gtk/font.cpp index 97c51a8968..c2e51daba6 100644 --- a/src/gtk/font.cpp +++ b/src/gtk/font.cpp @@ -20,6 +20,8 @@ #endif #include "wx/font.h" +#include "wx/fontutil.h" +#include "wx/cmndata.h" #include "wx/utils.h" #include "wx/log.h" #include "wx/gdicmn.h" @@ -122,7 +124,7 @@ wxFontRefData::wxFontRefData(int size, int family, int style, int weight, bool underlined, const wxString& faceName, wxFontEncoding encoding ) : m_scaled_xfonts(wxKEY_INTEGER) { - Init(size, family, style, weight, + Init(size, family, style, weight, underlined, faceName, encoding); } @@ -150,18 +152,16 @@ void wxFont::Init() wxTheFontList->Append( this ); } -wxFont::wxFont( GdkFont *WXUNUSED(font), char *xFontName ) +wxFont::wxFont( const wxString& fontname, const wxFontData& fontdata ) { - if (!xFontName) - return; - Init(); + wxCHECK_RET( !!fontname, _T("invalid font spec") ); + m_refData = new wxFontRefData(); wxString tmp; - wxString fontname( xFontName ); wxStringTokenizer tn( fontname, wxT("-") ); tn.GetNextToken(); // foundry @@ -177,7 +177,7 @@ wxFont::wxFont( GdkFont *WXUNUSED(font), char *xFontName ) if (tmp == wxT("LIGHT")) M_FONTDATA->m_weight = wxLIGHT; if (tmp == wxT("THIN")) M_FONTDATA->m_weight = wxLIGHT; - + tmp = tn.GetNextToken().MakeUpper(); // slant if (tmp == wxT("I")) M_FONTDATA->m_style = wxITALIC; if (tmp == wxT("O")) M_FONTDATA->m_style = wxITALIC; @@ -187,7 +187,7 @@ wxFont::wxFont( GdkFont *WXUNUSED(font), char *xFontName ) tn.GetNextToken(); // pixel size tmp = tn.GetNextToken(); // pointsize - int num = wxStrtol (tmp.c_str(), (wxChar **) NULL, 10); + long num = wxStrtol (tmp.c_str(), (wxChar **) NULL, 10); M_FONTDATA->m_pointSize = num / 10; tn.GetNextToken(); // x-res @@ -211,32 +211,36 @@ wxFont::wxFont( GdkFont *WXUNUSED(font), char *xFontName ) tn.GetNextToken(); // avg width // deal with font encoding - wxString registry = tn.GetNextToken().MakeUpper(), - encoding = tn.GetNextToken().MakeUpper(); - - if ( registry == _T("ISO8859") ) + M_FONTDATA->m_encoding = fontdata.GetEncoding(); + if ( M_FONTDATA->m_encoding == wxFONTENCODING_SYSTEM ) { - int cp; - if ( wxSscanf(encoding, wxT("%d"), &cp) == 1 ) + wxString registry = tn.GetNextToken().MakeUpper(), + encoding = tn.GetNextToken().MakeUpper(); + + if ( registry == _T("ISO8859") ) { - M_FONTDATA->m_encoding = - (wxFontEncoding)(wxFONTENCODING_ISO8859_1 + cp - 1); + int cp; + if ( wxSscanf(encoding, wxT("%d"), &cp) == 1 ) + { + M_FONTDATA->m_encoding = + (wxFontEncoding)(wxFONTENCODING_ISO8859_1 + cp - 1); + } } - } - else if ( registry == _T("MICROSOFT") ) - { - int cp; - if ( wxSscanf(encoding, wxT("cp125%d"), &cp) == 1 ) + else if ( registry == _T("MICROSOFT") ) { - M_FONTDATA->m_encoding = - (wxFontEncoding)(wxFONTENCODING_CP1250 + cp); + int cp; + if ( wxSscanf(encoding, wxT("cp125%d"), &cp) == 1 ) + { + M_FONTDATA->m_encoding = + (wxFontEncoding)(wxFONTENCODING_CP1250 + cp); + } } + else if ( registry == _T("KOI8") ) + { + M_FONTDATA->m_encoding = wxFONTENCODING_KOI8; + } + //else: unknown encoding - may be give a warning here? } - else if ( registry == _T("KOI8") ) - { - M_FONTDATA->m_encoding = wxFONTENCODING_KOI8; - } - //else: unknown encoding - may be give a warning here? } bool wxFont::Create( int pointSize, @@ -394,7 +398,7 @@ GdkFont *wxFont::GetInternalFont( float scale ) const } long int_scale = long(scale * 100.0 + 0.5); /* key for fontlist */ - int point_scale = (M_FONTDATA->m_pointSize * 10 * int_scale) / 100; + int point_scale = (int)((M_FONTDATA->m_pointSize * 10 * int_scale) / 100); GdkFont *font = (GdkFont *) NULL; wxNode *node = M_FONTDATA->m_scaled_xfonts.Find(int_scale); @@ -429,10 +433,9 @@ GdkFont *wxFont::GetInternalFont( float scale ) const M_FONTDATA->m_scaled_xfonts.Append( int_scale, (wxObject*)font ); } - if (!font) - { - wxLogError(wxT("could not load any font")); - } + // it's quite useless to make it a wxCHECK because we're going to crash + // anyhow... + wxASSERT_MSG( font, wxT("could not load any font?") ); return font; }