#include "wx/defs.h"
#include "wx/string.h"
#include "wx/font.h"
+#include "wx/fontutil.h"
#include "wx/gdicmn.h"
+#include "wx/utils.h"
+
+#include "wx/fontutil.h"
+
+#include "wx/mac/private.h"
+#include "ATSUnicode.h"
#if !USE_SHARED_LIBRARIES
IMPLEMENT_DYNAMIC_CLASS(wxFont, wxGDIObject)
#endif
-
-
-
// ============================================================================
// implementation
// ============================================================================
m_faceName = faceName;
m_encoding = encoding;
- m_macFontNum = 0 ;
- m_macFontSize = 0;
- m_macFontStyle = 0;
+ m_macFontNum = 0 ;
+ m_macFontSize = 0;
+ m_macFontStyle = 0;
m_fontId = 0;
}
::GetFNum( "\pTimes" , &m_macFontNum) ;
break ;
case wxSWISS :
- ::GetFNum( "\pHelvetica" , &m_macFontNum) ;
+ ::GetFNum( "\pGeneva" , &m_macFontNum) ;
break ;
case wxMODERN :
::GetFNum( "\pMonaco" , &m_macFontNum) ;
m_macFontNum = ::GetAppFont() ;
else
{
- strcpy(wxBuffer, m_faceName);
- C2PStr(wxBuffer);
- ::GetFNum( (unsigned char*) wxBuffer, &m_macFontNum);
+#if TARGET_CARBON
+ c2pstrcpy( (StringPtr) wxBuffer, m_faceName ) ;
+#else
+ strcpy( (char *) wxBuffer, m_faceName ) ;
+ c2pstr( (char *) wxBuffer ) ;
+#endif
+ ::GetFNum( (StringPtr) wxBuffer, &m_macFontNum);
}
}
if (m_underlined)
m_macFontStyle |= underline;
m_macFontSize = m_pointSize ;
+
+ //TODO:if we supply the style as an additional parameter we must make a testing
+ //sequence in order to degrade gracefully while trying to maintain most of the style
+ //information, meanwhile we just take the normal font and apply the features after
+ OSStatus status = ::ATSUFONDtoFontID(m_macFontNum, normal /*qdStyle*/, (UInt32*)&m_macATSUFontID);
+ wxASSERT_MSG( status == noErr , "couldn't retrieve font identifier" ) ;
}
// ----------------------------------------------------------------------------
void wxFont::Init()
{
- if ( wxTheFontList )
- wxTheFontList->Append(this);
+}
+
+bool wxFont::Create(const wxNativeFontInfo& info)
+{
+ return Create(info.pointSize, info.family, info.style, info.weight,
+ info.underlined, info.faceName, info.encoding);
+}
+
+wxFont::wxFont(const wxString& fontdesc)
+{
+ wxNativeFontInfo info;
+ if ( info.FromString(fontdesc) )
+ (void)Create(info);
}
bool wxFont::Create(int pointSize,
wxFont::~wxFont()
{
- if (wxTheFontList)
- wxTheFontList->DeleteObject(this);
}
bool wxFont::RealizeResource()
return TRUE;
}
+void wxFont::SetEncoding(wxFontEncoding encoding)
+{
+ Unshare();
+
+ M_FONTDATA->m_encoding = encoding;
+
+ RealizeResource();
+}
+
void wxFont::Unshare()
{
// Don't change shared data
return M_FONTDATA->m_family;
}
-int wxFont::GetFontId() const
-{
- return M_FONTDATA->m_fontId;
-}
-
int wxFont::GetStyle() const
{
return M_FONTDATA->m_style;