switching implementation to current base technologies

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@38950 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Stefan Csomor
2006-04-29 05:37:31 +00:00
parent 753d02e833
commit 2a0155df72

View File

@@ -46,7 +46,7 @@ public:
, m_underlined(false) , m_underlined(false)
, m_faceName(wxT("applicationfont")) , m_faceName(wxT("applicationfont"))
, m_encoding(wxFONTENCODING_DEFAULT) , m_encoding(wxFONTENCODING_DEFAULT)
, m_macFontNum(0) , m_macFontFamily(0)
, m_macFontSize(0) , m_macFontSize(0)
, m_macFontStyle(0) , m_macFontStyle(0)
, m_macATSUStyle(0) , m_macATSUStyle(0)
@@ -66,7 +66,7 @@ public:
, m_underlined(data.m_underlined) , m_underlined(data.m_underlined)
, m_faceName(data.m_faceName) , m_faceName(data.m_faceName)
, m_encoding(data.m_encoding) , m_encoding(data.m_encoding)
, m_macFontNum(data.m_macFontNum) , m_macFontFamily(data.m_macFontFamily)
, m_macFontSize(data.m_macFontSize) , m_macFontSize(data.m_macFontSize)
, m_macFontStyle(data.m_macFontStyle) , m_macFontStyle(data.m_macFontStyle)
, m_macATSUStyle(0) , m_macATSUStyle(0)
@@ -91,7 +91,7 @@ public:
, m_underlined(underlined) , m_underlined(underlined)
, m_faceName(faceName) , m_faceName(faceName)
, m_encoding(encoding) , m_encoding(encoding)
, m_macFontNum(0) , m_macFontFamily(0)
, m_macFontSize(0) , m_macFontSize(0)
, m_macFontStyle(0) , m_macFontStyle(0)
, m_macATSUStyle(0) , m_macATSUStyle(0)
@@ -132,9 +132,9 @@ protected:
bool m_noAA; // No anti-aliasing bool m_noAA; // No anti-aliasing
public: public:
short m_macFontNum; FMFontFamily m_macFontFamily;
short m_macFontSize; FMFontSize m_macFontSize;
Style m_macFontStyle; FMFontStyle m_macFontStyle;
// ATSU Font Information // ATSU Font Information
@@ -144,7 +144,7 @@ public:
// included in the ATSU font id // included in the ATSU font id
ATSUStyle m_macATSUStyle ; ATSUStyle m_macATSUStyle ;
ATSUFontID m_macATSUFontID; ATSUFontID m_macATSUFontID;
Style m_macATSUAdditionalQDStyles ; FMFontStyle m_macATSUAdditionalQDStyles ;
// for true themeing support we must store the correct font // for true themeing support we must store the correct font
// information here, as this speeds up and optimizes rendering // information here, as this speeds up and optimizes rendering
@@ -179,7 +179,7 @@ void wxFontRefData::Init(int pointSize,
m_faceName = faceName; m_faceName = faceName;
m_encoding = encoding; m_encoding = encoding;
m_macFontNum = 0 ; m_macFontFamily = 0 ;
m_macFontSize = 0; m_macFontSize = 0;
m_macFontStyle = 0; m_macFontStyle = 0;
m_macATSUFontID = 0; m_macATSUFontID = 0;
@@ -201,12 +201,15 @@ wxFontRefData::~wxFontRefData()
void wxFontRefData::MacFindFont() void wxFontRefData::MacFindFont()
{ {
OSStatus status ;
Str255 qdFontName ;
if ( m_macThemeFontID != kThemeCurrentPortFont ) if ( m_macThemeFontID != kThemeCurrentPortFont )
{ {
Str255 fontName ; Style style ;
GetThemeFont( m_macThemeFontID, GetApplicationScript(), qdFontName, &m_macFontSize, &style );
GetThemeFont( m_macThemeFontID, GetApplicationScript(), fontName, &m_macFontSize, &m_macFontStyle ); m_macFontStyle = style ;
m_faceName = wxMacMakeStringFromPascal( fontName ) ; m_faceName = wxMacMakeStringFromPascal( qdFontName );
if ( m_macFontStyle & bold ) if ( m_macFontStyle & bold )
m_weight = wxBOLD ; m_weight = wxBOLD ;
else else
@@ -215,56 +218,57 @@ void wxFontRefData::MacFindFont()
m_style = wxITALIC ; m_style = wxITALIC ;
if ( m_macFontStyle & underline ) if ( m_macFontStyle & underline )
m_underlined = true ; m_underlined = true ;
::GetFNum( fontName, &m_macFontNum );
m_pointSize = m_macFontSize ; m_pointSize = m_macFontSize ;
m_macFontFamily = FMGetFontFamilyFromName( qdFontName );
} }
else else
{ {
if ( m_faceName.empty() ) if ( m_faceName.empty() )
{
if ( m_family == wxDEFAULT )
{
m_macFontFamily = GetAppFont();
FMGetFontFamilyName(m_macFontFamily,qdFontName);
m_faceName = wxMacMakeStringFromPascal( qdFontName );
}
else
{ {
switch ( m_family ) switch ( m_family )
{ {
case wxDEFAULT :
m_macFontNum = ::GetAppFont();
break ;
case wxSCRIPT : case wxSCRIPT :
case wxROMAN : case wxROMAN :
case wxDECORATIVE : case wxDECORATIVE :
::GetFNum( "\pTimes", &m_macFontNum ); m_faceName = wxT("Times");
break ; break ;
case wxSWISS : case wxSWISS :
#ifdef __WXMAC_OSX__ m_faceName = wxT("Lucida Grande");
::GetFNum( "\pLucida Grande", &m_macFontNum );
#else
::GetFNum( "\pGeneva", &m_macFontNum );
#endif
break ; break ;
case wxMODERN : case wxMODERN :
::GetFNum( "\pMonaco", &m_macFontNum ); m_faceName = wxT("Monaco");
break ; break ;
default: default:
m_faceName = wxT("Times");
break ; break ;
} }
wxMacStringToPascal( m_faceName , qdFontName );
Str255 name ; m_macFontFamily = FMGetFontFamilyFromName( qdFontName );
::GetFontName( m_macFontNum , name ) ; }
m_faceName = wxMacMakeStringFromPascal( name ) ;
} }
else else
{ {
if ( m_faceName == wxT("systemfont") ) if ( m_faceName == wxT("systemfont") )
m_macFontNum = ::GetSysFont() ; m_macFontFamily = GetSysFont();
else if ( m_faceName == wxT("applicationfont") ) else if ( m_faceName == wxT("applicationfont") )
m_macFontNum = ::GetAppFont() ; m_macFontFamily = GetAppFont();
else else
{ {
Str255 fontname ; wxMacCFStringHolder cf( m_faceName, wxLocale::GetSystemEncoding() );
wxMacStringToPascal( m_faceName , fontname ) ; ATSFontFamilyRef atsfamily = ATSFontFamilyFindFromName( cf , kATSOptionFlagsDefault );
::GetFNum( fontname, &m_macFontNum); m_macFontFamily = FMGetFontFamilyFromATSFontFamilyRef( atsfamily );
} }
} }
@@ -280,41 +284,13 @@ void wxFontRefData::MacFindFont()
// we try to get as much styles as possible into ATSU // we try to get as much styles as possible into ATSU
Fixed atsuSize = IntToFixed( m_macFontSize ) ;
Style atsuStyle = normal ; // ATSUFontID and FMFont are equivalent
verify_noerr(::ATSUFONDtoFontID(m_macFontNum, atsuStyle , (UInt32*)&m_macATSUFontID) ); FMFontStyle intrinsicStyle = 0 ;
if ( m_macFontStyle & bold ) status = FMGetFontFromFontFamilyInstance( m_macFontFamily , m_macFontStyle , &m_macATSUFontID , &intrinsicStyle);
{ wxASSERT_MSG( status == noErr , wxT("couldn't get an ATSUFont from font family") );
ATSUFontID test ;
if ( ::ATSUFONDtoFontID(m_macFontNum, atsuStyle | bold , &test) == noErr )
{
atsuStyle |= bold ;
m_macATSUFontID = test ;
}
}
if ( m_macFontStyle & italic ) m_macATSUAdditionalQDStyles = m_macFontStyle & (~intrinsicStyle );
{
ATSUFontID test ;
if ( ::ATSUFONDtoFontID(m_macFontNum, atsuStyle | italic , &test) == noErr )
{
atsuStyle |= italic ;
m_macATSUFontID = test ;
}
}
if ( m_macFontStyle & underline )
{
ATSUFontID test ;
if ( ::ATSUFONDtoFontID(m_macFontNum, atsuStyle | underline , &test) == noErr )
{
atsuStyle |= underline ;
m_macATSUFontID = test ;
}
}
m_macATSUAdditionalQDStyles = m_macFontStyle & (~atsuStyle ) ;
if ( m_macATSUStyle ) if ( m_macATSUStyle )
{ {
@@ -322,7 +298,7 @@ void wxFontRefData::MacFindFont()
m_macATSUStyle = NULL ; m_macATSUStyle = NULL ;
} }
OSStatus status = ::ATSUCreateStyle((ATSUStyle *)&m_macATSUStyle) ; status = ::ATSUCreateStyle((ATSUStyle *)&m_macATSUStyle);
wxASSERT_MSG( status == noErr , wxT("couldn't create ATSU style") ); wxASSERT_MSG( status == noErr , wxT("couldn't create ATSU style") );
ATSUAttributeTag atsuTags[] = ATSUAttributeTag atsuTags[] =
@@ -351,6 +327,7 @@ void wxFontRefData::MacFindFont()
Boolean kTrue = true ; Boolean kTrue = true ;
Boolean kFalse = false ; Boolean kFalse = false ;
Fixed atsuSize = IntToFixed( m_macFontSize );
ATSUVerticalCharacterType kHorizontal = kATSUStronglyHorizontal; ATSUVerticalCharacterType kHorizontal = kATSUStronglyHorizontal;
ATSUAttributeValuePtr atsuValues[sizeof(atsuTags) / sizeof(ATSUAttributeTag)] = ATSUAttributeValuePtr atsuValues[sizeof(atsuTags) / sizeof(ATSUAttributeTag)] =
{ {
@@ -587,7 +564,7 @@ short wxFont::MacGetFontNum() const
{ {
wxCHECK_MSG( M_FONTDATA != NULL , 0, wxT("invalid font") ); wxCHECK_MSG( M_FONTDATA != NULL , 0, wxT("invalid font") );
return M_FONTDATA->m_macFontNum; return M_FONTDATA->m_macFontFamily;
} }
short wxFont::MacGetFontSize() const short wxFont::MacGetFontSize() const