// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
-#pragma implementation "font.h"
-#endif
-
#include "wx/wxprec.h"
#include "wx/string.h"
#include "wx/fontutil.h"
#include "wx/gdicmn.h"
#include "wx/utils.h"
-
#include "wx/fontutil.h"
#include "wx/mac/private.h"
+
#ifndef __DARWIN__
#include <ATSUnicode.h>
#endif
+
IMPLEMENT_DYNAMIC_CLASS(wxFont, wxGDIObject)
+
class WXDLLEXPORT wxFontRefData: public wxGDIRefData
{
friend class WXDLLEXPORT wxFont;
+
public:
wxFontRefData()
: m_fontId(0)
}
virtual ~wxFontRefData();
- void SetNoAntiAliasing( bool no = TRUE ) { m_noAA = no; }
- bool GetNoAntiAliasing() const { return m_noAA; }
-
+
+ void SetNoAntiAliasing( bool no = true )
+ { m_noAA = no; }
+
+ bool GetNoAntiAliasing() const
+ { return m_noAA; }
+
+ void MacFindFont() ;
+
protected:
// common part of all ctors
void Init(int size,
wxString m_faceName;
wxFontEncoding m_encoding;
bool m_noAA; // No anti-aliasing
-
+
public:
short m_macFontNum;
short m_macFontSize;
Style m_macFontStyle;
-
+
// ATSU Font Information
-
+
// this is split into an ATSU font id that may
// contain some styles (special bold fonts etc) and
// these are the additional qd styles that are not
ATSUStyle m_macATSUStyle ;
ATSUFontID m_macATSUFontID;
Style m_macATSUAdditionalQDStyles ;
-
+
// for true themeing support we must store the correct font
// information here, as this speeds up and optimizes rendering
ThemeFontID m_macThemeFontID ;
-
- wxNativeFontInfo m_info;
-public:
- void MacFindFont() ;
+ wxNativeFontInfo m_info;
};
+
+
// ============================================================================
// implementation
// ============================================================================
// ----------------------------------------------------------------------------
void wxFontRefData::Init(int pointSize,
- int family,
- int style,
- int weight,
- bool underlined,
- const wxString& faceName,
- wxFontEncoding encoding)
+ int family,
+ int style,
+ int weight,
+ bool underlined,
+ const wxString& faceName,
+ wxFontEncoding encoding)
{
m_style = style;
m_pointSize = pointSize;
m_macATSUFontID = 0;
m_macATSUAdditionalQDStyles = 0 ;
m_macATSUStyle = NULL ;
-
+
m_macThemeFontID = kThemeCurrentPortFont ;
- m_noAA = FALSE;
+ m_noAA = false;
}
wxFontRefData::~wxFontRefData()
void wxFontRefData::MacFindFont()
{
- if ( m_macThemeFontID != kThemeCurrentPortFont )
+ if ( m_macThemeFontID != kThemeCurrentPortFont )
{
Str255 fontName ;
- GetThemeFont(m_macThemeFontID , GetApplicationScript() , fontName , &m_macFontSize , &m_macFontStyle ) ;
+
+ GetThemeFont( m_macThemeFontID, GetApplicationScript(), fontName, &m_macFontSize, &m_macFontStyle );
m_faceName = wxMacMakeStringFromPascal( fontName ) ;
if ( m_macFontStyle & bold )
m_weight = wxBOLD ;
m_style = wxITALIC ;
if ( m_macFontStyle & underline )
m_underlined = true ;
- ::GetFNum( fontName, &m_macFontNum);
+ ::GetFNum( fontName, &m_macFontNum );
m_pointSize = m_macFontSize ;
}
else
{
- if( m_faceName.Length() == 0 )
+ if ( m_faceName.Length() == 0 )
{
- switch( m_family )
+ switch ( m_family )
{
case wxDEFAULT :
- m_macFontNum = ::GetAppFont() ;
+ m_macFontNum = ::GetAppFont();
break ;
+
case wxSCRIPT :
case wxROMAN :
case wxDECORATIVE :
-#ifdef __WXMAC_OSX__
- ::GetFNum( "\pTimes" , &m_macFontNum) ;
-#else
- ::GetFNum( "\pTimes" , &m_macFontNum) ;
-#endif
+ ::GetFNum( "\pTimes", &m_macFontNum );
break ;
+
case wxSWISS :
#ifdef __WXMAC_OSX__
- ::GetFNum( "\pLucida Grande" , &m_macFontNum) ;
+ ::GetFNum( "\pLucida Grande", &m_macFontNum );
#else
- ::GetFNum( "\pGeneva" , &m_macFontNum) ;
+ ::GetFNum( "\pGeneva", &m_macFontNum );
#endif
break ;
+
case wxMODERN :
-#ifdef __WXMAC_OSX__
- ::GetFNum( "\pMonaco" , &m_macFontNum) ;
-#else
- ::GetFNum( "\pMonaco" , &m_macFontNum) ;
-#endif
+ ::GetFNum( "\pMonaco", &m_macFontNum );
+ break ;
+
+ default:
break ;
}
+
Str255 name ;
::GetFontName( m_macFontNum , name ) ;
m_faceName = wxMacMakeStringFromPascal( name ) ;
m_macFontStyle = 0;
if (m_weight == wxBOLD)
m_macFontStyle |= bold;
- if (m_style == wxITALIC || m_style == wxSLANT)
+ if (m_style == wxITALIC || m_style == wxSLANT)
m_macFontStyle |= italic;
- if (m_underlined)
+ if (m_underlined)
m_macFontStyle |= underline;
m_macFontSize = m_pointSize ;
}
Fixed atsuSize = IntToFixed( m_macFontSize ) ;
Style atsuStyle = normal ;
- verify_noerr(::ATSUFONDtoFontID(m_macFontNum, atsuStyle , (UInt32*)&m_macATSUFontID) );
+ verify_noerr(::ATSUFONDtoFontID(m_macFontNum, atsuStyle , (UInt32*)&m_macATSUFontID) );
if ( m_macFontStyle & bold )
{
ATSUFontID test ;
m_macATSUFontID = test ;
}
}
+
if ( m_macFontStyle & italic )
{
ATSUFontID test ;
m_macATSUFontID = test ;
}
}
+
if ( m_macFontStyle & underline )
{
ATSUFontID test ;
m_macATSUFontID = test ;
}
}
-
+
m_macATSUAdditionalQDStyles = m_macFontStyle & (~atsuStyle ) ;
if ( m_macATSUStyle )
::ATSUDisposeStyle((ATSUStyle)m_macATSUStyle);
m_macATSUStyle = NULL ;
}
+
OSStatus status = ::ATSUCreateStyle((ATSUStyle *)&m_macATSUStyle) ;
wxASSERT_MSG( status == noErr , wxT("couldn't create ATSU style") ) ;
+
ATSUAttributeTag atsuTags[] =
{
kATSUFontTag ,
kATSUQDUnderlineTag ,
kATSUQDCondensedTag ,
kATSUQDExtendedTag ,
- } ;
- ByteCount atsuSizes[sizeof(atsuTags)/sizeof(ATSUAttributeTag)] =
+ };
+ ByteCount atsuSizes[sizeof(atsuTags) / sizeof(ATSUAttributeTag)] =
{
sizeof( ATSUFontID ) ,
sizeof( Fixed ) ,
sizeof( Boolean ) ,
sizeof( Boolean ) ,
sizeof( Boolean ) ,
- } ;
+ };
+
Boolean kTrue = true ;
Boolean kFalse = false ;
ATSUVerticalCharacterType kHorizontal = kATSUStronglyHorizontal;
- ATSUAttributeValuePtr atsuValues[sizeof(atsuTags)/sizeof(ATSUAttributeTag)] =
+ ATSUAttributeValuePtr atsuValues[sizeof(atsuTags) / sizeof(ATSUAttributeTag)] =
{
&m_macATSUFontID ,
&atsuSize ,
(m_macATSUAdditionalQDStyles & underline) ? &kTrue : &kFalse ,
(m_macATSUAdditionalQDStyles & condense) ? &kTrue : &kFalse ,
(m_macATSUAdditionalQDStyles & extend) ? &kTrue : &kFalse ,
- } ;
- status = ::ATSUSetAttributes((ATSUStyle)m_macATSUStyle, sizeof(atsuTags)/sizeof(ATSUAttributeTag) ,
+ };
+
+ status = ::ATSUSetAttributes(
+ (ATSUStyle)m_macATSUStyle,
+ sizeof(atsuTags) / sizeof(ATSUAttributeTag) ,
atsuTags, atsuSizes, atsuValues);
- wxASSERT_MSG( status == noErr , wxT("couldn't Modify ATSU style") ) ;
+ wxASSERT_MSG( status == noErr , wxT("couldn't modify ATSU style") ) ;
}
// ----------------------------------------------------------------------------
bool wxFont::Create(const wxNativeFontInfo& info)
{
- return Create(info.pointSize, info.family, info.style, info.weight,
- info.underlined, info.faceName, info.encoding);
+ return Create(
+ info.pointSize, info.family, info.style, info.weight,
+ info.underlined, info.faceName, info.encoding );
}
wxFont::wxFont(const wxString& fontdesc)
}
bool wxFont::Create(int pointSize,
- int family,
- int style,
- int weight,
- bool underlined,
- const wxString& faceName,
- wxFontEncoding encoding)
+ int family,
+ int style,
+ int weight,
+ bool underlined,
+ const wxString& faceName,
+ wxFontEncoding encoding)
{
UnRef();
- m_refData = new wxFontRefData(pointSize, family, style, weight,
- underlined, faceName, encoding);
+
+ m_refData = new wxFontRefData(
+ pointSize, family, style, weight,
+ underlined, faceName, encoding);
RealizeResource();
- return TRUE;
+ return true;
}
-bool wxFont::MacCreateThemeFont(wxUint16 themeFontID )
+bool wxFont::MacCreateThemeFont(wxUint16 themeFontID)
{
UnRef();
- m_refData = new wxFontRefData(12, wxDEFAULT , wxFONTSTYLE_NORMAL , wxFONTWEIGHT_NORMAL ,false, wxEmptyString, wxFONTENCODING_DEFAULT);
+
+ m_refData = new wxFontRefData(
+ 12, wxDEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL,
+ false, wxEmptyString, wxFONTENCODING_DEFAULT );
+
M_FONTDATA->m_macThemeFontID = themeFontID ;
RealizeResource();
- return TRUE;
+ return true;
}
wxFont::~wxFont()
bool wxFont::RealizeResource()
{
M_FONTDATA->MacFindFont() ;
- return TRUE;
+
+ return true;
}
void wxFont::SetEncoding(wxFontEncoding encoding)
int wxFont::GetPointSize() const
{
wxCHECK_MSG( M_FONTDATA != NULL , 0, wxT("invalid font") );
+
return M_FONTDATA->m_pointSize;
}
int wxFont::GetFamily() const
{
wxCHECK_MSG( M_FONTDATA != NULL , 0, wxT("invalid font") );
+
return M_FONTDATA->m_family;
}
int wxFont::GetStyle() const
{
wxCHECK_MSG( M_FONTDATA != NULL , 0, wxT("invalid font") );
+
return M_FONTDATA->m_style;
}
int wxFont::GetWeight() const
{
wxCHECK_MSG( M_FONTDATA != NULL , 0, wxT("invalid font") );
+
return M_FONTDATA->m_weight;
}
bool wxFont::GetUnderlined() const
{
wxCHECK_MSG( M_FONTDATA != NULL , false, wxT("invalid font") );
+
return M_FONTDATA->m_underlined;
}
wxString wxFont::GetFaceName() const
{
wxCHECK_MSG( M_FONTDATA != NULL , wxEmptyString , wxT("invalid font") );
+
return M_FONTDATA->m_faceName;
}
wxFontEncoding wxFont::GetEncoding() const
{
wxCHECK_MSG( M_FONTDATA != NULL , wxFONTENCODING_DEFAULT , wxT("invalid font") );
+
return M_FONTDATA->m_encoding;
}
bool wxFont::GetNoAntiAliasing() const
{
wxCHECK_MSG( M_FONTDATA != NULL , false, wxT("invalid font") );
+
return M_FONTDATA->m_noAA;
}
short wxFont::MacGetFontNum() const
{
wxCHECK_MSG( M_FONTDATA != NULL , 0, wxT("invalid font") );
+
return M_FONTDATA->m_macFontNum;
}
short wxFont::MacGetFontSize() const
{
wxCHECK_MSG( M_FONTDATA != NULL , 0, wxT("invalid font") );
+
return M_FONTDATA->m_macFontSize;
}
wxByte wxFont::MacGetFontStyle() const
{
wxCHECK_MSG( M_FONTDATA != NULL , 0, wxT("invalid font") );
+
return M_FONTDATA->m_macFontStyle;
}
wxUint32 wxFont::MacGetATSUFontID() const
{
wxCHECK_MSG( M_FONTDATA != NULL , 0, wxT("invalid font") );
+
return M_FONTDATA->m_macATSUFontID;
}
-void* wxFont::MacGetATSUStyle() const
+void * wxFont::MacGetATSUStyle() const
{
wxCHECK_MSG( M_FONTDATA != NULL , NULL, wxT("invalid font") );
+
return M_FONTDATA->m_macATSUStyle;
}
wxUint32 wxFont::MacGetATSUAdditionalQDStyles() const
{
wxCHECK_MSG( M_FONTDATA != NULL , 0, wxT("invalid font") );
+
return M_FONTDATA->m_macATSUAdditionalQDStyles;
}
-wxUint16 wxFont::MacGetThemeFontID() const
+wxUint16 wxFont::MacGetThemeFontID() const
{
wxCHECK_MSG( M_FONTDATA != NULL , 0, wxT("invalid font") );
+
return M_FONTDATA->m_macThemeFontID;
}
-
-const wxNativeFontInfo *wxFont::GetNativeFontInfo() const
+const wxNativeFontInfo * wxFont::GetNativeFontInfo() const
{
wxCHECK_MSG( M_FONTDATA != NULL , NULL, wxT("invalid font") );
wxCHECK_MSG( Ok(), NULL, wxT("invalid font") );