void wxFontRefData::Init(int pointSize, wxFontFamily family, wxFontStyle style, wxFontWeight weight, bool underlined, bool strikethrough, const wxString& faceName, wxFontEncoding WXUNUSED(encoding)) { if (family == wxFONTFAMILY_DEFAULT) family = wxFONTFAMILY_SWISS; // Create native font info m_nativeFontInfo.description = pango_font_description_new(); // And set its values if (!faceName.empty()) { pango_font_description_set_family( m_nativeFontInfo.description, wxGTK_CONV_SYS(faceName) ); } else { SetFamily(family); } SetStyle( style == wxDEFAULT ? wxFONTSTYLE_NORMAL : style ); SetPointSize( (pointSize == wxDEFAULT || pointSize == -1) ? wxDEFAULT_FONT_SIZE : pointSize ); SetWeight( weight == wxDEFAULT ? wxFONTWEIGHT_NORMAL : weight ); SetUnderlined( underlined ); SetStrikethrough( strikethrough ); }
void wxFontBase::DoSetNativeFontInfo(const wxNativeFontInfo& info) { #ifdef wxNO_NATIVE_FONTINFO SetPointSize(info.pointSize); SetFamily(info.family); SetStyle(info.style); SetWeight(info.weight); SetUnderlined(info.underlined); SetFaceName(info.faceName); SetEncoding(info.encoding); #else (void)info; #endif }
void wxFontRefData::Init(int pointSize, wxFontFamily family, wxFontStyle style, wxFontWeight weight, bool underlined, bool strikethrough, const wxString& faceName, wxFontEncoding WXUNUSED(encoding)) { // Old code could wrongly specify wxDEFAULT instead of -1 or wxNORMAL or, // preferably, wxFONTSTYLE_NORMAL or wxFONTWEIGHT_NORMAL, continue handling // this for compatibility. if ( pointSize == wxDEFAULT ) pointSize = -1; if ( static_cast<int>(style) == wxDEFAULT ) style = wxFONTSTYLE_NORMAL; if ( static_cast<int>(weight) == wxDEFAULT ) weight = wxFONTWEIGHT_NORMAL; if (family == wxFONTFAMILY_DEFAULT) family = wxFONTFAMILY_SWISS; // Create native font info m_nativeFontInfo.description = pango_font_description_new(); // And set its values if (!faceName.empty()) { pango_font_description_set_family( m_nativeFontInfo.description, wxGTK_CONV_SYS(faceName) ); } else { SetFamily(family); } SetStyle( style ); SetPointSize( pointSize == -1 ? wxDEFAULT_FONT_SIZE : pointSize ); SetWeight( weight ); SetUnderlined( underlined ); SetStrikethrough( strikethrough ); }
bool wxNativeFontInfo::FromUserString(const wxString& s) { // reset to the default state Init(); // parse a more or less free form string // // TODO: we should handle at least the quoted facenames wxStringTokenizer tokenizer(s, _T(";, "), wxTOKEN_STRTOK); wxString face; unsigned long size; bool weightfound = false, pointsizefound = false; #if wxUSE_FONTMAP bool encodingfound = false; #endif while ( tokenizer.HasMoreTokens() ) { wxString token = tokenizer.GetNextToken(); // normalize it token.Trim(true).Trim(false).MakeLower(); // look for the known tokens if ( token == _T("underlined") || token == _("underlined") ) { SetUnderlined(true); } else if ( token == _T("light") || token == _("light") ) { SetWeight(wxFONTWEIGHT_LIGHT); weightfound = true; } else if ( token == _T("bold") || token == _("bold") ) { SetWeight(wxFONTWEIGHT_BOLD); weightfound = true; } else if ( token == _T("italic") || token == _("italic") ) { SetStyle(wxFONTSTYLE_ITALIC); } else if ( token.ToULong(&size) ) { SetPointSize(size); pointsizefound = true; } else { #if wxUSE_FONTMAP // try to interpret this as an encoding wxFontEncoding encoding = wxFontMapper::Get()->CharsetToEncoding(token, false); if ( encoding != wxFONTENCODING_DEFAULT && encoding != wxFONTENCODING_SYSTEM ) // returned when the recognition failed { SetEncoding(encoding); encodingfound = true; } else { #endif // wxUSE_FONTMAP // assume it is the face name if ( !face.empty() ) { face += _T(' '); } face += token; // skip the code which resets face below continue; #if wxUSE_FONTMAP } #endif // wxUSE_FONTMAP } // if we had had the facename, we shouldn't continue appending tokens // to it (i.e. "foo bold bar" shouldn't result in the facename "foo // bar") if ( !face.empty() ) { // NB: the check on the facename is implemented in wxFontBase::SetFaceName // and not in wxNativeFontInfo::SetFaceName thus we need to explicitely // call here wxFontEnumerator::IsValidFacename if (!wxFontEnumerator::IsValidFacename(face) || !SetFaceName(face)) SetFaceName(wxNORMAL_FONT->GetFaceName()); face.clear(); } } // we might not have flushed it inside the loop if ( !face.empty() ) { // NB: the check on the facename is implemented in wxFontBase::SetFaceName // and not in wxNativeFontInfo::SetFaceName thus we need to explicitely // call here wxFontEnumerator::IsValidFacename if (!wxFontEnumerator::IsValidFacename(face) || !SetFaceName(face)) SetFaceName(wxNORMAL_FONT->GetFaceName()); } // set point size to default value if size was not given if ( !pointsizefound ) SetPointSize(wxNORMAL_FONT->GetPointSize()); // set font weight to default value if weight was not given if ( !weightfound ) SetWeight(wxFONTWEIGHT_NORMAL); #if wxUSE_FONTMAP // set font encoding to default value if encoding was not given if ( !encodingfound ) SetEncoding(wxFONTENCODING_SYSTEM); #endif // wxUSE_FONTMAP return true; }
bool wxNativeFontInfo::FromUserString(const wxString& s) { // reset to the default state Init(); // ToUserString() will quote the facename if it contains spaces, commas // or semicolons: we must be able to understand that quoted text is // a single token: wxString toparse(s); // parse a more or less free form string wxStringTokenizer tokenizer(toparse, wxT(";, "), wxTOKEN_STRTOK); wxString face; unsigned long size; bool weightfound = false, pointsizefound = false; #if wxUSE_FONTMAP bool encodingfound = false; #endif bool insideQuotes = false; while ( tokenizer.HasMoreTokens() ) { wxString token = tokenizer.GetNextToken(); // normalize it token.Trim(true).Trim(false).MakeLower(); if (insideQuotes) { if (token.StartsWith("'") || token.EndsWith("'")) { insideQuotes = false; // add this last token to the facename: face += " " + token; // normalize facename: face = face.Trim(true).Trim(false); face.Replace("'", ""); continue; } } else { if (token.StartsWith("'")) insideQuotes = true; } // look for the known tokens if ( insideQuotes ) { // only the facename may be quoted: face += " " + token; continue; } if ( token == wxT("underlined") || token == _("underlined") ) { SetUnderlined(true); } else if ( token == wxT("light") || token == _("light") ) { SetWeight(wxFONTWEIGHT_LIGHT); weightfound = true; } else if ( token == wxT("bold") || token == _("bold") ) { SetWeight(wxFONTWEIGHT_BOLD); weightfound = true; } else if ( token == wxT("italic") || token == _("italic") ) { SetStyle(wxFONTSTYLE_ITALIC); } else if ( token.ToULong(&size) ) { SetPointSize(size); pointsizefound = true; } else { #if wxUSE_FONTMAP // try to interpret this as an encoding wxFontEncoding encoding = wxFontMapper::Get()->CharsetToEncoding(token, false); if ( encoding != wxFONTENCODING_DEFAULT && encoding != wxFONTENCODING_SYSTEM ) // returned when the recognition failed { SetEncoding(encoding); encodingfound = true; } else { #endif // wxUSE_FONTMAP // assume it is the face name if ( !face.empty() ) { face += wxT(' '); } face += token; // skip the code which resets face below continue; #if wxUSE_FONTMAP } #endif // wxUSE_FONTMAP } // if we had had the facename, we shouldn't continue appending tokens // to it (i.e. "foo bold bar" shouldn't result in the facename "foo // bar") if ( !face.empty() ) { wxString familyStr; if ( face.EndsWith(" family", &familyStr) ) { // it's not a facename but rather a font family wxFontFamily family; if ( familyStr == "decorative" ) family = wxFONTFAMILY_DECORATIVE; else if ( familyStr == "roman" ) family = wxFONTFAMILY_ROMAN; else if ( familyStr == "script" ) family = wxFONTFAMILY_SCRIPT; else if ( familyStr == "swiss" ) family = wxFONTFAMILY_SWISS; else if ( familyStr == "modern" ) family = wxFONTFAMILY_MODERN; else if ( familyStr == "teletype" ) family = wxFONTFAMILY_TELETYPE; else return false; SetFamily(family); } // NB: the check on the facename is implemented in wxFontBase::SetFaceName // and not in wxNativeFontInfo::SetFaceName thus we need to explicitely // call here wxFontEnumerator::IsValidFacename else if ( #if wxUSE_FONTENUM !wxFontEnumerator::IsValidFacename(face) || #endif // wxUSE_FONTENUM !SetFaceName(face) ) { SetFaceName(wxNORMAL_FONT->GetFaceName()); } face.clear(); } } // we might not have flushed it inside the loop if ( !face.empty() ) { // NB: the check on the facename is implemented in wxFontBase::SetFaceName // and not in wxNativeFontInfo::SetFaceName thus we need to explicitely // call here wxFontEnumerator::IsValidFacename if ( #if wxUSE_FONTENUM !wxFontEnumerator::IsValidFacename(face) || #endif // wxUSE_FONTENUM !SetFaceName(face) ) { SetFaceName(wxNORMAL_FONT->GetFaceName()); } } // set point size to default value if size was not given if ( !pointsizefound ) SetPointSize(wxNORMAL_FONT->GetPointSize()); // set font weight to default value if weight was not given if ( !weightfound ) SetWeight(wxFONTWEIGHT_NORMAL); #if wxUSE_FONTMAP // set font encoding to default value if encoding was not given if ( !encodingfound ) SetEncoding(wxFONTENCODING_SYSTEM); #endif // wxUSE_FONTMAP return true; }