+ return obj;
+}
+
+// ----------------------------------------------------------------------------
+// NSFont Utils
+// ----------------------------------------------------------------------------
+
+#if wxOSX_USE_COCOA
+wxFont::wxFont(WX_NSFont nsfont)
+{
+ [nsfont retain];
+ wxNativeFontInfo info;
+ SetNativeInfoFromNSFont(nsfont, &info);
+ Create(info);
+}
+
+void wxFont::SetNativeInfoFromNSFont(WX_NSFont nsfont, wxNativeFontInfo* info)
+{
+ NSFontDescriptor*desc = [[nsfont fontDescriptor] retain];
+ if ( info->m_faceName.empty())
+ {
+ wxFontStyle fontstyle = wxFONTSTYLE_NORMAL;
+ wxFontWeight fontweight = wxFONTWEIGHT_NORMAL;
+ bool underlined = false;
+
+ int size = (int) ([desc pointSize]+0.5);
+ NSFontSymbolicTraits traits = [desc symbolicTraits];
+
+ if ( traits & NSFontBoldTrait )
+ fontweight = wxFONTWEIGHT_BOLD ;
+ else
+ fontweight = wxFONTWEIGHT_NORMAL ;
+ if ( traits & NSFontItalicTrait )
+ fontstyle = wxFONTSTYLE_ITALIC ;
+
+ wxCFStringRef fontname( [desc postscriptName] );
+ info->Init(size,wxFONTFAMILY_DEFAULT,fontstyle,fontweight,underlined,
+ fontname.AsString(), wxFONTENCODING_DEFAULT);
+
+ }
+ info->m_nsFontDescriptor = desc;
+}
+
+WX_NSFont wxFont::OSXCreateNSFont(wxOSXSystemFont font, wxNativeFontInfo* info)
+{
+ NSFont* nsfont = nil;
+ switch( font )
+ {
+ case wxOSX_SYSTEM_FONT_NORMAL:
+ nsfont = [NSFont systemFontOfSize:[NSFont systemFontSize]];
+ break;
+ case wxOSX_SYSTEM_FONT_BOLD:
+ nsfont = [NSFont boldSystemFontOfSize:[NSFont systemFontSize]];
+ break;
+ case wxOSX_SYSTEM_FONT_SMALL:
+ nsfont = [NSFont systemFontOfSize:[NSFont smallSystemFontSize]];
+ break;
+ case wxOSX_SYSTEM_FONT_SMALL_BOLD:
+ nsfont = [NSFont boldSystemFontOfSize:[NSFont smallSystemFontSize]];
+ break;
+ case wxOSX_SYSTEM_FONT_MINI:
+ nsfont = [NSFont systemFontOfSize:
+ [NSFont systemFontSizeForControlSize:NSMiniControlSize]];
+ break;
+ case wxOSX_SYSTEM_FONT_MINI_BOLD:
+ nsfont = [NSFont boldSystemFontOfSize:
+ [NSFont systemFontSizeForControlSize:NSMiniControlSize]];
+ break;
+ case wxOSX_SYSTEM_FONT_LABELS:
+ nsfont = [NSFont labelFontOfSize:[NSFont labelFontSize]];
+ break;
+ case wxOSX_SYSTEM_FONT_VIEWS:
+ nsfont = [NSFont controlContentFontOfSize:0];
+ break;
+ default:
+ break;
+ }
+ [nsfont retain];
+ SetNativeInfoFromNSFont(nsfont, info);
+ return nsfont;
+}
+
+void wxNativeFontInfo::OSXValidateNSFontDescriptor()
+{
+ NSFontDescriptor* desc = nil;
+ NSFontSymbolicTraits traits = 0;
+ float weight = 0;
+
+ if (m_weight == wxFONTWEIGHT_BOLD)
+ {
+ traits |= NSFontBoldTrait;
+ weight = 1.0;
+ }
+ else if (m_weight == wxFONTWEIGHT_LIGHT)
+ weight = -1;
+
+ if (m_style == wxFONTSTYLE_ITALIC || m_style == wxFONTSTYLE_SLANT)
+ traits |= NSFontItalicTrait;
+
+ desc = [NSFontDescriptor fontDescriptorWithFontAttributes:
+ [NSDictionary dictionaryWithObjectsAndKeys:
+ wxCFStringRef(m_faceName).AsNSString(), NSFontFamilyAttribute,
+ [NSNumber numberWithFloat:m_pointSize], NSFontSizeAttribute,
+ [NSNumber numberWithUnsignedInt:traits], NSFontSymbolicTrait,
+ [NSNumber numberWithFloat:weight],NSFontWeightTrait,
+ nil]];
+
+ wxMacCocoaRetain(desc);
+ m_nsFontDescriptor = desc;
+}
+
+WX_NSFont wxFont::OSXCreateNSFont(const wxNativeFontInfo* info)
+{
+ NSFont* nsFont;
+ nsFont = [NSFont fontWithDescriptor:info->m_nsFontDescriptor size:info->m_pointSize];
+ wxMacCocoaRetain(nsFont);
+ return nsFont;
+}
+
+#endif
+
+#if wxOSX_USE_IPHONE
+
+WX_UIFont wxFont::OSXCreateUIFont(wxOSXSystemFont font, wxNativeFontInfo* info)
+{
+ UIFont* uifont;
+ switch( font )
+ {
+ case wxOSX_SYSTEM_FONT_NORMAL:
+ uifont = [UIFont systemFontOfSize:[UIFont systemFontSize]];
+ break;
+ case wxOSX_SYSTEM_FONT_BOLD:
+ uifont = [UIFont boldSystemFontOfSize:[UIFont systemFontSize]];
+ break;
+ case wxOSX_SYSTEM_FONT_MINI:
+ case wxOSX_SYSTEM_FONT_SMALL:
+ uifont = [UIFont systemFontOfSize:[UIFont smallSystemFontSize]];
+ break;
+ case wxOSX_SYSTEM_FONT_MINI_BOLD:
+ case wxOSX_SYSTEM_FONT_SMALL_BOLD:
+ uifont = [UIFont boldSystemFontOfSize:[UIFont smallSystemFontSize]];
+ break;
+ case wxOSX_SYSTEM_FONT_VIEWS:
+ case wxOSX_SYSTEM_FONT_LABELS:
+ uifont = [UIFont systemFontOfSize:[UIFont labelFontSize]];
+ break;
+ default:
+ break;
+ }
+ [uifont retain];
+ if ( info->m_faceName.empty())
+ {
+ wxFontStyle fontstyle = wxFONTSTYLE_NORMAL;
+ wxFontWeight fontweight = wxFONTWEIGHT_NORMAL;
+ bool underlined = false;
+
+ int size = (int) ([uifont pointSize]+0.5);
+ /*
+ NSFontSymbolicTraits traits = [desc symbolicTraits];
+
+ if ( traits & NSFontBoldTrait )
+ fontweight = wxFONTWEIGHT_BOLD ;
+ else
+ fontweight = wxFONTWEIGHT_NORMAL ;
+ if ( traits & NSFontItalicTrait )
+ fontstyle = wxFONTSTYLE_ITALIC ;
+ */
+ wxCFStringRef fontname( wxCFRetain([uifont familyName]) );
+ info->Init(size,wxFONTFAMILY_DEFAULT,fontstyle,fontweight,underlined,
+ fontname.AsString(), wxFONTENCODING_DEFAULT);
+
+ }
+ return uifont;
+}
+
+WX_UIFont wxFont::OSXCreateUIFont(const wxNativeFontInfo* info)
+{
+ UIFont* uiFont;
+ uiFont = [UIFont fontWithName:wxCFStringRef(info->m_faceName).AsNSString() size:info->m_pointSize];
+ wxMacCocoaRetain(uiFont);
+ return uiFont;