#include "wx/font.h"
#endif // WX_PRECOMP
+#include "wx/gdicmn.h"
+#include "wx/fontutil.h" // for wxNativeFontInfo
+
#include "wx/tokenzr.h"
// ============================================================================
return new wxFont(info);
}
-wxNativeFontInfo wxFontBase::GetNativeFontInfo() const
+/* static */
+wxFont *wxFontBase::New(const wxString& strNativeFontDesc)
{
-#if !defined(__WXGTK__)
wxNativeFontInfo fontInfo;
+ if ( !fontInfo.FromString(strNativeFontDesc) )
+ return new wxFont(*wxNORMAL_FONT);
- fontInfo.pointSize = GetPointSize();
- fontInfo.family = GetFamily();
- fontInfo.style = GetStyle();
- fontInfo.weight = GetWeight();
- fontInfo.underlined = GetUnderlined();
- fontInfo.faceName = GetFaceName();
- fontInfo.encoding = GetEncoding();
+ return New(fontInfo);
+}
+
+wxNativeFontInfo *wxFontBase::GetNativeFontInfo() const
+{
+#if !defined(__WXGTK__) && !defined(__WXMSW__)
+ wxNativeFontInfo *fontInfo = new wxNativeFontInfo;
+
+ fontInfo->pointSize = GetPointSize();
+ fontInfo->family = GetFamily();
+ fontInfo->style = GetStyle();
+ fontInfo->weight = GetWeight();
+ fontInfo->underlined = GetUnderlined();
+ fontInfo->faceName = GetFaceName();
+ fontInfo->encoding = GetEncoding();
return fontInfo;
#else
- return wxNullNativeFontInfo;
+ return (wxNativeFontInfo *)NULL;
#endif
}
void wxFontBase::SetNativeFontInfo(const wxNativeFontInfo& info)
{
-#if !defined(__WXGTK__)
+#if !defined(__WXGTK__) && !defined(__WXMSW__)
SetPointSize(info.pointSize);
SetFamily(info.family);
SetStyle(info.style);
#endif
}
+wxString wxFontBase::GetNativeFontInfoDesc() const
+{
+ wxString fontDesc;
+ wxNativeFontInfo *fontInfo = GetNativeFontInfo();
+ if ( fontInfo )
+ {
+ fontDesc = fontInfo->ToString();
+ delete fontInfo;
+ }
+
+ return fontDesc;
+}
+
wxFont& wxFont::operator=(const wxFont& font)
{
if ( this != &font )
return (wxFont &)*this;
}
-// VZ: is it correct to compare pointers and not the contents? (FIXME)
bool wxFontBase::operator==(const wxFont& font) const
{
- return GetFontData() == font.GetFontData();
+ // 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 GetFontData() == font.GetFontData() ||
+ (
+ Ok() == font.Ok() &&
+ GetPointSize() == font.GetPointSize() &&
+ GetFamily() == font.GetFamily() &&
+ GetStyle() == font.GetStyle() &&
+ GetUnderlined() == font.GetUnderlined() &&
+ GetFaceName() == font.GetFaceName() &&
+ GetEncoding() == font.GetEncoding()
+ );
}
bool wxFontBase::operator!=(const wxFont& font) const
{
- return GetFontData() != font.GetFontData();
+ return !(*this == font);
}
wxString wxFontBase::GetFamilyString() const
}
}
-#if !defined(__WXGTK__)
+#if !defined(__WXGTK__) && !defined(__WXMSW__)
// ----------------------------------------------------------------------------
// wxNativeFontInfo
// These are the generic forms of FromString()/ToString.
//
// convert to/from the string representation: format is
-// pointsize;family;style;weight;underlined;facename;encoding
+// version;pointsize;family;style;weight;underlined;facename;encoding
bool wxNativeFontInfo::FromString(const wxString& s)
{
wxStringTokenizer tokenizer(s, _T(";"));
wxString token = tokenizer.GetNextToken();
+ //
+ // Ignore the version for now
+ //
+
+ token = tokenizer.GetNextToken();
if ( !token.ToLong(&l) )
return FALSE;
pointSize = (int)l;
token = tokenizer.GetNextToken();
if ( !token.ToLong(&l) )
return FALSE;
- underlined = (int)l;
+ underlined = l != 0;
faceName = tokenizer.GetNextToken();
if( !faceName )
{
wxString s;
- s.Printf("%d;%d;%d;%d;%d;%s;%d",
+ s.Printf(_T("%d;%d;%d;%d;%d;%d;%s;%d"),
+ 0, // version
pointSize,
family,
style,
return s;
}
-#endif
+#endif // generic wxNativeFontInfo implementation