int Font::FindFaceNameIndex(const String& name) { if(name == "STDFONT") return 0; for(int i = 1; i < GetFaceCount(); i++) if(GetFaceName(i) == name) return i; String n = Filter(name, FontFilter); for(int i = 1; i < GetFaceCount(); i++) if(Filter(GetFaceName(i), FontFilter) == n) return i; if(n == "serif") return SERIF; if(n == "sansserif") return SANSSERIF; if(n == "monospace") return MONOSPACE; if(n == "stdfont") return STDFONT; return 0; }
void CubemapGenerator::SaveCubemapXML() { SharedPtr<XMLFile> xmlFile(new XMLFile(context_)); XMLElement rootElem = xmlFile->CreateRoot("cubemap"); String prefix = resourcePath_ + namePrefix_ + "_"; String name = prefix + GetFaceName(FACE_POSITIVE_X) + ".png"; rootElem.CreateChild("face").SetAttribute("name", name); name = prefix + GetFaceName(FACE_NEGATIVE_X) + ".png"; rootElem.CreateChild("face").SetAttribute("name", name); name = prefix + GetFaceName(FACE_POSITIVE_Y) + ".png"; rootElem.CreateChild("face").SetAttribute("name", name); name = prefix + GetFaceName(FACE_NEGATIVE_Y) + ".png"; rootElem.CreateChild("face").SetAttribute("name", name); name = prefix + GetFaceName(FACE_POSITIVE_Z) + ".png"; rootElem.CreateChild("face").SetAttribute("name", name); name = prefix + GetFaceName(FACE_NEGATIVE_Z) + ".png"; rootElem.CreateChild("face").SetAttribute("name", name); String xmlPath = outputPathAbsolute_ + namePrefix_ + ".xml"; SharedPtr<File> file(new File(context_, xmlPath, FILE_WRITE)); xmlFile->Save(*file, " "); file->Close(); ResourceCache* cache = GetSubsystem<ResourceCache>(); TextureCube* texcube = cache->GetResource<TextureCube>(resourcePath_ + namePrefix_ + ".xml"); if (texcube) cache->ReloadResource(texcube); }
const wxNativeFontInfo& GetNativeFontInfo() const { // we need to create the font now to get the corresponding LOGFONT if // it hadn't been done yet AllocIfNeeded(); // ensure that we have a valid face name in our font information: // GetFaceName() will try to retrieve it from our HFONT and save it if // it was successful (void)GetFaceName(); return m_nativeFontInfo; }
void CubemapGenerator::HandleEndFrame(StringHash eventType, VariantMap& eventData) { SharedPtr<Image> image(GetImage(renderImage_)); String path = outputPathAbsolute_; if (namePrefix_.Length()) path += namePrefix_; path.AppendWithFormat("_%s.png", GetFaceName(GetFaceForCycle(updateCycle_)).CString()); image->SavePNG(path); }
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; }
/// Initializes a wxFont object using the FontSetting data /// @param font wxFont object to initialize void FontSetting::GetFont(wxFont& font) const { //------Last Checked------// // - Dec 6, 2004 font.SetPointSize(GetPointSize()); font.SetFamily(wxDEFAULT); font.SetStyle(((IsItalic()) ? wxITALIC : wxNORMAL)); if (m_weight <= weightLight) font.SetWeight(wxLIGHT); else if (m_weight < weightBold) font.SetWeight(wxNORMAL); else font.SetWeight(wxBOLD); font.SetUnderlined(IsUnderline()); font.SetFaceName(GetFaceName()); }
void CFontDialog::GetCharFormat(CHARFORMAT& cf) const { USES_CONVERSION; cf.dwEffects = 0; cf.dwMask = 0; if ((m_cf.Flags & CF_NOSTYLESEL) == 0) { cf.dwMask |= CFM_BOLD | CFM_ITALIC; cf.dwEffects |= (IsBold()) ? CFE_BOLD : 0; cf.dwEffects |= (IsItalic()) ? CFE_ITALIC : 0; } if ((m_cf.Flags & CF_NOSIZESEL) == 0) { cf.dwMask |= CFM_SIZE; //GetSize() returns in tenths of points so mulitply by 2 to get twips cf.yHeight = GetSize()*2; } if ((m_cf.Flags & CF_NOFACESEL) == 0) { cf.dwMask |= CFM_FACE; cf.bPitchAndFamily = m_cf.lpLogFont->lfPitchAndFamily; lstrcpyA(cf.szFaceName, T2A((LPTSTR)(LPCTSTR)GetFaceName())); } if (m_cf.Flags & CF_EFFECTS) { cf.dwMask |= CFM_UNDERLINE | CFM_STRIKEOUT | CFM_COLOR; cf.dwEffects |= (IsUnderline()) ? CFE_UNDERLINE : 0; cf.dwEffects |= (IsStrikeOut()) ? CFE_STRIKEOUT : 0; cf.crTextColor = GetColor(); } if ((m_cf.Flags & CF_NOSCRIPTSEL) == 0) { cf.bCharSet = m_cf.lpLogFont->lfCharSet; cf.dwMask |= CFM_CHARSET; } cf.yOffset = 0; }
bool wxFontBase::operator==(const wxFont& font) const { // either it is the same font, i.e. they share the same common data or they // have different ref datas but still describe the same font return IsSameAs(font) || ( IsOk() == font.IsOk() && GetPointSize() == font.GetPointSize() && // in wxGTK1 GetPixelSize() calls GetInternalFont() which uses // operator==() resulting in infinite recursion so we can't use it // in that port #if !defined(__WXGTK__) || defined(__WXGTK20__) GetPixelSize() == font.GetPixelSize() && #endif GetFamily() == font.GetFamily() && GetStyle() == font.GetStyle() && GetWeight() == font.GetWeight() && GetUnderlined() == font.GetUnderlined() && GetFaceName().IsSameAs(font.GetFaceName(), false) && GetEncoding() == font.GetEncoding() ); }
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; }
wxString wxNativeFontInfo::ToUserString() const { wxString desc; // first put the adjectives, if any - this is English-centric, of course, // but what else can we do? if ( GetUnderlined() ) { desc << _("underlined"); } if ( GetStrikethrough() ) { desc << _("strikethrough"); } switch ( GetWeight() ) { default: wxFAIL_MSG( wxT("unknown font weight") ); // fall through case wxFONTWEIGHT_NORMAL: break; case wxFONTWEIGHT_LIGHT: desc << _(" light"); break; case wxFONTWEIGHT_BOLD: desc << _(" bold"); break; } switch ( GetStyle() ) { default: wxFAIL_MSG( wxT("unknown font style") ); // fall through case wxFONTSTYLE_NORMAL: break; // we don't distinguish between the two for now anyhow... case wxFONTSTYLE_ITALIC: case wxFONTSTYLE_SLANT: desc << _(" italic"); break; } wxString face = GetFaceName(); if ( !face.empty() ) { if (face.Contains(' ') || face.Contains(';') || face.Contains(',')) { face.Replace("'", ""); // eventually remove quote characters: most systems do not // allow them in a facename anyway so this usually does nothing // make it possible for FromUserString() function to understand // that the different words which compose this facename are // not different adjectives or other data but rather all parts // of the facename desc << wxT(" '") << face << _("'"); } else desc << wxT(' ') << face; } else // no face name specified { // use the family wxString familyStr; switch ( GetFamily() ) { case wxFONTFAMILY_DECORATIVE: familyStr = "decorative"; break; case wxFONTFAMILY_ROMAN: familyStr = "roman"; break; case wxFONTFAMILY_SCRIPT: familyStr = "script"; break; case wxFONTFAMILY_SWISS: familyStr = "swiss"; break; case wxFONTFAMILY_MODERN: familyStr = "modern"; break; case wxFONTFAMILY_TELETYPE: familyStr = "teletype"; break; case wxFONTFAMILY_DEFAULT: case wxFONTFAMILY_UNKNOWN: break; default: wxFAIL_MSG( "unknown font family" ); } if ( !familyStr.empty() ) desc << " '" << familyStr << " family'"; } int size = GetPointSize(); if ( size != wxNORMAL_FONT->GetPointSize() ) { desc << wxT(' ') << size; } #if wxUSE_FONTMAP wxFontEncoding enc = GetEncoding(); if ( enc != wxFONTENCODING_DEFAULT && enc != wxFONTENCODING_SYSTEM ) { desc << wxT(' ') << wxFontMapper::GetEncodingName(enc); } #endif // wxUSE_FONTMAP return desc.Strip(wxString::both).MakeLower(); }
wxString wxNativeFontInfo::ToUserString() const { wxString desc; // first put the adjectives, if any - this is English-centric, of course, // but what else can we do? if ( GetUnderlined() ) { desc << _("underlined"); } switch ( GetWeight() ) { default: wxFAIL_MSG( _T("unknown font weight") ); // fall through case wxFONTWEIGHT_NORMAL: break; case wxFONTWEIGHT_LIGHT: desc << _(" light"); break; case wxFONTWEIGHT_BOLD: desc << _(" bold"); break; } switch ( GetStyle() ) { default: wxFAIL_MSG( _T("unknown font style") ); // fall through case wxFONTSTYLE_NORMAL: break; // we don't distinguish between the two for now anyhow... case wxFONTSTYLE_ITALIC: case wxFONTSTYLE_SLANT: desc << _(" italic"); break; } wxString face = GetFaceName(); if ( !face.empty() ) { desc << _T(' ') << face; } int size = GetPointSize(); if ( size != wxNORMAL_FONT->GetPointSize() ) { desc << _T(' ') << size; } #if wxUSE_FONTMAP wxFontEncoding enc = GetEncoding(); if ( enc != wxFONTENCODING_DEFAULT && enc != wxFONTENCODING_SYSTEM ) { desc << _T(' ') << wxFontMapper::GetEncodingName(enc); } #endif // wxUSE_FONTMAP return desc.Strip(wxString::both).MakeLower(); }