X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/cba4e486a4f8ab05674bac6ed8c6bfa58ab25131..12bb29f5432174ecbd65549bda832d70d34a98ae:/src/gtk/font.cpp diff --git a/src/gtk/font.cpp b/src/gtk/font.cpp index 5ff6a3a10f..e078010efa 100644 --- a/src/gtk/font.cpp +++ b/src/gtk/font.cpp @@ -92,9 +92,8 @@ protected: void InitFromNative(); private: - bool m_underlined; - bool m_strikethrough; - // The native font info: basically a PangoFontDescription + // The native font info: basically a PangoFontDescription, plus + // 'underlined' and 'strikethrough' attributes not supported by Pango. wxNativeFontInfo m_nativeFontInfo; friend class wxFont; @@ -118,9 +117,6 @@ void wxFontRefData::Init(int pointSize, if (family == wxFONTFAMILY_DEFAULT) family = wxFONTFAMILY_SWISS; - m_underlined = underlined; - m_strikethrough = strikethrough; - // Create native font info m_nativeFontInfo.description = pango_font_description_new(); @@ -140,6 +136,8 @@ void wxFontRefData::Init(int pointSize, ? wxDEFAULT_FONT_SIZE : pointSize ); SetWeight( weight == wxDEFAULT ? wxFONTWEIGHT_NORMAL : weight ); + SetUnderlined( underlined ); + SetStrikethrough( strikethrough ); } void wxFontRefData::InitFromNative() @@ -151,18 +149,11 @@ void wxFontRefData::InitFromNative() 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; } wxFontRefData::wxFontRefData( const wxFontRefData& data ) : wxGDIRefData() { - m_underlined = data.m_underlined; - m_strikethrough = data.m_strikethrough; - // Forces a copy of the internal data. wxNativeFontInfo should probably // have a copy ctor and assignment operator to fix this properly but that // would break binary compatibility... @@ -243,17 +234,12 @@ void wxFontRefData::SetWeight(wxFontWeight weight) void wxFontRefData::SetUnderlined(bool underlined) { - m_underlined = underlined; - - // the Pango font descriptor does not have an underlined attribute - // (and wxNativeFontInfo::SetUnderlined asserts); rather it's - // wxWindowDCImpl::DoDrawText that handles underlined fonts, so we - // here we just need to save the underlined attribute + m_nativeFontInfo.SetUnderlined(underlined); } void wxFontRefData::SetStrikethrough(bool strikethrough) { - m_strikethrough = strikethrough; + m_nativeFontInfo.SetStrikethrough(strikethrough); } bool wxFontRefData::SetFaceName(const wxString& facename) @@ -287,20 +273,25 @@ wxFont::wxFont(const wxNativeFontInfo& info) info.GetUnderlined(), info.GetFaceName(), info.GetEncoding() ); + + if ( info.GetStrikethrough() ) + SetStrikethrough(true); } -wxFont::wxFont(int pointSize, - wxFontFamily family, - int flags, - const wxString& face, - wxFontEncoding encoding) +wxFont::wxFont(const wxFontInfo& info) { - m_refData = new wxFontRefData(pointSize, family, - GetStyleFromFlags(flags), - GetWeightFromFlags(flags), - GetUnderlinedFromFlags(flags), - GetStrikethroughFromFlags(flags), - face, encoding); + m_refData = new wxFontRefData(info.GetPointSize(), + info.GetFamily(), + info.GetStyle(), + info.GetWeight(), + info.IsUnderlined(), + info.IsStrikethrough(), + info.GetFaceName(), + info.GetEncoding()); + + wxSize pixelSize = info.GetPixelSize(); + if ( pixelSize != wxDefaultSize ) + SetPixelSize(pixelSize); } bool wxFont::Create( int pointSize, @@ -379,14 +370,14 @@ bool wxFont::GetUnderlined() const { wxCHECK_MSG( IsOk(), false, wxT("invalid font") ); - return M_FONTDATA->m_underlined; + return M_FONTDATA->m_nativeFontInfo.GetUnderlined(); } bool wxFont::GetStrikethrough() const { wxCHECK_MSG( IsOk(), false, wxT("invalid font") ); - return M_FONTDATA->m_strikethrough; + return M_FONTDATA->m_nativeFontInfo.GetStrikethrough(); } wxFontEncoding wxFont::GetEncoding() const