// headers
// ----------------------------------------------------------------------------
+#ifdef __GNUG__
+ #pragma implementation "fontbase.h"
+#endif
+
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
#include "wx/font.h"
#endif // WX_PRECOMP
+#include "wx/gdicmn.h"
+#include "wx/fontutil.h" // for wxNativeFontInfo
+
+#include "wx/tokenzr.h"
+
// ============================================================================
// implementation
// ============================================================================
wxFontEncoding wxFontBase::ms_encodingDefault = wxFONTENCODING_SYSTEM;
+/* static */
wxFont *wxFontBase::New(int size,
int family,
int style,
return new wxFont(size, family, style, weight, underlined, face, encoding);
}
+/* static */
+wxFont *wxFontBase::New(const wxNativeFontInfo& info)
+{
+ return new wxFont(info);
+}
+
+/* static */
+wxFont *wxFontBase::New(const wxString& strNativeFontDesc)
+{
+ wxNativeFontInfo fontInfo;
+ if ( !fontInfo.FromString(strNativeFontDesc) )
+ return new wxFont(*wxNORMAL_FONT);
+
+ 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 (wxNativeFontInfo *)NULL;
+#endif
+}
+
+void wxFontBase::SetNativeFontInfo(const wxNativeFontInfo& info)
+{
+#if !defined(__WXGTK__) && !defined(__WXMSW__)
+ SetPointSize(info.pointSize);
+ SetFamily(info.family);
+ SetStyle(info.style);
+ SetWeight(info.weight);
+ SetUnderlined(info.underlined);
+ SetFaceName(info.faceName);
+ SetEncoding(info.encoding);
+#else
+ (void)info;
+#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 m_refData == font.m_refData;
+ // 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() &&
+ GetWeight() == font.GetWeight() &&
+ GetUnderlined() == font.GetUnderlined() &&
+ GetFaceName() == font.GetFaceName() &&
+ GetEncoding() == font.GetEncoding()
+ );
}
bool wxFontBase::operator!=(const wxFont& font) const
{
- return m_refData != font.m_refData;
+ return !(*this == font);
}
wxString wxFontBase::GetFamilyString() const
{
- wxCHECK_MSG( Ok(), _T("wxDEFAULT"), _T("invalid font") );
+ wxCHECK_MSG( Ok(), wxT("wxDEFAULT"), wxT("invalid font") );
switch ( GetFamily() )
{
- case wxDECORATIVE: return _T("wxDECORATIVE");
- case wxROMAN: return _T("wxROMAN");
- case wxSCRIPT: return _T("wxSCRIPT");
- case wxSWISS: return _T("wxSWISS");
- case wxMODERN: return _T("wxMODERN");
- case wxTELETYPE: return _T("wxTELETYPE");
- default: return _T("wxDEFAULT");
+ case wxDECORATIVE: return wxT("wxDECORATIVE");
+ case wxROMAN: return wxT("wxROMAN");
+ case wxSCRIPT: return wxT("wxSCRIPT");
+ case wxSWISS: return wxT("wxSWISS");
+ case wxMODERN: return wxT("wxMODERN");
+ case wxTELETYPE: return wxT("wxTELETYPE");
+ default: return wxT("wxDEFAULT");
}
}
wxString wxFontBase::GetStyleString() const
{
- wxCHECK_MSG( Ok(), _T("wxDEFAULT"), _T("invalid font") );
+ wxCHECK_MSG( Ok(), wxT("wxDEFAULT"), wxT("invalid font") );
switch ( GetStyle() )
{
- case wxNORMAL: return _T("wxNORMAL");
- case wxSLANT: return _T("wxSLANT");
- case wxITALIC: return _T("wxITALIC");
- default: return _T("wxDEFAULT");
+ case wxNORMAL: return wxT("wxNORMAL");
+ case wxSLANT: return wxT("wxSLANT");
+ case wxITALIC: return wxT("wxITALIC");
+ default: return wxT("wxDEFAULT");
}
}
wxString wxFontBase::GetWeightString() const
{
- wxCHECK_MSG( Ok(), _T("wxDEFAULT"), _T("invalid font") );
+ wxCHECK_MSG( Ok(), wxT("wxDEFAULT"), wxT("invalid font") );
switch ( GetWeight() )
{
- case wxNORMAL: return _T("wxNORMAL");
- case wxBOLD: return _T("wxBOLD");
- case wxLIGHT: return _T("wxLIGHT");
- default: return _T("wxDEFAULT");
+ case wxNORMAL: return wxT("wxNORMAL");
+ case wxBOLD: return wxT("wxBOLD");
+ case wxLIGHT: return wxT("wxLIGHT");
+ default: return wxT("wxDEFAULT");
}
}
+#if !defined(__WXGTK__) && !defined(__WXMSW__)
+
+// ----------------------------------------------------------------------------
+// wxNativeFontInfo
+// ----------------------------------------------------------------------------
+
+// These are the generic forms of FromString()/ToString.
+//
+// convert to/from the string representation: format is
+// version;pointsize;family;style;weight;underlined;facename;encoding
+
+bool wxNativeFontInfo::FromString(const wxString& s)
+{
+ long l;
+
+ 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;
+ family = (int)l;
+
+ token = tokenizer.GetNextToken();
+ if ( !token.ToLong(&l) )
+ return FALSE;
+ style = (int)l;
+
+ token = tokenizer.GetNextToken();
+ if ( !token.ToLong(&l) )
+ return FALSE;
+ weight = (int)l;
+
+ token = tokenizer.GetNextToken();
+ if ( !token.ToLong(&l) )
+ return FALSE;
+ underlined = l != 0;
+
+ faceName = tokenizer.GetNextToken();
+ if( !faceName )
+ return FALSE;
+
+ token = tokenizer.GetNextToken();
+ if ( !token.ToLong(&l) )
+ return FALSE;
+ encoding = (wxFontEncoding)l;
+
+ return TRUE;
+}
+
+wxString wxNativeFontInfo::ToString() const
+{
+ wxString s;
+
+ s.Printf(_T("%d;%d;%d;%d;%d;%d;%s;%d"),
+ 0, // version
+ pointSize,
+ family,
+ style,
+ weight,
+ underlined,
+ faceName.GetData(),
+ (int)encoding);
+
+ return s;
+}
+
+#endif // generic wxNativeFontInfo implementation
+