wxFont wxSystemSettingsNative::GetFont( wxSystemFont index ) { wxFont font; switch (index) { case wxSYS_OEM_FIXED_FONT: case wxSYS_ANSI_FIXED_FONT: case wxSYS_SYSTEM_FIXED_FONT: font = *wxNORMAL_FONT; break; case wxSYS_ANSI_VAR_FONT: case wxSYS_SYSTEM_FONT: case wxSYS_DEVICE_DEFAULT_FONT: case wxSYS_DEFAULT_GUI_FONT: if (!gs_fontSystem.IsOk()) { wxNativeFontInfo info; #ifdef __WXGTK3__ GtkStyleContext* sc = gtk_widget_get_style_context(ButtonWidget()); gtk_style_context_set_state(sc, GTK_STATE_FLAG_NORMAL); gtk_style_context_get(sc, GTK_STATE_FLAG_NORMAL, GTK_STYLE_PROPERTY_FONT, &info.description, NULL); #else info.description = ButtonStyle()->font_desc; #endif gs_fontSystem = wxFont(info); #if wxUSE_FONTENUM // (try to) heal the default font (on some common systems e.g. Ubuntu // it's "Sans Serif" but the real font is called "Sans"): if (!wxFontEnumerator::IsValidFacename(gs_fontSystem.GetFaceName()) && gs_fontSystem.GetFaceName() == "Sans Serif") { gs_fontSystem.SetFaceName("Sans"); } #endif // wxUSE_FONTENUM #ifndef __WXGTK3__ info.description = NULL; #endif } font = gs_fontSystem; break; default: break; } wxASSERT( font.IsOk() ); return font; }
// Get attributes from font. bool wxTextAttr::GetFontAttributes(const wxFont& font, int flags) { if (!font.Ok()) return false; if (flags & wxTEXT_ATTR_FONT_SIZE) m_fontSize = font.GetPointSize(); if (flags & wxTEXT_ATTR_FONT_ITALIC) m_fontStyle = font.GetStyle(); if (flags & wxTEXT_ATTR_FONT_WEIGHT) m_fontWeight = font.GetWeight(); if (flags & wxTEXT_ATTR_FONT_UNDERLINE) m_fontUnderlined = font.GetUnderlined(); if (flags & wxTEXT_ATTR_FONT_FACE) m_fontFaceName = font.GetFaceName(); if (flags & wxTEXT_ATTR_FONT_ENCODING) m_fontEncoding = font.GetEncoding(); if (flags & wxTEXT_ATTR_FONT_FAMILY) m_fontFamily = font.GetFamily(); m_flags |= flags; return true; }
/************************************************************** *** ** FontConfig --- setFont *** ***************************************************************/ void FontConfig::setFont( const int &i, const wxFont &f ) { assert( i >= 0 && i < MAX_FONTS ); fd[i].pointSize = f.GetPointSize(); fd[i].family = f.GetFamily(); fd[i].style = f.GetStyle(); fd[i].weight = f.GetWeight(); fd[i].facename = f.GetFaceName(); }
void wxExStyle::Set(const wxXmlNode* node, const wxString& macro) { SetNo( wxExLexers::Get()->ApplyMacro(node->GetAttribute("no", "0"), macro), macro); m_Value = node->GetNodeContent().Strip(wxString::both); #ifdef wxExUSE_CPP0X const auto it = wxExLexers::Get()->GetThemeMacros().find(m_Value); #else std::map<wxString, wxString>::const_iterator it = wxExLexers::Get()->GetThemeMacros().find(m_Value); #endif if (it != wxExLexers::Get()->GetThemeMacros().end()) { wxString value = it->second; if (value.Contains("default-font")) { const wxFont font(wxConfigBase::Get()->ReadObject(_("Default font"), wxSystemSettings::GetFont(wxSYS_OEM_FIXED_FONT))); value.Replace("default-font", wxString::Format("face:%s,size:%d", font.GetFaceName().c_str(), font.GetPointSize())); const wxFontStyle style = font.GetStyle(); if (style == wxFONTSTYLE_ITALIC || style == wxFONTSTYLE_SLANT) { value += ",italic"; } if (font.GetWeight() == wxFONTWEIGHT_BOLD) { value += ",bold"; } if (font.GetUnderlined()) { value += ",underline"; } } m_Value = value; } if (!IsOk()) { wxLogError(_("Illegal style: %s on line: %d"), m_Value.c_str(), node->GetLineNumber()); } }
bool HtmlText::SetFont(const wxFont & font) { if (! wxControl::SetFont(font)) return false; if (m_parser) m_parser->SetStandardFonts(font.GetPointSize(), font.GetFaceName()); LayoutCell(); Refresh(); return true; }
wxFont wxSystemSettingsNative::GetFont( wxSystemFont index ) { wxFont font; switch (index) { case wxSYS_OEM_FIXED_FONT: case wxSYS_ANSI_FIXED_FONT: case wxSYS_SYSTEM_FIXED_FONT: font = *wxNORMAL_FONT; break; case wxSYS_ANSI_VAR_FONT: case wxSYS_SYSTEM_FONT: case wxSYS_DEVICE_DEFAULT_FONT: case wxSYS_DEFAULT_GUI_FONT: if (!gs_fontSystem.Ok()) { wxNativeFontInfo info; info.description = ButtonStyle()->font_desc; gs_fontSystem = wxFont(info); #if wxUSE_FONTENUM // (try to) heal the default font (on some common systems e.g. Ubuntu // it's "Sans Serif" but the real font is called "Sans"): if (!wxFontEnumerator::IsValidFacename(gs_fontSystem.GetFaceName()) && gs_fontSystem.GetFaceName() == "Sans Serif") gs_fontSystem.SetFaceName("Sans"); #endif // wxUSE_FONTENUM info.description = NULL; } font = gs_fontSystem; break; default: break; } wxASSERT( font.IsOk() ); return font; }
void ColoursAndFontsManager::SetGlobalFont(const wxFont& font) { this->m_globalFont = font; // Loop for every lexer and update the font per style std::for_each(m_allLexers.begin(), m_allLexers.end(), [&](LexerConf::Ptr_t lexer) { StyleProperty::Map_t& props = lexer->GetLexerProperties(); StyleProperty::Map_t::iterator iter = props.begin(); for(; iter != props.end(); ++iter) { StyleProperty& sp = iter->second; sp.SetFaceName(font.GetFaceName()); sp.SetFontSize(font.GetPointSize()); sp.SetBold(font.GetWeight() == wxFONTWEIGHT_BOLD); sp.SetItalic(font.GetStyle() == wxFONTSTYLE_ITALIC); sp.SetUnderlined(font.GetUnderlined()); } }); }
bool wxWindowSettings::SaveFont(wxConfigBase& config, const wxString& windowName, const wxFont& font) { if (!font.Ok()) return FALSE; wxString pathBase(wxT("/Fonts/")); pathBase += windowName; pathBase += wxT("/"); config.Write(pathBase + wxT("PointSize"), (long) font.GetPointSize()); config.Write(pathBase + wxT("Family"), (long) font.GetFamily()); config.Write(pathBase + wxT("Style"), (long) font.GetStyle()); config.Write(pathBase + wxT("Weight"), (long) font.GetWeight()); config.Write(pathBase + wxT("Underlined"), (long) font.GetUnderlined()); config.Write(pathBase + wxT("FaceName"), font.GetFaceName()); return TRUE; }
// Get attributes from font. bool wxTextAttr::GetFontAttributes(const wxFont& font, int flags) { if (!font.IsOk()) return false; if (flags & wxTEXT_ATTR_FONT_SIZE) m_fontSize = font.GetPointSize(); if (flags & wxTEXT_ATTR_FONT_ITALIC) m_fontStyle = font.GetStyle(); if (flags & wxTEXT_ATTR_FONT_WEIGHT) m_fontWeight = font.GetWeight(); if (flags & wxTEXT_ATTR_FONT_UNDERLINE) m_fontUnderlined = font.GetUnderlined(); if (flags & wxTEXT_ATTR_FONT_STRIKETHROUGH) m_fontStrikethrough = font.GetStrikethrough(); if (flags & wxTEXT_ATTR_FONT_FACE) m_fontFaceName = font.GetFaceName(); if (flags & wxTEXT_ATTR_FONT_ENCODING) m_fontEncoding = font.GetEncoding(); if (flags & wxTEXT_ATTR_FONT_FAMILY) { // wxFont might not know its family, avoid setting m_fontFamily to an // invalid value and rather pretend that we don't have any font family // information at all in this case const wxFontFamily fontFamily = font.GetFamily(); if ( fontFamily == wxFONTFAMILY_UNKNOWN ) flags &= ~wxTEXT_ATTR_FONT_FAMILY; else m_fontFamily = fontFamily; } m_flags |= flags; return true; }
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() ); }
void MyCanvas::OnPaint( wxPaintEvent &WXUNUSED(event) ) { wxPaintDC dc(this); PrepareDC(dc); // set background dc.SetBackground(*wxWHITE_BRUSH); dc.Clear(); dc.SetFont(m_font); // one text line height wxCoord hLine = dc.GetCharHeight(); // the current text origin wxCoord x = 5, y = 5; // output the font name/info wxString fontInfo; fontInfo.Printf(wxT("Face name: %s, family: %s"), m_font.GetFaceName().c_str(), m_font.GetFamilyString().c_str()); dc.DrawText(fontInfo, x, y); y += hLine; fontInfo.Printf(wxT("Size: %d points or %d pixels; %d*%d average char size"), m_font.GetPointSize(), m_font.GetPixelSize().y, dc.GetCharWidth(), dc.GetCharHeight()); dc.DrawText(fontInfo, x, y); y += hLine; fontInfo.Printf(wxT("Style: %s, weight: %s, fixed width: %s, encoding: %s"), m_font.GetStyleString().c_str(), m_font.GetWeightString().c_str(), m_font.IsFixedWidth() ? wxT("yes") : wxT("no"), wxFontMapper::GetEncodingDescription(m_font.GetEncoding())); dc.DrawText(fontInfo, x, y); y += hLine; if ( m_font.IsOk() ) { const wxNativeFontInfo *info = m_font.GetNativeFontInfo(); if ( info ) { wxString fontDesc = m_font.GetNativeFontInfoUserDesc(); fontInfo.Printf(wxT("Native font info: %s"), fontDesc.c_str()); dc.DrawText(fontInfo, x, y); y += hLine; } } y += hLine; // prepare to draw the font dc.SetTextForeground(m_colour); // the size of one cell (Normally biggest char + small margin) wxCoord maxCharWidth, maxCharHeight; dc.GetTextExtent(wxT("W"), &maxCharWidth, &maxCharHeight); int w = maxCharWidth + 5, h = maxCharHeight + 4; // print all font symbols from 32 to 256 in 7 rows of 32 chars each for ( int i = 0; i < 7; i++ ) { for ( int j = 0; j < 32; j++ ) { wxChar c = (wxChar)(32 * (i + 1) + j); wxCoord charWidth, charHeight; dc.GetTextExtent(c, &charWidth, &charHeight); dc.DrawText ( c, x + w*j + (maxCharWidth - charWidth) / 2 + 1, y + h*i + (maxCharHeight - charHeight) / 2 ); } } // draw the lines between them dc.SetPen(*wxBLUE_PEN); int l; // horizontal for ( l = 0; l < 8; l++ ) { int yl = y + h*l - 2; dc.DrawLine(x - 2, yl, x + 32*w - 1, yl); } // and vertical for ( l = 0; l < 33; l++ ) { int xl = x + w*l - 2; dc.DrawLine(xl, y - 2, xl, y + 7*h - 1); } }
// Get attributes from font. bool wxTextAttr::GetFontAttributes(const wxFont& font, int flags) { if (!font.IsOk()) return false; // If we pass both pixel and point size attributes, this is an indication // to choose the most appropriate units. if ((flags & wxTEXT_ATTR_FONT) == wxTEXT_ATTR_FONT) { if (font.IsUsingSizeInPixels()) { m_fontSize = font.GetPixelSize().y; flags &= ~wxTEXT_ATTR_FONT_POINT_SIZE; } else { m_fontSize = font.GetPointSize(); flags &= ~wxTEXT_ATTR_FONT_PIXEL_SIZE; } } else if (flags & wxTEXT_ATTR_FONT_POINT_SIZE) { m_fontSize = font.GetPointSize(); flags &= ~wxTEXT_ATTR_FONT_PIXEL_SIZE; } else if (flags & wxTEXT_ATTR_FONT_PIXEL_SIZE) { m_fontSize = font.GetPixelSize().y; } if (flags & wxTEXT_ATTR_FONT_ITALIC) m_fontStyle = font.GetStyle(); if (flags & wxTEXT_ATTR_FONT_WEIGHT) m_fontWeight = font.GetWeight(); if (flags & wxTEXT_ATTR_FONT_UNDERLINE) m_fontUnderlined = font.GetUnderlined(); if (flags & wxTEXT_ATTR_FONT_STRIKETHROUGH) m_fontStrikethrough = font.GetStrikethrough(); if (flags & wxTEXT_ATTR_FONT_FACE) m_fontFaceName = font.GetFaceName(); if (flags & wxTEXT_ATTR_FONT_ENCODING) m_fontEncoding = font.GetEncoding(); if (flags & wxTEXT_ATTR_FONT_FAMILY) { // wxFont might not know its family, avoid setting m_fontFamily to an // invalid value and rather pretend that we don't have any font family // information at all in this case const wxFontFamily fontFamily = font.GetFamily(); if ( fontFamily == wxFONTFAMILY_UNKNOWN ) flags &= ~wxTEXT_ATTR_FONT_FAMILY; else m_fontFamily = fontFamily; } m_flags |= flags; return true; }