+static inline int flags2Style(int flags)
+{
+ return flags & wxFONTFLAG_ITALIC
+ ? wxFONTSTYLE_ITALIC
+ : flags & wxFONTFLAG_SLANT
+ ? wxFONTSTYLE_SLANT
+ : wxFONTSTYLE_NORMAL;
+}
+
+static inline int flags2Weight(int flags)
+{
+ return flags & wxFONTFLAG_LIGHT
+ ? wxFONTWEIGHT_LIGHT
+ : flags & wxFONTFLAG_BOLD
+ ? wxFONTWEIGHT_BOLD
+ : wxFONTWEIGHT_NORMAL;
+}
+
+static inline bool flags2Underlined(int flags)
+{
+ return (flags & wxFONTFLAG_UNDERLINED) != 0;
+}
+
+/* static */
+wxFont *wxFontBase::New(int pointSize,
+ wxFontFamily family,
+ int flags,
+ const wxString& face,
+ wxFontEncoding encoding)
+{
+ return New(pointSize, family, flags2Style(flags), flags2Weight(flags),
+ flags2Underlined(flags), face, encoding);
+}
+
+/* static */
+wxFont *wxFontBase::New(const wxSize& pixelSize,
+ int family,
+ int style,
+ int weight,
+ bool underlined,
+ const wxString& face,
+ wxFontEncoding encoding)
+{
+#if defined(__WXMSW__)
+ return new wxFont(pixelSize, family, style, weight, underlined,
+ face, encoding);
+#else
+ wxFont *self = New(10, family, style, weight, underlined, face, encoding);
+ wxScreenDC dc;
+ AdjustFontSize(*(wxFont *)self, dc, pixelSize);
+ return self;
+#endif
+}
+
+/* static */
+wxFont *wxFontBase::New(const wxSize& pixelSize,
+ wxFontFamily family,
+ int flags,
+ const wxString& face,
+ wxFontEncoding encoding)
+{
+ return New(pixelSize, family, flags2Style(flags), flags2Weight(flags),
+ flags2Underlined(flags), face, encoding);
+}
+
+wxSize wxFontBase::GetPixelSize() const
+{
+ wxScreenDC dc;
+ dc.SetFont(*(wxFont *)this);
+ return wxSize(dc.GetCharWidth(), dc.GetCharHeight());
+}
+
+bool wxFontBase::IsUsingSizeInPixels() const
+{
+ return false;
+}
+
+void wxFontBase::SetPixelSize( const wxSize& pixelSize )
+{
+ wxScreenDC dc;
+ AdjustFontSize(*(wxFont *)this, dc, pixelSize);
+}
+
+/* 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);
+}
+
+bool wxFontBase::IsFixedWidth() const
+{
+ return GetFamily() == wxFONTFAMILY_TELETYPE;
+}
+
+void wxFontBase::DoSetNativeFontInfo(const wxNativeFontInfo& info)
+{
+#ifdef wxNO_NATIVE_FONTINFO
+ 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;
+ const wxNativeFontInfo *fontInfo = GetNativeFontInfo();
+ if ( fontInfo )
+ {
+ fontDesc = fontInfo->ToString();
+ }
+
+ return fontDesc;
+}
+
+wxString wxFontBase::GetNativeFontInfoUserDesc() const
+{
+ wxString fontDesc;
+ const wxNativeFontInfo *fontInfo = GetNativeFontInfo();
+ if ( fontInfo )
+ {
+ fontDesc = fontInfo->ToUserString();
+ }
+
+ return fontDesc;
+}
+
+void wxFontBase::SetNativeFontInfo(const wxString& info)
+{
+ wxNativeFontInfo fontInfo;
+ if ( !info.empty() && fontInfo.FromString(info) )
+ {
+ SetNativeFontInfo(fontInfo);
+ }
+}
+
+void wxFontBase::SetNativeFontInfoUserDesc(const wxString& info)
+{
+ wxNativeFontInfo fontInfo;
+ if ( !info.empty() && fontInfo.FromUserString(info) )
+ {
+ SetNativeFontInfo(fontInfo);
+ }
+}
+