// Up to now, there are no native implementations of this function: void wxNativeFontInfo::SetFaceName(const wxArrayString &facenames) { for (size_t i=0; i < facenames.GetCount(); i++) { if (wxFontEnumerator::IsValidFacename(facenames[i])) { SetFaceName(facenames[i]); return; } } // set the first valid facename we can find on this system wxString validfacename = wxFontEnumerator::GetFacenames().Item(0); wxLogTrace(wxT("font"), wxT("Falling back to '%s'"), validfacename.c_str()); SetFaceName(validfacename); }
void wxNativeFontInfo::SetFamily(wxFontFamily family) { wxArrayString facename; // the list of fonts associated with a family was partially // taken from http://www.codestyle.org/css/font-family switch ( family ) { case wxFONTFAMILY_SCRIPT: // corresponds to the cursive font family in the page linked above facename.Add(wxS("URW Chancery L")); facename.Add(wxS("Comic Sans MS")); break; case wxFONTFAMILY_DECORATIVE: // corresponds to the fantasy font family in the page linked above facename.Add(wxS("Impact")); break; case wxFONTFAMILY_ROMAN: // corresponds to the serif font family in the page linked above facename.Add(wxS("Century Schoolbook L")); facename.Add(wxS("URW Bookman L")); facename.Add(wxS("URW Palladio L")); facename.Add(wxS("DejaVu Serif")); facename.Add(wxS("FreeSerif")); facename.Add(wxS("Times New Roman")); facename.Add(wxS("Times")); break; case wxFONTFAMILY_TELETYPE: case wxFONTFAMILY_MODERN: // corresponds to the monospace font family in the page linked above facename.Add(wxS("DejaVu Sans Mono")); facename.Add(wxS("Nimbus Mono L")); facename.Add(wxS("Bitstream Vera Sans Mono")); facename.Add(wxS("Andale Mono")); facename.Add(wxS("Lucida Sans Typewriter")); facename.Add(wxS("FreeMono")); facename.Add(wxS("Courier New")); facename.Add(wxS("Courier")); break; case wxFONTFAMILY_SWISS: case wxFONTFAMILY_DEFAULT: default: // corresponds to the sans-serif font family in the page linked above facename.Add(wxS("DejaVu Sans")); facename.Add(wxS("URW Gothic L")); facename.Add(wxS("Nimbus Sans L")); facename.Add(wxS("Bitstream Vera Sans")); facename.Add(wxS("Lucida Sans")); facename.Add(wxS("Arial")); facename.Add(wxS("FreeSans")); break; } SetFaceName(facename); }
void Game_Message::FullClear() { SemiClear(); SetFaceName(""); SetFaceIndex(0); /*background = true; position = 2; fixed_position = false; dont_halt = false;*/ }
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 }
bool wxNativeFontInfo::FromString(const wxString& s) { wxString str(s); // Pango font description doesn't have 'underlined' or 'strikethrough' // attributes, so we handle them specially by extracting them from the // string before passing it to Pango. m_underlined = str.StartsWith(wxS("underlined "), &str); m_strikethrough = str.StartsWith(wxS("strikethrough "), &str); if (description) pango_font_description_free( description ); // there is a bug in at least pango <= 1.13 which makes it (or its backends) // segfault for very big point sizes and for negative point sizes. // To workaround that bug for pango <= 1.13 // (see http://bugzilla.gnome.org/show_bug.cgi?id=340229) // we do the check on the size here using same (arbitrary) limits used by // pango > 1.13. Note that the segfault could happen also for pointsize // smaller than this limit !! const size_t pos = str.find_last_of(wxS(" ")); double size; if ( pos != wxString::npos && wxString(str, pos + 1).ToDouble(&size) ) { wxString sizeStr; if ( size < 1 ) sizeStr = wxS("1"); else if ( size >= 1E6 ) sizeStr = wxS("1E6"); if ( !sizeStr.empty() ) { // replace the old size with the adjusted one str = wxString(s, 0, pos) + sizeStr; } } description = pango_font_description_from_string(wxPANGO_CONV(str)); #if wxUSE_FONTENUM // ensure a valid facename is selected if (!wxFontEnumerator::IsValidFacename(GetFaceName())) SetFaceName(wxNORMAL_FONT->GetFaceName()); #endif // wxUSE_FONTENUM return true; }
/// Updates the contents of the FontSetting object /// @param faceName Face name of the font /// @param pointSize Height of the font, in points /// @param weight Weight of the font (see .h for values) /// @param italic Make the font italic style /// @param underline Make the font underline style /// @param strikeOut Make the font strikeout style /// @param color Color to draw the font with /// @return success or failure bool FontSetting::SetFontSetting(const wxChar* faceName, wxInt32 pointSize, wxInt32 weight, bool italic, bool underline, bool strikeOut, wxColor color) { //------Last Checked------// // - Dec 6, 2004 if (!SetFaceName(faceName)) return (false); if (!SetPointSize(pointSize)) return (false); if (!SetWeight(weight)) return (false); SetItalic(italic); SetUnderline(underline); SetStrikeOut(strikeOut); SetColor(color); return (true); }
bool wxNativeFontInfo::FromString(const wxString& s) { if (description) pango_font_description_free( description ); // there is a bug in at least pango <= 1.13 which makes it (or its backends) // segfault for very big point sizes and for negative point sizes. // To workaround that bug for pango <= 1.13 // (see http://bugzilla.gnome.org/show_bug.cgi?id=340229) // we do the check on the size here using same (arbitrary) limits used by // pango > 1.13. Note that the segfault could happen also for pointsize // smaller than this limit !! wxString str(s); const size_t pos = str.find_last_of(_T(" ")); double size; if ( pos != wxString::npos && wxString(str, pos + 1).ToDouble(&size) ) { wxString sizeStr; if ( size < 1 ) sizeStr = _T("1"); else if ( size >= 1E6 ) sizeStr = _T("1E6"); if ( !sizeStr.empty() ) { // replace the old size with the adjusted one str = wxString(s, 0, pos) + sizeStr; } } description = pango_font_description_from_string(wxPANGO_CONV(str)); // ensure a valid facename is selected if (!wxFontEnumerator::IsValidFacename(GetFaceName())) SetFaceName(wxNORMAL_FONT->GetFaceName()); 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("strikethrough") || token == _("strikethrough") ) { SetStrikethrough(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 explicitly // 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 explicitly // 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; }
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; }