1 /////////////////////////////////////////////////////////////////////////////
2 // Name: src/osx/carbon/font.cpp
3 // Purpose: wxFont class
4 // Author: Stefan Csomor
8 // Copyright: (c) Stefan Csomor
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
12 #include "wx/wxprec.h"
17 #include "wx/string.h"
20 #include "wx/gdicmn.h"
24 #include "wx/fontutil.h"
25 #include "wx/graphics.h"
26 #include "wx/settings.h"
28 #include "wx/osx/private.h"
30 #if wxOSX_USE_ATSU_TEXT && !wxOSX_USE_CARBON
31 // include themeing support
32 #include <Carbon/Carbon.h>
38 IMPLEMENT_DYNAMIC_CLASS(wxFont
, wxGDIObject
)
41 class WXDLLEXPORT wxFontRefData
: public wxGDIRefData
46 Init(10, wxDEFAULT
, wxNORMAL
, wxNORMAL
,
47 false, wxT("applicationfont"), wxFONTENCODING_DEFAULT
);
50 wxFontRefData(const wxFontRefData
& data
)
52 Init(data
.m_pointSize
, data
.m_family
, data
.m_style
, data
.m_weight
,
53 data
.m_underlined
, data
.m_faceName
, data
.m_encoding
);
56 wxFontRefData(int size
,
61 const wxString
& faceName
,
62 wxFontEncoding encoding
)
64 Init(size
, family
, style
, weight
, underlined
, faceName
, encoding
);
67 #if wxOSX_USE_CORE_TEXT
68 wxFontRefData( wxUint32 coreTextFontType
);
69 wxFontRefData( CTFontRef font
);
70 wxFontRefData( CTFontDescriptorRef fontdescriptor
, int size
);
73 virtual ~wxFontRefData();
75 void SetNoAntiAliasing( bool no
= true ) { m_noAA
= no
; }
77 bool GetNoAntiAliasing() const { return m_noAA
; }
79 void SetPointSize( int size
)
82 MacInvalidateNativeFont();
85 int GetPointSize() const { return m_pointSize
; }
87 void SetFamily( int family
)
90 MacInvalidateNativeFont();
94 int GetFamily() const { return m_family
; }
96 void SetStyle( int style
)
99 MacInvalidateNativeFont();
103 int GetStyle() const { return m_style
; }
105 void SetWeight( int weight
)
108 MacInvalidateNativeFont();
112 int GetWeight() const { return m_weight
; }
114 void SetUnderlined( bool u
)
117 MacInvalidateNativeFont();
120 bool GetUnderlined() const { return m_underlined
; }
122 void SetFaceName( const wxString
& facename
)
124 m_faceName
= facename
;
125 MacInvalidateNativeFont();
128 const wxString
& GetFaceName() const { return m_faceName
; }
130 void SetEncoding( wxFontEncoding encoding
)
132 m_encoding
= encoding
;
133 MacInvalidateNativeFont();
136 wxFontEncoding
GetEncoding() const { return m_encoding
; }
138 void MacInvalidateNativeFont();
143 // common part of all ctors
149 const wxString
& faceName
,
150 wxFontEncoding encoding
);
152 #if wxOSX_USE_CORE_TEXT
153 void Init( CTFontRef font
);
155 // font characterstics
162 wxFontEncoding m_encoding
;
163 bool m_noAA
; // No anti-aliasing
166 #if wxOSX_USE_ATSU_TEXT
167 FMFontFamily m_macFontFamily
;
168 FMFontSize m_macFontSize
;
169 FMFontStyle m_macFontStyle
;
171 // ATSU Font Information
173 // this is split into an ATSU font id that may
174 // contain some styles (special bold fonts etc) and
175 // these are the additional qd styles that are not
176 // included in the ATSU font id
177 ATSUFontID m_macATSUFontID
;
178 FMFontStyle m_macATSUAdditionalQDStyles
;
180 // for true themeing support we must store the correct font
181 // information here, as this speeds up and optimizes rendering
182 ThemeFontID m_macThemeFontID
;
184 #if wxOSX_USE_CORE_TEXT
185 wxCFRef
<CTFontRef
> m_ctFont
;
187 #if wxOSX_USE_CORE_TEXT || wxOSX_USE_ATSU_TEXT
188 ATSUStyle m_macATSUStyle
;
190 wxNativeFontInfo m_info
;
193 #define M_FONTDATA ((wxFontRefData*)m_refData)
196 // ============================================================================
198 // ============================================================================
200 // ----------------------------------------------------------------------------
202 // ----------------------------------------------------------------------------
204 void wxFontRefData::Init(int pointSize
,
209 const wxString
& faceName
,
210 wxFontEncoding encoding
)
213 m_pointSize
= (pointSize
== -1) ? wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT
).GetPointSize() : pointSize
;
217 m_underlined
= underlined
;
218 m_faceName
= faceName
;
219 m_encoding
= encoding
;
221 #if wxOSX_USE_ATSU_TEXT
222 m_macFontFamily
= 0 ;
226 m_macATSUAdditionalQDStyles
= 0 ;
227 m_macThemeFontID
= kThemeCurrentPortFont
;
229 #if wxOSX_USE_CORE_TEXT || wxOSX_USE_ATSU_TEXT
230 m_macATSUStyle
= NULL
;
234 wxFontRefData::~wxFontRefData()
236 #if wxOSX_USE_CORE_TEXT || wxOSX_USE_ATSU_TEXT
237 if ( m_macATSUStyle
)
239 ::ATSUDisposeStyle((ATSUStyle
)m_macATSUStyle
);
240 m_macATSUStyle
= NULL
;
245 void wxFontRefData::MacInvalidateNativeFont()
247 #if wxOSX_USE_CORE_TEXT
250 #if wxOSX_USE_CORE_TEXT || wxOSX_USE_ATSU_TEXT
251 if ( m_macATSUStyle
)
253 ::ATSUDisposeStyle((ATSUStyle
)m_macATSUStyle
);
254 m_macATSUStyle
= NULL
;
259 #if wxOSX_USE_CORE_TEXT
261 /* from Core Text Manual Common Operations */
263 static CTFontDescriptorRef
wxMacCreateCTFontDescriptor(CFStringRef iFamilyName
, CTFontSymbolicTraits iTraits
)
265 CTFontDescriptorRef descriptor
= NULL
;
266 CFMutableDictionaryRef attributes
;
268 assert(iFamilyName
!= NULL
);
269 // Create a mutable dictionary to hold our attributes.
270 attributes
= CFDictionaryCreateMutable(kCFAllocatorDefault
, 0,
271 &kCFTypeDictionaryKeyCallBacks
, &kCFTypeDictionaryValueCallBacks
);
272 check(attributes
!= NULL
);
274 if (attributes
!= NULL
) {
275 // Add a family name to our attributes.
276 CFDictionaryAddValue(attributes
, kCTFontFamilyNameAttribute
, iFamilyName
);
280 CFMutableDictionaryRef traits
;
281 CFNumberRef symTraits
;
283 // Create the traits dictionary.
284 symTraits
= CFNumberCreate(kCFAllocatorDefault
, kCFNumberSInt32Type
,
286 check(symTraits
!= NULL
);
288 if (symTraits
!= NULL
) {
289 // Create a dictionary to hold our traits values.
290 traits
= CFDictionaryCreateMutable(kCFAllocatorDefault
, 0,
291 &kCFTypeDictionaryKeyCallBacks
, &kCFTypeDictionaryValueCallBacks
);
292 check(traits
!= NULL
);
294 if (traits
!= NULL
) {
295 // Add the symbolic traits value to the traits dictionary.
296 CFDictionaryAddValue(traits
, kCTFontSymbolicTrait
, symTraits
);
298 // Add the traits attribute to our attributes.
299 CFDictionaryAddValue(attributes
, kCTFontTraitsAttribute
, traits
);
302 CFRelease(symTraits
);
305 // Create the font descriptor with our attributes
306 descriptor
= CTFontDescriptorCreateWithAttributes(attributes
);
307 check(descriptor
!= NULL
);
309 CFRelease(attributes
);
311 // Return our font descriptor.
315 wxFontRefData::wxFontRefData( wxUint32 coreTextFontType
)
317 CTFontRef font
= CTFontCreateUIFontForLanguage( coreTextFontType
, 0.0, NULL
) ;
318 if ( CTFontGetSize(font
) == 0 )
321 font
= CTFontCreateUIFontForLanguage( coreTextFontType
, 12.0, NULL
);
326 wxFontRefData::wxFontRefData( CTFontRef font
)
331 wxFontRefData::wxFontRefData( CTFontDescriptorRef fontdescriptor
, int size
)
335 wxCFRef
< CFNumberRef
> value( (CFNumberRef
) CTFontDescriptorCopyAttribute( fontdescriptor
, kCTFontSizeAttribute
) );
338 if ( CFNumberGetValue( value
, kCFNumberFloatType
, &fsize
) )
340 size
= (int)( fsize
+ 0.5 );
343 Init( CTFontCreateWithFontDescriptor(fontdescriptor
, size
,NULL
) );
346 void wxFontRefData::Init( CTFontRef font
)
348 Init(10, wxDEFAULT
, wxNORMAL
, wxNORMAL
,
349 false, wxT("applicationfont"), wxFONTENCODING_DEFAULT
);
351 m_ctFont
.reset( font
);
356 void wxFontRefData::MacFindFont()
359 #if wxOSX_USE_CORE_TEXT
360 if ( UMAGetSystemVersion() >= 0x1050 )
362 if ( m_faceName
.empty() && m_family
== wxDEFAULT
)
364 m_ctFont
.reset(CTFontCreateUIFontForLanguage( kCTFontSystemFontType
, 0.0, NULL
));
369 wxCFStringRef
name( CTFontCopyFamilyName( m_ctFont
) );
370 m_faceName
= name
.AsString();
371 m_pointSize
= CTFontGetSize(m_ctFont
) ;
372 CTFontSymbolicTraits traits
= CTFontGetSymbolicTraits( m_ctFont
);
373 if ( traits
& kCTFontItalicTrait
)
375 if ( traits
& kCTFontBoldTrait
)
380 if ( m_faceName
.empty() )
387 m_faceName
= wxT("Times");
391 m_faceName
= wxT("Helvetica");
396 m_faceName
= wxT("Courier");
397 if ( m_style
== wxITALIC
&& m_weight
== wxNORMAL
)
404 m_faceName
= wxT("Times");
410 CTFontSymbolicTraits traits
= 0;
412 if (m_weight
== wxBOLD
)
413 traits
|= kCTFontBoldTrait
;
414 if (m_style
== wxITALIC
|| m_style
== wxSLANT
)
415 traits
|= kCTFontItalicTrait
;
418 wxString lookupnameWithSize
= wxString::Format( "%s_%ld_%ld", m_faceName
.c_str(), traits
, m_pointSize
);
420 static std::map
< std::wstring
, wxCFRef
< CTFontRef
> > fontcache
;
421 m_ctFont
= fontcache
[ std::wstring(lookupnameWithSize
.wc_str()) ];
424 // QD selection algorithm is the fastest by orders of magnitude on 10.5
425 if ( m_faceName
.IsAscii() )
428 if (m_weight
== wxBOLD
)
430 if (m_style
== wxITALIC
|| m_style
== wxSLANT
)
434 wxMacStringToPascal( m_faceName
, qdFontName
);
435 m_ctFont
.reset( CTFontCreateWithQuickdrawInstance(qdFontName
, 0 , qdstyle
, m_pointSize
) );
440 static std::map
< std::wstring
, wxCFRef
< CTFontDescriptorRef
> > fontdescriptorcache
;
441 wxString lookupname
= wxString::Format( "%s_%ld", m_faceName
.c_str(), traits
);
442 // descriptor caching
443 wxCFRef
< CTFontDescriptorRef
> descriptor
= fontdescriptorcache
[ std::wstring(lookupname
.wc_str()) ];
446 wxCFStringRef
cf( m_faceName
, wxLocale::GetSystemEncoding() );
447 descriptor
.reset( wxMacCreateCTFontDescriptor( cf
, traits
) );
448 fontdescriptorcache
[ std::wstring(lookupname
.wc_str()) ] = descriptor
;
450 m_ctFont
.reset( CTFontCreateWithFontDescriptor( descriptor
, m_pointSize
, NULL
) );
451 CTFontSymbolicTraits received
= CTFontGetSymbolicTraits( m_ctFont
) & 0x03;
452 if ( traits
!= received
)
454 // TODO further fallbacks, synthesizing bold and italic, trying direct PostScript names etc
458 fontcache
[ std::wstring(lookupnameWithSize
.wc_str()) ] = m_ctFont
;
459 #if 1 // debugging coretext font matching
460 CTFontSymbolicTraits received
= CTFontGetSymbolicTraits( m_ctFont
) & 0x03;
461 if ( received
!= traits
)
463 float angle
= CTFontGetSlantAngle( m_ctFont
);
464 CFDictionaryRef dict
= CTFontCopyTraits( m_ctFont
);
465 CFNumberRef number
= (CFNumberRef
) CFDictionaryGetValue(dict
, kCTFontWeightTrait
);
467 CFNumberGetValue( number
, kCFNumberFloatType
, &floatnumber
);
469 printf( wxString::Format( "font %s expected %d but got %d traits, %f angle \n" , m_faceName
.c_str(), traits
, received
, angle
) );
478 #if wxOSX_USE_ATSU_TEXT
479 OSStatus status
= noErr
;
480 ATSFontRef atsfont
= CTFontGetPlatformFont( m_ctFont
, NULL
);
481 FMFont fmfont
= FMGetFontFromATSFontRef( atsfont
);
482 ATSUAttributeTag atsuTags
[] =
486 kATSUVerticalCharacterTag
,
489 kATSUQDUnderlineTag
,
491 ByteCount atsuSizes
[sizeof(atsuTags
) / sizeof(ATSUAttributeTag
)] =
493 sizeof( ATSUFontID
) ,
495 sizeof( ATSUVerticalCharacterType
),
500 Boolean kTrue
= true ;
501 Boolean kFalse
= false ;
503 Fixed atsuSize
= IntToFixed( m_pointSize
);
504 ATSUVerticalCharacterType kHorizontal
= kATSUStronglyHorizontal
;
505 ATSUAttributeValuePtr atsuValues
[sizeof(atsuTags
) / sizeof(ATSUAttributeTag
)] =
510 (m_weight
== wxBOLD
) ? &kTrue
: &kFalse
,
511 (m_style
== wxITALIC
|| m_style
== wxSLANT
) ? &kTrue
: &kFalse
,
512 (m_underlined
) ? &kTrue
: &kFalse
,
515 if ( m_macATSUStyle
)
517 ::ATSUDisposeStyle((ATSUStyle
)m_macATSUStyle
);
518 m_macATSUStyle
= NULL
;
520 status
= ::ATSUCreateStyle((ATSUStyle
*)&m_macATSUStyle
);
521 wxASSERT_MSG( status
== noErr
, wxT("couldn't create ATSU style") );
522 status
= ::ATSUSetAttributes(
523 (ATSUStyle
)m_macATSUStyle
,
524 sizeof(atsuTags
) / sizeof(ATSUAttributeTag
) ,
525 atsuTags
, atsuSizes
, atsuValues
);
529 #if wxOSX_USE_ATSU_TEXT
531 OSStatus status
= noErr
;
533 if ( m_macThemeFontID
!= kThemeCurrentPortFont
)
536 GetThemeFont( m_macThemeFontID
, GetApplicationScript(), qdFontName
, &m_macFontSize
, &style
);
537 if ( m_macFontSize
== 0 )
539 m_macFontStyle
= style
;
540 m_faceName
= wxMacMakeStringFromPascal( qdFontName
);
541 if ( m_macFontStyle
& bold
)
544 m_weight
= wxNORMAL
;
545 if ( m_macFontStyle
& italic
)
547 if ( m_macFontStyle
& underline
)
548 m_underlined
= true ;
549 m_pointSize
= m_macFontSize
;
550 m_macFontFamily
= FMGetFontFamilyFromName( qdFontName
);
554 if ( m_faceName
.empty() )
556 if ( m_family
== wxDEFAULT
)
558 m_macFontFamily
= GetAppFont();
559 FMGetFontFamilyName(m_macFontFamily
,qdFontName
);
560 m_faceName
= wxMacMakeStringFromPascal( qdFontName
);
569 m_faceName
= wxT("Times");
573 m_faceName
= wxT("Helvetica");
578 m_faceName
= wxT("Courier");
582 m_faceName
= wxT("Times");
585 wxMacStringToPascal( m_faceName
, qdFontName
);
586 m_macFontFamily
= FMGetFontFamilyFromName( qdFontName
);
587 if ( m_macFontFamily
== kInvalidFontFamily
)
589 wxLogDebug( wxT("ATSFontFamilyFindFromName failed for %s"), m_faceName
.c_str() );
590 m_macFontFamily
= GetAppFont();
596 if ( m_faceName
== wxT("systemfont") )
597 m_macFontFamily
= GetSysFont();
598 else if ( m_faceName
== wxT("applicationfont") )
599 m_macFontFamily
= GetAppFont();
602 wxCFStringRef
cf( m_faceName
, wxLocale::GetSystemEncoding() );
603 ATSFontFamilyRef atsfamily
= ATSFontFamilyFindFromName( cf
, kATSOptionFlagsDefault
);
604 if ( atsfamily
== (ATSFontFamilyRef
) -1 )
606 wxLogDebug( wxT("ATSFontFamilyFindFromName failed for ") + m_faceName
);
607 m_macFontFamily
= GetAppFont();
610 m_macFontFamily
= FMGetFontFamilyFromATSFontFamilyRef( atsfamily
);
615 if (m_weight
== wxBOLD
)
616 m_macFontStyle
|= bold
;
617 if (m_style
== wxITALIC
|| m_style
== wxSLANT
)
618 m_macFontStyle
|= italic
;
620 m_macFontStyle
|= underline
;
621 m_macFontSize
= m_pointSize
;
624 // we try to get as much styles as possible into ATSU
627 // ATSUFontID and FMFont are equivalent
628 FMFontStyle intrinsicStyle
= 0 ;
629 status
= FMGetFontFromFontFamilyInstance( m_macFontFamily
, m_macFontStyle
, &m_macATSUFontID
, &intrinsicStyle
);
630 wxASSERT_MSG( status
== noErr
, wxT("couldn't get an ATSUFont from font family") );
631 m_macATSUAdditionalQDStyles
= m_macFontStyle
& (~intrinsicStyle
);
633 if ( m_macATSUStyle
)
635 ::ATSUDisposeStyle((ATSUStyle
)m_macATSUStyle
);
636 m_macATSUStyle
= NULL
;
639 status
= ::ATSUCreateStyle((ATSUStyle
*)&m_macATSUStyle
);
640 wxASSERT_MSG( status
== noErr
, wxT("couldn't create ATSU style") );
642 ATSUAttributeTag atsuTags
[] =
646 kATSUVerticalCharacterTag
,
649 kATSUQDUnderlineTag
,
650 kATSUQDCondensedTag
,
653 ByteCount atsuSizes
[sizeof(atsuTags
) / sizeof(ATSUAttributeTag
)] =
655 sizeof( ATSUFontID
) ,
657 sizeof( ATSUVerticalCharacterType
),
665 Boolean kTrue
= true ;
666 Boolean kFalse
= false ;
668 Fixed atsuSize
= IntToFixed( m_macFontSize
);
669 ATSUVerticalCharacterType kHorizontal
= kATSUStronglyHorizontal
;
670 ATSUAttributeValuePtr atsuValues
[sizeof(atsuTags
) / sizeof(ATSUAttributeTag
)] =
675 (m_macATSUAdditionalQDStyles
& bold
) ? &kTrue
: &kFalse
,
676 (m_macATSUAdditionalQDStyles
& italic
) ? &kTrue
: &kFalse
,
677 (m_macATSUAdditionalQDStyles
& underline
) ? &kTrue
: &kFalse
,
678 (m_macATSUAdditionalQDStyles
& condense
) ? &kTrue
: &kFalse
,
679 (m_macATSUAdditionalQDStyles
& extend
) ? &kTrue
: &kFalse
,
682 status
= ::ATSUSetAttributes(
683 (ATSUStyle
)m_macATSUStyle
,
684 sizeof(atsuTags
) / sizeof(ATSUAttributeTag
) ,
685 atsuTags
, atsuSizes
, atsuValues
);
687 wxASSERT_MSG( status
== noErr
, wxT("couldn't modify ATSU style") );
693 // ----------------------------------------------------------------------------
695 // ----------------------------------------------------------------------------
697 bool wxFont::Create(const wxNativeFontInfo
& info
)
700 info
.pointSize
, info
.family
, info
.style
, info
.weight
,
701 info
.underlined
, info
.faceName
, info
.encoding
);
704 wxFont::wxFont(const wxString
& fontdesc
)
706 wxNativeFontInfo info
;
707 if ( info
.FromString(fontdesc
) )
711 bool wxFont::Create(int pointSize
,
716 const wxString
& faceName
,
717 wxFontEncoding encoding
)
721 m_refData
= new wxFontRefData(
722 pointSize
, family
, style
, weight
,
723 underlined
, faceName
, encoding
);
730 #if wxOSX_USE_CORE_TEXT
732 bool wxFont::MacCreateFromUIFont(wxUint32 ctFontType
)
736 m_refData
= new wxFontRefData(ctFontType
);
742 bool wxFont::MacCreateFromCTFontDescriptor( const void * ctFontDescriptor
, int size
)
746 m_refData
= new wxFontRefData((CTFontDescriptorRef
)ctFontDescriptor
, size
);;
756 bool wxFont::MacCreateFromThemeFont(wxUint16 themeFontID
)
758 #if wxOSX_USE_CORE_TEXT
759 if ( UMAGetSystemVersion() >= 0x1050)
761 return MacCreateFromUIFont(HIThemeGetUIFontType(themeFontID
));
764 #if wxOSX_USE_ATSU_TEXT
768 m_refData
= new wxFontRefData(
769 12, wxDEFAULT
, wxFONTSTYLE_NORMAL
, wxFONTWEIGHT_NORMAL
,
770 false, wxEmptyString
, wxFONTENCODING_DEFAULT
);
772 M_FONTDATA
->m_macThemeFontID
= themeFontID
;
785 bool wxFont::RealizeResource()
787 M_FONTDATA
->MacFindFont();
792 void wxFont::SetEncoding(wxFontEncoding encoding
)
796 M_FONTDATA
->SetEncoding( encoding
);
801 void wxFont::Unshare()
803 // Don't change shared data
806 m_refData
= new wxFontRefData();
810 wxFontRefData
* ref
= new wxFontRefData(*(wxFontRefData
*)m_refData
);
816 wxGDIRefData
*wxFont::CreateGDIRefData() const
818 return new wxFontRefData
;
821 wxGDIRefData
*wxFont::CloneGDIRefData(const wxGDIRefData
*data
) const
823 return new wxFontRefData(*wx_static_cast(const wxFontRefData
*, data
));
826 void wxFont::SetPointSize(int pointSize
)
828 if ( M_FONTDATA
->GetPointSize() == pointSize
)
833 M_FONTDATA
->SetPointSize( pointSize
);
838 void wxFont::SetFamily(int family
)
842 M_FONTDATA
->SetFamily( family
);
847 void wxFont::SetStyle(int style
)
851 M_FONTDATA
->SetStyle( style
);
856 void wxFont::SetWeight(int weight
)
860 M_FONTDATA
->SetWeight( weight
);
865 bool wxFont::SetFaceName(const wxString
& faceName
)
869 M_FONTDATA
->SetFaceName( faceName
);
873 return wxFontBase::SetFaceName(faceName
);
876 void wxFont::SetUnderlined(bool underlined
)
880 M_FONTDATA
->SetUnderlined( underlined
);
885 void wxFont::SetNoAntiAliasing( bool no
)
889 M_FONTDATA
->SetNoAntiAliasing( no
);
894 // ----------------------------------------------------------------------------
896 // ----------------------------------------------------------------------------
898 // TODO: insert checks everywhere for M_FONTDATA == NULL!
900 int wxFont::GetPointSize() const
902 wxCHECK_MSG( M_FONTDATA
!= NULL
, 0, wxT("invalid font") );
904 return M_FONTDATA
->GetPointSize();
907 wxSize
wxFont::GetPixelSize() const
909 #if wxUSE_GRAPHICS_CONTEXT
910 // TODO: consider caching the value
911 wxGraphicsContext
* dc
= wxGraphicsContext::CreateFromNative((CGContextRef
) NULL
);
912 dc
->SetFont(*(wxFont
*)this,*wxBLACK
);
913 wxDouble width
, height
= 0;
914 dc
->GetTextExtent( wxT("g"), &width
, &height
, NULL
, NULL
);
916 return wxSize((int)width
, (int)height
);
918 return wxFontBase::GetPixelSize();
922 int wxFont::GetFamily() const
924 wxCHECK_MSG( M_FONTDATA
!= NULL
, 0, wxT("invalid font") );
926 return M_FONTDATA
->GetFamily();
929 int wxFont::GetStyle() const
931 wxCHECK_MSG( M_FONTDATA
!= NULL
, 0, wxT("invalid font") );
933 return M_FONTDATA
->GetStyle() ;
936 int wxFont::GetWeight() const
938 wxCHECK_MSG( M_FONTDATA
!= NULL
, 0, wxT("invalid font") );
940 return M_FONTDATA
->GetWeight();
943 bool wxFont::GetUnderlined() const
945 wxCHECK_MSG( M_FONTDATA
!= NULL
, false, wxT("invalid font") );
947 return M_FONTDATA
->GetUnderlined();
950 wxString
wxFont::GetFaceName() const
952 wxCHECK_MSG( M_FONTDATA
!= NULL
, wxEmptyString
, wxT("invalid font") );
954 return M_FONTDATA
->GetFaceName() ;
957 wxFontEncoding
wxFont::GetEncoding() const
959 wxCHECK_MSG( M_FONTDATA
!= NULL
, wxFONTENCODING_DEFAULT
, wxT("invalid font") );
961 return M_FONTDATA
->GetEncoding() ;
964 bool wxFont::GetNoAntiAliasing() const
966 wxCHECK_MSG( M_FONTDATA
!= NULL
, false, wxT("invalid font") );
968 return M_FONTDATA
->GetNoAntiAliasing();
971 #if wxOSX_USE_ATSU_TEXT
973 short wxFont::MacGetFontNum() const
975 wxCHECK_MSG( M_FONTDATA
!= NULL
, 0, wxT("invalid font") );
977 return M_FONTDATA
->m_macFontFamily
;
980 short wxFont::MacGetFontSize() const
982 wxCHECK_MSG( M_FONTDATA
!= NULL
, 0, wxT("invalid font") );
984 return M_FONTDATA
->m_macFontSize
;
987 wxByte
wxFont::MacGetFontStyle() const
989 wxCHECK_MSG( M_FONTDATA
!= NULL
, 0, wxT("invalid font") );
991 return M_FONTDATA
->m_macFontStyle
;
994 wxUint32
wxFont::MacGetATSUFontID() const
996 wxCHECK_MSG( M_FONTDATA
!= NULL
, 0, wxT("invalid font") );
998 return M_FONTDATA
->m_macATSUFontID
;
1001 wxUint32
wxFont::MacGetATSUAdditionalQDStyles() const
1003 wxCHECK_MSG( M_FONTDATA
!= NULL
, 0, wxT("invalid font") );
1005 return M_FONTDATA
->m_macATSUAdditionalQDStyles
;
1008 wxUint16
wxFont::MacGetThemeFontID() const
1010 wxCHECK_MSG( M_FONTDATA
!= NULL
, 0, wxT("invalid font") );
1012 return M_FONTDATA
->m_macThemeFontID
;
1016 #if wxOSX_USE_CORE_TEXT || wxOSX_USE_ATSU_TEXT
1017 void * wxFont::MacGetATSUStyle() const
1019 wxCHECK_MSG( M_FONTDATA
!= NULL
, NULL
, wxT("invalid font") );
1021 return M_FONTDATA
->m_macATSUStyle
;
1025 #if wxOSX_USE_CORE_TEXT
1027 const void * wxFont::MacGetCTFont() const
1029 wxCHECK_MSG( M_FONTDATA
!= NULL
, 0, wxT("invalid font") );
1031 return (CTFontRef
)(M_FONTDATA
->m_ctFont
);
1036 const wxNativeFontInfo
* wxFont::GetNativeFontInfo() const
1038 wxCHECK_MSG( M_FONTDATA
!= NULL
, NULL
, wxT("invalid font") );
1039 wxCHECK_MSG( Ok(), NULL
, wxT("invalid font") );
1041 M_FONTDATA
->m_info
.InitFromFont(*this);
1043 return &(M_FONTDATA
->m_info
);