X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f8855e47254a28f5141524b3aaaac03c2944e997..6c2cd2a2116c5eff1646e0acb7cad2c887300300:/src/os2/font.cpp diff --git a/src/os2/font.cpp b/src/os2/font.cpp index 6c7507082e..4a97f97c28 100644 --- a/src/os2/font.cpp +++ b/src/os2/font.cpp @@ -20,12 +20,13 @@ // headers // ---------------------------------------------------------------------------- +#include "wx/font.h" + #ifndef WX_PRECOMP #include #include "wx/list.h" #include "wx/utils.h" #include "wx/app.h" - #include "wx/font.h" #include "wx/log.h" #endif // WX_PRECOMP @@ -50,7 +51,7 @@ class WXDLLEXPORT wxFontRefData: public wxGDIRefData public: wxFontRefData() { - Init(-1, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, FALSE, + Init(-1, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, false, wxEmptyString, wxFONTENCODING_DEFAULT); } @@ -195,12 +196,13 @@ public: 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) @@ -295,6 +297,8 @@ protected: bool m_bInternalPS; // Internally generated PS? }; // end of CLASS wxFontRefData +#define M_FONTDATA ((wxFontRefData*)m_refData) + // ============================================================================ // implementation // ============================================================================ @@ -323,10 +327,10 @@ void wxFontRefData::Init( 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; @@ -359,7 +363,7 @@ void wxFontRefData::Init( m_hPS = (HPS)hPS; m_nFontId = 0; - m_bTemporary = FALSE; + m_bTemporary = false; m_pFM = (PFONTMETRICS)NULL; m_nNumFonts = 0; } // end of wxFontRefData::Init @@ -689,11 +693,12 @@ void wxNativeFontInfo::SetUnderlined( fa.fsSelection |= FATTR_SEL_UNDERSCORE; } // end of wxNativeFontInfo::SetUnderlined -void wxNativeFontInfo::SetFaceName( +bool wxNativeFontInfo::SetFaceName( const wxString& sFacename ) { wxStrncpy((wxChar*)fa.szFacename, sFacename, WXSIZEOF(fa.szFacename)); + return true; } // end of wxNativeFontInfo::SetFaceName void wxNativeFontInfo::SetFamily( @@ -782,56 +787,56 @@ bool wxNativeFontInfo::FromString( const wxString& rsStr ) wxString sToken = vTokenizer.GetNextToken(); if (sToken != _T('0')) - return FALSE; + 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; + return false; wxStrcpy((wxChar*)fa.szFacename, sToken.c_str()); return true; } // end of wxNativeFontInfo::FromString @@ -852,7 +857,7 @@ wxString wxNativeFontInfo::ToString() const fa.usCodePage, fa.lMatch, fn.usWeightClass, - fa.szFacename); + (char *)fa.szFacename); return sStr; } // end of wxNativeFontInfo::ToString @@ -926,6 +931,16 @@ wxFont::~wxFont() // 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(*wx_static_cast(const wxFontRefData *, data)); +} + bool wxFont::RealizeResource() { if ( GetResourceHandle() ) @@ -945,7 +960,7 @@ bool wxFont::FreeResource( bool WXUNUSED(bForce) ) return false; } // end of wxFont::FreeResource -WXHANDLE wxFont::GetResourceHandle() +WXHANDLE wxFont::GetResourceHandle() const { return GetHFONT(); } // end of wxFont::GetResourceHandle @@ -960,21 +975,6 @@ bool wxFont::IsFree() const 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 // ---------------------------------------------------------------------------- @@ -983,7 +983,7 @@ void wxFont::SetPointSize( int nPointSize ) { - Unshare(); + AllocExclusive(); M_FONTDATA->SetPointSize(nPointSize); @@ -994,7 +994,7 @@ void wxFont::SetFamily( int nFamily ) { - Unshare(); + AllocExclusive(); M_FONTDATA->SetFamily(nFamily); @@ -1005,7 +1005,7 @@ void wxFont::SetStyle( int nStyle ) { - Unshare(); + AllocExclusive(); M_FONTDATA->SetStyle(nStyle); @@ -1016,29 +1016,31 @@ void wxFont::SetWeight( int 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); @@ -1049,7 +1051,7 @@ void wxFont::SetEncoding( wxFontEncoding vEncoding ) { - Unshare(); + AllocExclusive(); M_FONTDATA->SetEncoding(vEncoding); @@ -1060,7 +1062,7 @@ void wxFont::DoSetNativeFontInfo( const wxNativeFontInfo& rInfo ) { - Unshare(); + AllocExclusive(); FreeResource(); @@ -1103,7 +1105,7 @@ int wxFont::GetWeight() const bool wxFont::GetUnderlined() const { - wxCHECK_MSG( Ok(), FALSE, wxT("invalid font") ); + wxCHECK_MSG( Ok(), false, wxT("invalid font") ); return M_FONTDATA->GetUnderlined(); } // end of wxFont::GetUnderlined @@ -1131,21 +1133,16 @@ const wxNativeFontInfo* wxFont::GetNativeFontInfo() const // // 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);