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;
if (family == wxFONTFAMILY_DEFAULT)
family = wxFONTFAMILY_SWISS;
- m_underlined = underlined;
- m_strikethrough = strikethrough;
-
// Create native font info
m_nativeFontInfo.description = pango_font_description_new();
? wxDEFAULT_FONT_SIZE
: pointSize );
SetWeight( weight == wxDEFAULT ? wxFONTWEIGHT_NORMAL : weight );
+ SetUnderlined( underlined );
+ SetStrikethrough( strikethrough );
}
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...
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)
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,
{
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