/////////////////////////////////////////////////////////////////////////////
-// Name: font.cpp
+// Name: src/os2/font.cpp
// Purpose: wxFont class
// Author: David Webster
// Modified by:
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
+// For compilers that support precompilation, includes "wx.h".
+#include "wx/wxprec.h"
+
// ============================================================================
// declarations
// ============================================================================
// headers
// ----------------------------------------------------------------------------
- #include <malloc.h>
-// For compilers that support precompilation, includes "wx.h".
-#include "wx/wxprec.h"
+#include "wx/font.h"
#ifndef WX_PRECOMP
#include <stdio.h>
- #include "wx/setup.h"
#include "wx/list.h"
#include "wx/utils.h"
#include "wx/app.h"
- #include "wx/font.h"
+ #include "wx/log.h"
#endif // WX_PRECOMP
#include "wx/os2/private.h"
#include "wx/fontutil.h"
#include "wx/fontmap.h"
+#include "wx/encinfo.h"
#include "wx/tokenzr.h"
-IMPLEMENT_DYNAMIC_CLASS(wxFont, wxGDIObject)
+#include <malloc.h>
// ----------------------------------------------------------------------------
// wxFontRefData - the internal description of the font
public:
wxFontRefData()
{
- Init(-1, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, FALSE,
- "", wxFONTENCODING_DEFAULT);
+ Init(-1, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, false,
+ wxEmptyString, wxFONTENCODING_DEFAULT);
}
wxFontRefData( int nSize
- ,int nFamily
- ,int nStyle
- ,int nWeight
+ ,wxFontFamily nFamily
+ ,wxFontStyle nStyle
+ ,wxFontWeight nWeight
,bool bUnderlined
,const wxString& sFaceName
,wxFontEncoding vEncoding
//
inline int GetPointSize(void) const
{
- return m_bNativeFontInfoOk ? m_vNativeFontInfo.GetPointSize()
- : m_nPointSize;
+ //
+ // We don't use the actual native font point size since it is
+ // the chosen physical font, which is usually only and approximation
+ // of the desired outline font. The actual displayable point size
+ // is the one stored in the refData
+ //
+ return m_nPointSize;
}
- inline int GetFamily(void) const
+ inline wxFontFamily GetFamily(void) const
{
return m_nFamily;
}
- inline int GetStyle(void) const
+ inline wxFontStyle GetStyle(void) const
{
return m_bNativeFontInfoOk ? m_vNativeFontInfo.GetStyle()
: m_nStyle;
}
- inline int GetWeight(void) const
+ inline wxFontWeight GetWeight(void) const
{
return m_bNativeFontInfoOk ? m_vNativeFontInfo.GetWeight()
: m_nWeight;
m_nPointSize = nPointSize;
}
- inline void SetFamily(int nFamily)
+ inline void SetFamily(wxFontFamily nFamily)
{
m_nFamily = nFamily;
}
- inline void SetStyle(int nStyle)
+ inline void SetStyle(wxFontStyle nStyle)
{
if (m_bNativeFontInfoOk)
- m_vNativeFontInfo.SetStyle((wxFontStyle)nStyle);
+ m_vNativeFontInfo.SetStyle(nStyle);
else
m_nStyle = nStyle;
}
- inline void SetWeight(int nWeight)
+ inline void SetWeight(wxFontWeight nWeight)
{
if (m_bNativeFontInfoOk)
- m_vNativeFontInfo.SetWeight((wxFontWeight)nWeight);
+ m_vNativeFontInfo.SetWeight(nWeight);
else
m_nWeight = nWeight;
}
- inline void SetFaceName(const wxString& sFaceName)
+ inline bool SetFaceName(const wxString& sFaceName)
{
if (m_bNativeFontInfoOk)
- m_vNativeFontInfo.SetFaceName(sFaceName);
+ return m_vNativeFontInfo.SetFaceName(sFaceName);
else
m_sFaceName = sFaceName;
+ return true;
}
inline void SetUnderlined(bool bUnderlined)
// Common part of all ctors
//
void Init( int nSize
- ,int nFamily
- ,int nStyle
- ,int nWeight
+ ,wxFontFamily nFamily
+ ,wxFontStyle nStyle
+ ,wxFontWeight nWeight
,bool bUnderlined
,const wxString& rsFaceName
,wxFontEncoding vEncoding
,WXHANDLE hPS = 0
);
//
- // If TRUE, the pointer to the actual font is temporary and SHOULD NOT BE
+ // If true, the pointer to the actual font is temporary and SHOULD NOT BE
// DELETED by destructor
//
bool m_bTemporary;
// Font characterstics
//
int m_nPointSize;
- int m_nFamily;
- int m_nStyle;
- int m_nWeight;
+ wxFontFamily m_nFamily;
+ wxFontStyle m_nStyle;
+ wxFontWeight m_nWeight;
bool m_bUnderlined;
wxString m_sFaceName;
wxFontEncoding m_vEncoding;
bool m_bInternalPS; // Internally generated PS?
}; // end of CLASS wxFontRefData
+#define M_FONTDATA ((wxFontRefData*)m_refData)
+
// ============================================================================
// implementation
// ============================================================================
void wxFontRefData::Init(
int nPointSize
-, int nFamily
-, int nStyle
-, int nWeight
+, wxFontFamily nFamily
+, wxFontStyle nStyle
+, wxFontWeight nWeight
, bool bUnderlined
, const wxString& rsFaceName
, wxFontEncoding vEncoding
m_vEncoding = vEncoding;
m_hFont = 0;
- m_bNativeFontInfoOk = FALSE;
+ m_bNativeFontInfoOk = false;
m_nFontId = 0;
- m_bTemporary = FALSE;
+ m_bTemporary = false;
m_pFM = (PFONTMETRICS)NULL;
m_hPS = NULLHANDLE;
m_nNumFonts = 0;
m_hFont = hFont;
m_nFontId = (int)hFont;
- m_bNativeFontInfoOk = TRUE;
+ m_bNativeFontInfoOk = true;
m_vNativeFontInfo = rInfo;
- if (m_hPS == NULLHANDLE)
+ if (hPS == NULLHANDLE)
{
m_hPS = ::WinGetPS(HWND_DESKTOP);
- m_bInternalPS;
+ m_bInternalPS = true;
}
else
m_hPS = (HPS)hPS;
-}
+
+ m_nFontId = 0;
+ m_bTemporary = false;
+ m_pFM = (PFONTMETRICS)NULL;
+ m_nNumFonts = 0;
+} // end of wxFontRefData::Init
wxFontRefData::~wxFontRefData()
{
Free();
}
-bool wxFontRefData::Alloc(
- wxFont* pFont
-)
+bool wxFontRefData::Alloc( wxFont* pFont )
{
wxString sFaceName;
- long flId;
+ long flId = m_hFont;
+ long lRc;
+ ERRORID vError;
+ wxString sError;
if (!m_bNativeFontInfoOk)
{
wxFillLogFont( &m_vNativeFontInfo.fa
,&m_vNativeFontInfo.fn
- ,m_hPS
+ ,&m_hPS
+ ,&m_bInternalPS
,&flId
,sFaceName
,pFont
);
- m_bNativeFontInfoOk = TRUE;
+ m_bNativeFontInfoOk = true;
}
-
- if(::GpiCreateLogFont( m_hPS
- ,NULL
- ,flId
- ,&m_vNativeFontInfo.fa
- ) != GPI_ERROR)
- m_hFont = (WXHFONT)1;
-
- //
- // We don't actuall keep the font around if using a temporary PS
- //
- if (m_bInternalPS)
+ else
{
- if(m_hFont)
- ::GpiDeleteSetId( m_hPS
- ,flId
- );
-
- ::WinReleasePS(m_hPS);
+ if (flId == 0L)
+ flId = 1L;
+ else
+ flId++;
+ if (flId > 254)
+ flId = 1L;
+ }
+ if((lRc = ::GpiCreateLogFont( m_hPS
+ ,NULL
+ ,flId
+ ,&m_vNativeFontInfo.fa
+ )) != GPI_ERROR)
+ {
+ m_hFont = (WXHFONT)flId;
+ m_nFontId = flId;
}
- else
- //
- // Select the font into the Presentation space
- //
- ::GpiSetCharSet(m_hPS, flId); // sets font for presentation space
if (!m_hFont)
{
- wxLogLastError("CreateFont");
+ vError = ::WinGetLastError(vHabmain);
+ sError = wxPMErrorToStr(vError);
+ wxLogLastError(wxT("CreateFont"));
}
- //
- // Query for the actual metrics of the current font being used
- //
+ ::GpiSetCharSet(m_hPS, flId); // sets font for presentation space
::GpiQueryFontMetrics(m_hPS, sizeof(FONTMETRICS), &m_vNativeFontInfo.fm);
//
// Set refData members with the results
//
- m_hFont = (WXHFONT)m_nFontId;
memcpy(&m_vFattrs, &m_vNativeFontInfo.fa, sizeof(m_vFattrs));
memcpy(&m_vFname, &m_vNativeFontInfo.fn, sizeof(m_vFname));
- m_nPointSize = m_vNativeFontInfo.fm.lEmHeight;
- if (strcmp(m_vNativeFontInfo.fa.szFacename, "Times New Roman") == 0)
- m_nFamily = wxROMAN;
- else if (strcmp(m_vNativeFontInfo.fa.szFacename, "WarpSans") == 0)
- m_nFamily = wxSWISS;
- else if (strcmp(m_vNativeFontInfo.fa.szFacename, "Script") == 0)
- m_nFamily = wxSCRIPT;
- else if (strcmp(m_vNativeFontInfo.fa.szFacename, "Courier New") == 0)
- m_nFamily = wxMODERN;
+ //
+ // Going to leave the point size alone. Mostly we use outline fonts
+ // that can be set to any point size inside of Presentation Parameters,
+ // regardless of whether or not the actual font is registered in the system.
+ // The GpiCreateLogFont will do enough by selecting the right family,
+ // and face name.
+ //
+ if (strcmp(m_vNativeFontInfo.fm.szFamilyname, "Times New Roman") == 0)
+ m_nFamily = wxFONTFAMILY_ROMAN;
+ else if (strcmp(m_vNativeFontInfo.fm.szFamilyname, "Times New Roman MT 30") == 0)
+ m_nFamily = wxFONTFAMILY_ROMAN;
+ else if (strcmp(m_vNativeFontInfo.fm.szFamilyname, "@Times New Roman MT 30") == 0)
+ m_nFamily = wxFONTFAMILY_ROMAN;
+ else if (strcmp(m_vNativeFontInfo.fm.szFamilyname, "Tms Rmn") == 0)
+ m_nFamily = wxFONTFAMILY_ROMAN;
+ else if (strcmp(m_vNativeFontInfo.fm.szFamilyname, "WarpSans") == 0)
+ m_nFamily = wxFONTFAMILY_DECORATIVE;
+ else if (strcmp(m_vNativeFontInfo.fm.szFamilyname, "Helvetica") == 0)
+ m_nFamily = wxFONTFAMILY_SWISS;
+ else if (strcmp(m_vNativeFontInfo.fm.szFamilyname, "Helv") == 0)
+ m_nFamily = wxFONTFAMILY_SWISS;
+ else if (strcmp(m_vNativeFontInfo.fm.szFamilyname, "Script") == 0)
+ m_nFamily = wxFONTFAMILY_SCRIPT;
+ else if (strcmp(m_vNativeFontInfo.fm.szFamilyname, "Courier New") == 0)
+ m_nFamily = wxFONTFAMILY_TELETYPE;
+ else if (strcmp(m_vNativeFontInfo.fm.szFamilyname, "Courier") == 0)
+ m_nFamily = wxFONTFAMILY_TELETYPE;
+ else if (strcmp(m_vNativeFontInfo.fm.szFamilyname, "System Monospaced") == 0)
+ m_nFamily = wxFONTFAMILY_TELETYPE;
+ else if (strcmp(m_vNativeFontInfo.fm.szFamilyname, "System VIO") == 0)
+ m_nFamily = wxFONTFAMILY_MODERN;
+ else if (strcmp(m_vNativeFontInfo.fm.szFamilyname, "System Proportional") == 0)
+ m_nFamily = wxFONTFAMILY_MODERN;
+ else if (strcmp(m_vNativeFontInfo.fm.szFamilyname, "Arial") == 0)
+ m_nFamily = wxFONTFAMILY_SWISS;
+ else if (strcmp(m_vNativeFontInfo.fm.szFamilyname, "Swiss") == 0)
+ m_nFamily = wxFONTFAMILY_SWISS;
else
- m_nFamily = wxSWISS;
+ m_nFamily = wxFONTFAMILY_SWISS;
if (m_vNativeFontInfo.fa.fsSelection & FATTR_SEL_ITALIC)
m_nStyle = wxFONTSTYLE_ITALIC;
m_nWeight = wxFONTWEIGHT_NORMAL;
}
m_bUnderlined = ((m_vNativeFontInfo.fa.fsSelection & FATTR_SEL_UNDERSCORE) != 0);
- m_sFaceName = m_vNativeFontInfo.fa.szFacename;
+ m_sFaceName = (wxChar*)m_vNativeFontInfo.fa.szFacename;
m_vEncoding = wxGetFontEncFromCharSet(m_vNativeFontInfo.fa.usCodePage);
- return TRUE;
+
+ //
+ // We don't actuall keep the font around if using a temporary PS
+ //
+ if (m_bInternalPS)
+ {
+ if(m_hFont)
+ ::GpiDeleteSetId( m_hPS
+ ,flId
+ );
+
+ ::WinReleasePS(m_hPS);
+ }
+ else
+ //
+ // Select the font into the Presentation space
+ //
+ ::GpiSetCharSet(m_hPS, flId); // sets font for presentation space
+ return true;
} // end of wxFontRefData::Alloc
void wxFontRefData::Free()
if ( m_hFont )
{
- if (!::GpiSetCharSet(m_hPS, LCID_DEFAULT))
- {
- wxLogLastError(wxT("DeleteObject(font)"));
- }
::GpiDeleteSetId(m_hPS, 1L); /* delete the logical font */
m_nFontId = 0;
m_hFont = 0;
wxString wxNativeFontInfo::GetFaceName() const
{
- return fm.szFacename;
+ return (wxChar*)fm.szFacename;
} // end of wxNativeFontInfo::GetFaceName
wxFontFamily wxNativeFontInfo::GetFamily() const
//
// Extract family from facename
//
- if (strcmp(fa.szFacename, "Times New Roman") == 0)
- nFamily = wxROMAN;
- else if (strcmp(fa.szFacename, "WarpSans") == 0)
- nFamily = wxSWISS;
- else if (strcmp(fa.szFacename, "Script") == 0)
- nFamily = wxSCRIPT;
- else if (strcmp(fa.szFacename, "Courier New") == 0)
- nFamily = wxMODERN;
+ if (strcmp(fm.szFamilyname, "Times New Roman") == 0)
+ nFamily = wxFONTFAMILY_ROMAN;
+ else if (strcmp(fm.szFamilyname, "Times New Roman MT 30") == 0)
+ nFamily = wxFONTFAMILY_ROMAN;
+ else if (strcmp(fm.szFamilyname, "@Times New Roman MT 30") == 0)
+ nFamily = wxFONTFAMILY_ROMAN;
+ else if (strcmp(fm.szFamilyname, "Tms Rmn") == 0)
+ nFamily = wxFONTFAMILY_ROMAN;
+ else if (strcmp(fm.szFamilyname, "WarpSans") == 0)
+ nFamily = wxFONTFAMILY_DECORATIVE;
+ else if (strcmp(fm.szFamilyname, "Helvetica") == 0)
+ nFamily = wxFONTFAMILY_SWISS;
+ else if (strcmp(fm.szFamilyname, "Helv") == 0)
+ nFamily = wxFONTFAMILY_SWISS;
+ else if (strcmp(fm.szFamilyname, "Script") == 0)
+ nFamily = wxFONTFAMILY_SCRIPT;
+ else if (strcmp(fm.szFamilyname, "Courier New") == 0)
+ nFamily = wxFONTFAMILY_TELETYPE;
+ else if (strcmp(fm.szFamilyname, "Courier") == 0)
+ nFamily = wxFONTFAMILY_TELETYPE;
+ else if (strcmp(fm.szFamilyname, "System Monospaced") == 0)
+ nFamily = wxFONTFAMILY_TELETYPE;
+ else if (strcmp(fm.szFamilyname, "System VIO") == 0)
+ nFamily = wxFONTFAMILY_MODERN;
+ else if (strcmp(fm.szFamilyname, "System Proportional") == 0)
+ nFamily = wxFONTFAMILY_MODERN;
+ else if (strcmp(fm.szFamilyname, "Arial") == 0)
+ nFamily = wxFONTFAMILY_SWISS;
+ else if (strcmp(fm.szFamilyname, "Swiss") == 0)
+ nFamily = wxFONTFAMILY_SWISS;
else
- nFamily = wxSWISS;
+ nFamily = wxFONTFAMILY_SWISS;
return (wxFontFamily)nFamily;
} // end of wxNativeFontInfo::GetFamily
switch (eStyle)
{
default:
- wxFAIL_MSG( _T("unknown font style") );
+ wxFAIL_MSG( wxT("unknown font style") );
// fall through
case wxFONTSTYLE_NORMAL:
switch (eWeight)
{
default:
- wxFAIL_MSG( _T("unknown font weight") );
+ wxFAIL_MSG( wxT("unknown font weight") );
// fall through
case wxFONTWEIGHT_NORMAL:
fa.fsSelection |= FATTR_SEL_UNDERSCORE;
} // end of wxNativeFontInfo::SetUnderlined
-void wxNativeFontInfo::SetFaceName(
- wxString sFacename
+bool wxNativeFontInfo::SetFaceName(
+ const wxString& sFacename
)
{
- wxStrncpy(fa.szFacename, sFacename, WXSIZEOF(fa.szFacename));
+ wxStrlcpy((wxChar*)fa.szFacename, sFacename, WXSIZEOF(fa.szFacename));
+ return true;
} // end of wxNativeFontInfo::SetFaceName
void wxNativeFontInfo::SetFamily(
switch (eFamily)
{
- case wxSCRIPT:
- sFacename = _T("Script");
+ case wxFONTFAMILY_SCRIPT:
+ sFacename = wxT("Tms Rmn");
+ break;
+
+ case wxFONTFAMILY_DECORATIVE:
+ sFacename = wxT("WarpSans");
break;
- case wxDECORATIVE:
- sFacename = _T("Times New Roman");
+ case wxFONTFAMILY_ROMAN:
+ sFacename = wxT("Tms Rmn");
break;
- case wxROMAN:
- sFacename = _T("Times New Roman");
+ case wxFONTFAMILY_TELETYPE:
+ sFacename = wxT("Courier") ;
break;
- case wxTELETYPE:
- case wxMODERN:
- sFacename = _T("Courier New");
+ case wxFONTFAMILY_MODERN:
+ sFacename = wxT("System VIO") ;
break;
- case wxSWISS:
- sFacename = _T("WarpSans");
+ case wxFONTFAMILY_SWISS:
+ sFacename = wxT("Helv") ;
break;
- case wxDEFAULT:
+ case wxFONTFAMILY_DEFAULT:
default:
- sFacename = _T("Helv");
+ sFacename = wxT("System VIO") ;
}
- if (!wxStrlen(fa.szFacename) )
+ if (!wxStrlen((wxChar*)fa.szFacename) )
{
SetFaceName(sFacename);
}
} // end of wxNativeFontInfo::SetFamily
-void wxNativeFontInfo::SetEncoding(
- wxFontEncoding eEncoding
-)
+void wxNativeFontInfo::SetEncoding( wxFontEncoding eEncoding )
{
wxNativeEncodingInfo vInfo;
,&vInfo
))
{
-#if wxUSE_FONTMAP
- if (wxTheFontMapper->GetAltForEncoding( eEncoding
+ if (wxFontMapper::Get()->GetAltForEncoding( eEncoding
,&vInfo
))
{
}
}
else
-#endif // wxUSE_FONTMAP
{
// unsupported encoding, replace with the default
vInfo.charset = 850;
}
}
- fa.usCodePage = vInfo.charset;
+ fa.usCodePage = (USHORT)vInfo.charset;
} // end of wxNativeFontInfo::SetFaceName
-bool wxNativeFontInfo::FromString(
- const wxString& rsStr
-)
+bool wxNativeFontInfo::FromString( const wxString& rsStr )
{
long lVal;
- wxStringTokenizer vTokenizer(rsStr, _T(";"));
+ wxStringTokenizer vTokenizer(rsStr, wxT(";"));
//
// First the version
//
wxString sToken = vTokenizer.GetNextToken();
- if (sToken != _T('0'))
- return FALSE;
+ if (sToken != wxT('0'))
+ return false;
sToken = vTokenizer.GetNextToken();
if (!sToken.ToLong(&lVal))
- return FALSE;
+ return false;
fm.lEmHeight = lVal;
sToken = vTokenizer.GetNextToken();
if (!sToken.ToLong(&lVal))
- return FALSE;
+ return false;
fa.lAveCharWidth = lVal;
sToken = vTokenizer.GetNextToken();
if (!sToken.ToLong(&lVal))
- return FALSE;
+ return false;
fa.fsSelection = (USHORT)lVal;
sToken = vTokenizer.GetNextToken();
if (!sToken.ToLong(&lVal))
- return FALSE;
+ return false;
fa.fsType = (USHORT)lVal;
sToken = vTokenizer.GetNextToken();
if (!sToken.ToLong(&lVal))
- return FALSE;
+ return false;
fa.fsFontUse = (USHORT)lVal;
sToken = vTokenizer.GetNextToken();
if (!sToken.ToLong(&lVal))
- return FALSE;
+ return false;
fa.idRegistry = (USHORT)lVal;
sToken = vTokenizer.GetNextToken();
if (!sToken.ToLong(&lVal))
- return FALSE;
+ return false;
fa.usCodePage = (USHORT)lVal;
sToken = vTokenizer.GetNextToken();
if (!sToken.ToLong(&lVal))
- return FALSE;
+ return false;
fa.lMatch = lVal;
sToken = vTokenizer.GetNextToken();
if (!sToken.ToLong(&lVal))
- return FALSE;
+ return false;
fn.usWeightClass = (USHORT)lVal;
sToken = vTokenizer.GetNextToken();
if(!sToken)
- return FALSE;
- wxStrcpy(fa.szFacename, sToken.c_str());
- return TRUE;
+ return false;
+ wxStrcpy((wxChar*)fa.szFacename, sToken.c_str());
+ return true;
} // end of wxNativeFontInfo::FromString
wxString wxNativeFontInfo::ToString() const
{
wxString sStr;
- sStr.Printf(_T("%d;%ld;%ld;%ld;%d;%d;%d;%d;%d;%ld;%d;%s"),
+ sStr.Printf(wxT("%d;%ld;%ld;%ld;%d;%d;%d;%d;%d;%ld;%d;%s"),
0, // version, in case we want to change the format later
fm.lEmHeight,
fa.lAveCharWidth,
fa.usCodePage,
fa.lMatch,
fn.usWeightClass,
- fa.szFacename);
+ (char *)fa.szFacename);
return sStr;
} // end of wxNativeFontInfo::ToString
// wxFont
// ----------------------------------------------------------------------------
-void wxFont::Init()
-{
-} // end of wxFont::Init
-
-bool wxFont::Create(
- const wxNativeFontInfo& rInfo
-, WXHFONT hFont
-)
+bool wxFont::Create( const wxNativeFontInfo& rInfo,
+ WXHFONT hFont )
{
UnRef();
m_refData = new wxFontRefData( rInfo
,hFont
);
RealizeResource();
- return TRUE;
+ return true;
} // end of wxFont::Create
wxFont::wxFont(
// Constructor for a font. Note that the real construction is done
// in wxDC::SetFont, when information is available about scaling etc.
// ----------------------------------------------------------------------------
-bool wxFont::Create(
- int nPointSize
-, int nFamily
-, int nStyle
-, int nWeight
-, bool bUnderlined
-, const wxString& rsFaceName
-, wxFontEncoding vEncoding
-)
+bool wxFont::Create( int nPointSize,
+ wxFontFamily nFamily,
+ wxFontStyle nStyle,
+ wxFontWeight nWeight,
+ bool bUnderlined,
+ const wxString& rsFaceName,
+ wxFontEncoding vEncoding )
{
UnRef();
,vEncoding
);
RealizeResource();
- return TRUE;
+ return true;
} // end of wxFont::Create
wxFont::~wxFont()
// ----------------------------------------------------------------------------
// real implementation
// Boris' Kovalenko comments:
-// Because OS/2 fonts are associated with PS we can not create the font
+// Because OS/2 fonts are associated with PS we cannot create the font
// here, but we may check that font definition is true
// ----------------------------------------------------------------------------
+wxGDIRefData *wxFont::CreateGDIRefData() const
+{
+ return new wxFontRefData();
+}
+
+wxGDIRefData *wxFont::CloneGDIRefData(const wxGDIRefData *data) const
+{
+ return new wxFontRefData(*static_cast<const wxFontRefData *>(data));
+}
+
bool wxFont::RealizeResource()
{
if ( GetResourceHandle() )
{
- return TRUE;
+ return true;
}
return M_FONTDATA->Alloc(this);
} // end of wxFont::RealizeResource
-bool wxFont::FreeResource(
- bool bForce
-)
+bool wxFont::FreeResource( bool WXUNUSED(bForce) )
{
if (GetResourceHandle())
{
M_FONTDATA->Free();
- return TRUE;
+ return true;
}
- return FALSE;
+ return false;
} // end of wxFont::FreeResource
-WXHANDLE wxFont::GetResourceHandle()
+WXHANDLE wxFont::GetResourceHandle() const
{
return GetHFONT();
} // end of wxFont::GetResourceHandle
return M_FONTDATA && (M_FONTDATA->GetHFONT() == 0);
} // end of wxFont::IsFree
-void wxFont::Unshare()
-{
- // Don't change shared data
- if ( !m_refData )
- {
- m_refData = new wxFontRefData();
- }
- else
- {
- wxFontRefData* ref = new wxFontRefData(*M_FONTDATA);
- UnRef();
- m_refData = ref;
- }
-} // end of wxFont::Unshare
-
// ----------------------------------------------------------------------------
// change font attribute: we recreate font when doing it
// ----------------------------------------------------------------------------
int nPointSize
)
{
- Unshare();
+ AllocExclusive();
M_FONTDATA->SetPointSize(nPointSize);
} // end of wxFont::SetPointSize
void wxFont::SetFamily(
- int nFamily
+ wxFontFamily nFamily
)
{
- Unshare();
+ AllocExclusive();
M_FONTDATA->SetFamily(nFamily);
} // end of wxFont::SetFamily
void wxFont::SetStyle(
- int nStyle
+ wxFontStyle nStyle
)
{
- Unshare();
+ AllocExclusive();
M_FONTDATA->SetStyle(nStyle);
} // end of wxFont::SetStyle
void wxFont::SetWeight(
- int nWeight
+ wxFontWeight nWeight
)
{
- Unshare();
+ AllocExclusive();
M_FONTDATA->SetWeight(nWeight);
RealizeResource();
} // end of wxFont::SetWeight
-void wxFont::SetFaceName(
+bool wxFont::SetFaceName(
const wxString& rsFaceName
)
{
- Unshare();
+ AllocExclusive();
- M_FONTDATA->SetFaceName(rsFaceName);
+ bool refdataok = M_FONTDATA->SetFaceName(rsFaceName);
RealizeResource();
+
+ return refdataok && wxFontBase::SetFaceName(rsFaceName);
} // end of wxFont::SetFaceName
void wxFont::SetUnderlined(
bool bUnderlined
)
{
- Unshare();
+ AllocExclusive();
M_FONTDATA->SetUnderlined(bUnderlined);
wxFontEncoding vEncoding
)
{
- Unshare();
+ AllocExclusive();
M_FONTDATA->SetEncoding(vEncoding);
RealizeResource();
} // end of wxFont::SetEncoding
-void wxFont::SetNativeFontInfo(
+void wxFont::DoSetNativeFontInfo(
const wxNativeFontInfo& rInfo
)
{
- Unshare();
+ AllocExclusive();
FreeResource();
int wxFont::GetPointSize() const
{
- wxCHECK_MSG( Ok(), 0, wxT("invalid font") );
+ wxCHECK_MSG( IsOk(), 0, wxT("invalid font") );
return M_FONTDATA->GetPointSize();
} // end of wxFont::GetPointSize
-int wxFont::GetFamily() const
+wxFontFamily wxFont::DoGetFamily() const
{
- wxCHECK_MSG( Ok(), 0, wxT("invalid font") );
-
return M_FONTDATA->GetFamily();
-} // end of wxFont::GetFamily
+} // end of wxFont::DoGetFamily
-int wxFont::GetStyle() const
+wxFontStyle wxFont::GetStyle() const
{
- wxCHECK_MSG( Ok(), 0, wxT("invalid font") );
+ wxCHECK_MSG( IsOk(), wxFONTSTYLE_MAX, wxT("invalid font") );
return M_FONTDATA->GetStyle();
} // end of wxFont::GetStyle
-int wxFont::GetWeight() const
+wxFontWeight wxFont::GetWeight() const
{
- wxCHECK_MSG( Ok(), 0, wxT("invalid font") );
+ wxCHECK_MSG( IsOk(), wxFONTWEIGHT_MAX, wxT("invalid font") );
return M_FONTDATA->GetWeight();
}
bool wxFont::GetUnderlined() const
{
- wxCHECK_MSG( Ok(), FALSE, wxT("invalid font") );
+ wxCHECK_MSG( IsOk(), false, wxT("invalid font") );
return M_FONTDATA->GetUnderlined();
} // end of wxFont::GetUnderlined
wxString wxFont::GetFaceName() const
{
- wxCHECK_MSG( Ok(), wxT(""), wxT("invalid font") );
+ wxCHECK_MSG( IsOk(), wxEmptyString, wxT("invalid font") );
return M_FONTDATA->GetFaceName();
} // end of wxFont::GetFaceName
wxFontEncoding wxFont::GetEncoding() const
{
- wxCHECK_MSG( Ok(), wxFONTENCODING_DEFAULT, wxT("invalid font") );
+ wxCHECK_MSG( IsOk(), wxFONTENCODING_DEFAULT, wxT("invalid font") );
return M_FONTDATA->GetEncoding();
} // end of wxFont::GetEncoding
-wxNativeFontInfo* wxFont::GetNativeFontInfo() const
+const wxNativeFontInfo* wxFont::GetNativeFontInfo() const
{
- if (M_FONTDATA->HasNativeFontInfo())
- return new wxNativeFontInfo(M_FONTDATA->GetNativeFontInfo());
- return 0;
+ return M_FONTDATA->HasNativeFontInfo() ? &(M_FONTDATA->GetNativeFontInfo())
+ : NULL;
} // end of wxFont::GetNativeFontInfo
//
// Internal use only method to set the FONTMETRICS array
//
-void wxFont::SetFM(
- PFONTMETRICS pFM
-, int nNumFonts
-)
+void wxFont::SetFM( PFONTMETRICS pFM, int nNumFonts )
{
M_FONTDATA->SetFM(pFM);
M_FONTDATA->SetNumFonts(nNumFonts);
} // end of wxFont::SetFM
-void wxFont::SetPS(
- HPS hPS
-)
+void wxFont::SetPS( HPS hPS )
{
- Unshare();
+ AllocExclusive();
M_FONTDATA->SetPS(hPS);
RealizeResource();
-} // end of wxFont::SetUnderlined
-
+} // end of wxFont::SetPS