void wxFontRefData::Init(int pointSize, wxFontFamily family, wxFontStyle style, wxFontWeight weight, bool underlined, const wxString& faceName, wxFontEncoding encoding) { m_family = family == wxFONTFAMILY_DEFAULT ? wxFONTFAMILY_SWISS : family; m_faceName = faceName; // we accept both wxDEFAULT and wxNORMAL here - should we? m_style = style == wxDEFAULT ? wxFONTSTYLE_NORMAL : style; m_weight = weight == wxDEFAULT ? wxFONTWEIGHT_NORMAL : weight; m_underlined = underlined; m_encoding = encoding; #if wxUSE_UNICODE if ( m_nativeFontInfo.description ) pango_font_description_free(m_nativeFontInfo.description); // Create native font info m_nativeFontInfo.description = pango_font_description_new(); // if a face name is specified, use it if it's available, otherwise use // just the family if ( faceName.empty() || !wxFontEnumerator::IsValidFacename(faceName) ) { // TODO: scan system for valid fonts matching the given family instead // of hardcoding them here switch ( m_family ) { case wxFONTFAMILY_TELETYPE: m_faceName = wxT("monospace"); break; case wxFONTFAMILY_ROMAN: m_faceName = wxT("serif"); break; default: m_faceName = wxT("sans"); } } else // specified face name is available, use it { m_faceName = faceName; } m_nativeFontInfo.SetFaceName(m_faceName); m_nativeFontInfo.SetWeight((wxFontWeight)m_weight); m_nativeFontInfo.SetStyle((wxFontStyle)m_style); #endif // wxUSE_UNICODE SetPointSize(pointSize); }
void wxNativeFontInfo::Init(const wxNativeFontInfo& info) { if (info.description) { description = pango_font_description_copy(info.description); m_underlined = info.GetUnderlined(); m_strikethrough = info.GetStrikethrough(); } else { description = NULL; m_underlined = false; m_strikethrough = false; } }
void wxFontRefData::SetWeight(wxFontWeight weight) { m_weight = weight; if ( HasNativeFont() ) { wxString boldness; switch ( weight ) { case wxFONTWEIGHT_BOLD: boldness = wxT("bold"); break; case wxFONTWEIGHT_LIGHT: boldness = wxT("light"); break; default: wxFAIL_MSG( wxT("unknown font weight") ); // fall through case wxFONTWEIGHT_NORMAL: // unspecified boldness = wxT("medium"); } m_nativeFontInfo.SetXFontComponent(wxXLFD_WEIGHT, boldness); } }
void wxFontRefData::SetStyle(wxFontStyle style) { m_style = style; if ( HasNativeFont() ) { wxString slant; switch ( style ) { case wxFONTSTYLE_ITALIC: slant = wxT('i'); break; case wxFONTSTYLE_SLANT: slant = wxT('o'); break; default: wxFAIL_MSG( wxT("unknown font style") ); // fall through case wxFONTSTYLE_NORMAL: slant = wxT('r'); } m_nativeFontInfo.SetXFontComponent(wxXLFD_SLANT, slant); } }
void wxFontRefData::InitFromNative() { // Get native info PangoFontDescription *desc = m_nativeFontInfo.description; // Pango sometimes needs to have a size int pango_size = pango_font_description_get_size( desc ); if (pango_size == 0) m_nativeFontInfo.SetPointSize(wxDEFAULT_FONT_SIZE); }
void wxFontRefData::SetPointSize(int pointSize) { // NB: Pango doesn't support point sizes less than 1 m_pointSize = pointSize == wxDEFAULT || pointSize < 1 ? wxDEFAULT_FONT_SIZE : pointSize; #if wxUSE_UNICODE m_nativeFontInfo.SetPointSize(m_pointSize); #endif }
wxFont::wxFont(const wxNativeFontInfo& info) { Create( info.GetPointSize(), info.GetFamily(), info.GetStyle(), info.GetWeight(), info.GetUnderlined(), info.GetFaceName(), info.GetEncoding() ); if ( info.GetStrikethrough() ) SetStrikethrough(true); }
bool wxFontRefData::SetFaceName(const wxString& facename) { m_faceName = facename; if ( HasNativeFont() ) { m_nativeFontInfo.SetXFontComponent(wxXLFD_FAMILY, facename); } return true; }
wxFont::wxFont(const wxNativeFontInfo& info) { #if wxUSE_UNICODE Create( info.GetPointSize(), info.GetFamily(), info.GetStyle(), info.GetWeight(), info.GetUnderlined(), info.GetFaceName(), info.GetEncoding() ); if ( info.GetStrikethrough() ) SetStrikethrough(true); #else (void) Create(info.GetXFontName()); #endif }
void wxFontRefData::SetNativeFontInfo(const wxNativeFontInfo& info) { // previously cached fonts shouldn't be used ClearX11Fonts(); m_nativeFontInfo = info; m_family = info.GetFamily(); // set all the other font parameters from the native font info InitFromNative(); }
void wxFontRefData::SetEncoding(wxFontEncoding encoding) { m_encoding = encoding; if ( HasNativeFont() ) { wxNativeEncodingInfo info; if ( wxGetNativeFontEncoding(encoding, &info) ) { m_nativeFontInfo.SetXFontComponent(wxXLFD_REGISTRY, info.xregistry); m_nativeFontInfo.SetXFontComponent(wxXLFD_ENCODING, info.xencoding); } } }
void wxFontRefData::InitFromNative() { // Get native info PangoFontDescription *desc = m_nativeFontInfo.description; // Pango sometimes needs to have a size int pango_size = pango_font_description_get_size( desc ); if (pango_size == 0) m_nativeFontInfo.SetPointSize(wxDEFAULT_FONT_SIZE); // Pango description are never underlined m_underlined = false; m_strikethrough = false; }
void wxFontRefData::SetPointSize(int pointSize) { m_pointSize = pointSize; if ( HasNativeFont() ) { wxString size; if ( pointSize == -1 ) size = wxT('*'); else size.Printf(wxT("%d"), 10*pointSize); m_nativeFontInfo.SetXFontComponent(wxXLFD_POINTSIZE, size); } }
void wxFontRefData::InitFromNative() { m_noAA = false; // Get native info PangoFontDescription *desc = m_nativeFontInfo.description; // Pango sometimes needs to have a size int pango_size = pango_font_description_get_size( desc ); if (pango_size == 0) m_nativeFontInfo.SetPointSize(wxDEFAULT_FONT_SIZE); wxString faceName = wxGTK_CONV_BACK_SYS(pango_font_description_get_family(desc)); if (faceName == wxT("monospace")) { m_family = wxFONTFAMILY_TELETYPE; } else if (faceName == wxT("sans")) { m_family = wxFONTFAMILY_SWISS; } else if (faceName == wxT("serif")) { m_family = wxFONTFAMILY_ROMAN; } else { m_family = wxFONTFAMILY_UNKNOWN; } // Pango description are never underlined m_underlined = false; // always with GTK+ 2 m_encoding = wxFONTENCODING_UTF8; }
wxFont::wxFont(const wxNativeFontInfo& info) { (void) Create(info.GetXFontName()); }
void wxFontRefData::SetUnderlined(bool underlined) { m_nativeFontInfo.SetUnderlined(underlined); // the XLFD doesn't have "underlined" field anyhow }
wxFont::wxFont(const wxNativeFontInfo& info) { Init(); (void) Create(info.GetBFontName()); }
void wxFontRefData::SetWeight(wxFontWeight weight) { m_nativeFontInfo.SetWeight((wxFontWeight)weight); }
void wxFontRefData::SetPointSize(int pointSize) { m_nativeFontInfo.SetPointSize(pointSize); }
void wxFontRefData::SetStrikethrough(bool strikethrough) { m_nativeFontInfo.SetStrikethrough(strikethrough); }
void wxFontRefData::SetUnderlined(bool underlined) { m_nativeFontInfo.SetUnderlined(underlined); }
void wxFontRefData::InitFromNative() { // get the font parameters from the XLFD // ------------------------------------- m_faceName = m_nativeFontInfo.GetXFontComponent(wxXLFD_FAMILY); m_weight = wxFONTWEIGHT_NORMAL; wxString w = m_nativeFontInfo.GetXFontComponent(wxXLFD_WEIGHT).Upper(); if ( !w.empty() && w != wxT('*') ) { // the test below catches all of BOLD, EXTRABOLD, DEMIBOLD, ULTRABOLD // and BLACK if ( ((w[0u] == wxT('B') && (!wxStrcmp(w.c_str() + 1, wxT("OLD")) || !wxStrcmp(w.c_str() + 1, wxT("LACK"))))) || wxStrstr(w.c_str() + 1, wxT("BOLD")) ) { m_weight = wxFONTWEIGHT_BOLD; } else if ( w == wxT("LIGHT") || w == wxT("THIN") ) { m_weight = wxFONTWEIGHT_LIGHT; } } switch ( wxToupper(m_nativeFontInfo. GetXFontComponent(wxXLFD_SLANT)[0u]).GetValue() ) { case wxT('I'): // italique m_style = wxFONTSTYLE_ITALIC; break; case wxT('O'): // oblique m_style = wxFONTSTYLE_SLANT; break; default: m_style = wxFONTSTYLE_NORMAL; } long ptSize; if ( m_nativeFontInfo.GetXFontComponent(wxXLFD_POINTSIZE).ToLong(&ptSize) ) { // size in XLFD is in 10 point units m_pointSize = (int)(ptSize / 10); } else { m_pointSize = wxDEFAULT_FONT_SIZE; } // examine the spacing: if the font is monospaced, assume wxTELETYPE // family for compatibility with the old code which used it instead of // IsFixedWidth() if ( m_nativeFontInfo.GetXFontComponent(wxXLFD_SPACING).Upper() == wxT('M') ) { m_family = wxFONTFAMILY_TELETYPE; } else // not monospaceed { // don't even try guessing it, it doesn't work for too many fonts // anyhow m_family = wxFONTFAMILY_UNKNOWN; } // X fonts are never underlined... m_underlined = false; // deal with font encoding wxString registry = m_nativeFontInfo.GetXFontComponent(wxXLFD_REGISTRY).Upper(), encoding = m_nativeFontInfo.GetXFontComponent(wxXLFD_ENCODING).Upper(); if ( registry == wxT("ISO8859") ) { int cp; if ( wxSscanf(encoding, wxT("%d"), &cp) == 1 ) { m_encoding = (wxFontEncoding)(wxFONTENCODING_ISO8859_1 + cp - 1); } } else if ( registry == wxT("MICROSOFT") ) { int cp; if ( wxSscanf(encoding, wxT("cp125%d"), &cp) == 1 ) { m_encoding = (wxFontEncoding)(wxFONTENCODING_CP1250 + cp); } } else if ( registry == wxT("KOI8") ) { m_encoding = wxFONTENCODING_KOI8; } else // unknown encoding { // may be give a warning here? or use wxFontMapper? m_encoding = wxFONTENCODING_SYSTEM; } }
void wxFontRefData::SetFamily(wxFontFamily family) { m_nativeFontInfo.SetFamily(family); }
void wxFontRefData::SetStyle(wxFontStyle style) { m_nativeFontInfo.SetStyle((wxFontStyle)style); }
void wxFontRefData::InitFromNative() { #if wxUSE_UNICODE // Get native info PangoFontDescription *desc = m_nativeFontInfo.description; // init fields m_faceName = wxGTK_CONV_BACK( pango_font_description_get_family( desc ) ); m_pointSize = pango_font_description_get_size( desc ) / PANGO_SCALE; switch (pango_font_description_get_style( desc )) { case PANGO_STYLE_NORMAL: m_style = wxFONTSTYLE_NORMAL; break; case PANGO_STYLE_ITALIC: m_style = wxFONTSTYLE_ITALIC; break; case PANGO_STYLE_OBLIQUE: m_style = wxFONTSTYLE_SLANT; break; } // Not defined in some Pango versions #define wxPANGO_WEIGHT_SEMIBOLD 600 switch (pango_font_description_get_weight( desc )) { case PANGO_WEIGHT_ULTRALIGHT: case PANGO_WEIGHT_LIGHT: m_weight = wxFONTWEIGHT_LIGHT; break; default: wxFAIL_MSG(wxT("unknown Pango font weight")); // fall through case PANGO_WEIGHT_NORMAL: m_weight = wxFONTWEIGHT_NORMAL; break; case wxPANGO_WEIGHT_SEMIBOLD: case PANGO_WEIGHT_BOLD: case PANGO_WEIGHT_ULTRABOLD: case PANGO_WEIGHT_HEAVY: m_weight = wxFONTWEIGHT_BOLD; break; } if (m_faceName == wxT("monospace")) { m_family = wxFONTFAMILY_TELETYPE; } else if (m_faceName == wxT("sans")) { m_family = wxFONTFAMILY_SWISS; } else { m_family = wxFONTFAMILY_UNKNOWN; } // Pango description are never underlined (?) m_underlined = false; // Cannot we choose that m_encoding = wxFONTENCODING_SYSTEM; #else // X11 // get the font parameters from the XLFD // ------------------------------------- m_faceName = m_nativeFontInfo.GetXFontComponent(wxXLFD_FAMILY); m_weight = wxFONTWEIGHT_NORMAL; wxString w = m_nativeFontInfo.GetXFontComponent(wxXLFD_WEIGHT).Upper(); if ( !w.empty() && w != wxT('*') ) { // the test below catches all of BOLD, EXTRABOLD, DEMIBOLD, ULTRABOLD // and BLACK if ( ((w[0u] == wxT('B') && (!wxStrcmp(w.c_str() + 1, wxT("OLD")) || !wxStrcmp(w.c_str() + 1, wxT("LACK"))))) || wxStrstr(w.c_str() + 1, wxT("BOLD")) ) { m_weight = wxFONTWEIGHT_BOLD; } else if ( w == wxT("LIGHT") || w == wxT("THIN") ) { m_weight = wxFONTWEIGHT_LIGHT; } } switch ( wxToupper( m_nativeFontInfo. GetXFontComponent(wxXLFD_SLANT)[0u]).GetValue() ) { case wxT('I'): // italique m_style = wxFONTSTYLE_ITALIC; break; case wxT('O'): // oblique m_style = wxFONTSTYLE_SLANT; break; default: m_style = wxFONTSTYLE_NORMAL; } long ptSize; if ( m_nativeFontInfo.GetXFontComponent(wxXLFD_POINTSIZE).ToLong(&ptSize) ) { // size in XLFD is in 10 point units m_pointSize = (int)(ptSize / 10); } else { m_pointSize = wxDEFAULT_FONT_SIZE; } // examine the spacing: if the font is monospaced, assume wxTELETYPE // family for compatibility with the old code which used it instead of // IsFixedWidth() if ( m_nativeFontInfo.GetXFontComponent(wxXLFD_SPACING).Upper() == wxT('M') ) { m_family = wxFONTFAMILY_TELETYPE; } else // not monospaceed { // don't even try guessing it, it doesn't work for too many fonts // anyhow m_family = wxFONTFAMILY_UNKNOWN; } // X fonts are never underlined... m_underlined = false; // deal with font encoding wxString registry = m_nativeFontInfo.GetXFontComponent(wxXLFD_REGISTRY).Upper(), encoding = m_nativeFontInfo.GetXFontComponent(wxXLFD_ENCODING).Upper(); if ( registry == wxT("ISO8859") ) { int cp; if ( wxSscanf(encoding, wxT("%d"), &cp) == 1 ) { m_encoding = (wxFontEncoding)(wxFONTENCODING_ISO8859_1 + cp - 1); } } else if ( registry == wxT("MICROSOFT") ) { int cp; if ( wxSscanf(encoding, wxT("cp125%d"), &cp) == 1 ) { m_encoding = (wxFontEncoding)(wxFONTENCODING_CP1250 + cp); } } else if ( registry == wxT("KOI8") ) { m_encoding = wxFONTENCODING_KOI8; } else // unknown encoding { // may be give a warning here? or use wxFontMapper? m_encoding = wxFONTENCODING_SYSTEM; } #endif // Pango/X11 }
bool wxFontRefData::SetFaceName(const wxString& facename) { return m_nativeFontInfo.SetFaceName(facename); }
void wxFontRefData::InitFromNative() { #if wxUSE_UNICODE // Get native info PangoFontDescription *desc = m_nativeFontInfo.description; // init fields m_faceName = wxGTK_CONV_BACK( pango_font_description_get_family( desc ) ); m_pointSize = static_cast<float>(pango_font_description_get_size( desc )) / PANGO_SCALE; switch (pango_font_description_get_style( desc )) { case PANGO_STYLE_NORMAL: m_style = wxFONTSTYLE_NORMAL; break; case PANGO_STYLE_ITALIC: m_style = wxFONTSTYLE_ITALIC; break; case PANGO_STYLE_OBLIQUE: m_style = wxFONTSTYLE_SLANT; break; } m_weight = pango_font_description_get_weight( desc ); #else // X11 // get the font parameters from the XLFD // ------------------------------------- m_faceName = m_nativeFontInfo.GetXFontComponent(wxXLFD_FAMILY); wxString w = m_nativeFontInfo.GetXFontComponent(wxXLFD_WEIGHT).Upper(); if ( !w.empty() && w != wxT('*') ) m_weight = ParseWeightString(w); else m_weight = wxFONTWEIGHT_NORMAL; switch ( wxToupper( m_nativeFontInfo. GetXFontComponent(wxXLFD_SLANT)[0u]).GetValue() ) { case wxT('I'): // italique m_style = wxFONTSTYLE_ITALIC; break; case wxT('O'): // oblique m_style = wxFONTSTYLE_SLANT; break; default: m_style = wxFONTSTYLE_NORMAL; } long ptSize; if ( m_nativeFontInfo.GetXFontComponent(wxXLFD_POINTSIZE).ToLong(&ptSize) ) { // size in XLFD is in 10 point units m_pointSize = (int)(ptSize / 10); } else { m_pointSize = wxDEFAULT_FONT_SIZE; } // examine the spacing: if the font is monospaced, assume wxFONTFAMILY_TELETYPE // family for compatibility with the old code which used it instead of // IsFixedWidth() if ( m_nativeFontInfo.GetXFontComponent(wxXLFD_SPACING).Upper() == wxT('M') ) { m_family = wxFONTFAMILY_TELETYPE; } else // not monospaceed { // don't even try guessing it, it doesn't work for too many fonts // anyhow m_family = wxFONTFAMILY_UNKNOWN; } // X fonts are never underlined... m_underlined = false; // deal with font encoding wxString registry = m_nativeFontInfo.GetXFontComponent(wxXLFD_REGISTRY).Upper(), encoding = m_nativeFontInfo.GetXFontComponent(wxXLFD_ENCODING).Upper(); if ( registry == wxT("ISO8859") ) { int cp; if ( wxSscanf(encoding, wxT("%d"), &cp) == 1 ) { m_encoding = (wxFontEncoding)(wxFONTENCODING_ISO8859_1 + cp - 1); } } else if ( registry == wxT("MICROSOFT") ) { int cp; if ( wxSscanf(encoding, wxT("cp125%d"), &cp) == 1 ) { m_encoding = (wxFontEncoding)(wxFONTENCODING_CP1250 + cp); } } else if ( registry == wxT("KOI8") ) { m_encoding = wxFONTENCODING_KOI8; } else // unknown encoding { // may be give a warning here? or use wxFontMapper? m_encoding = wxFONTENCODING_SYSTEM; } #endif // Pango/X11 }