#pragma hdrstop
#endif
+#include "wx/font.h"
+
#ifndef WX_PRECOMP
#include "wx/list.h"
#include "wx/utils.h"
#include "wx/app.h"
- #include "wx/font.h"
#include "wx/log.h"
#include "wx/encinfo.h"
#endif // WX_PRECOMP
if ( m_nativeFontInfoOk )
return m_nativeFontInfo.SetFaceName(faceName);
- m_faceName = faceName;
+ m_faceName = faceName;
return true;
}
bool m_nativeFontInfoOk;
};
+#define M_FONTDATA ((wxFontRefData*)m_refData)
+
// ============================================================================
// implementation
// ============================================================================
void wxNativeFontInfo::Init()
{
wxZeroMemory(lf);
+
+ // we get better font quality if we use this instead of DEFAULT_QUALITY
+ // apparently without any drawbacks
+#ifdef __WXWINCE__
+ lf.lfQuality = CLEARTYPE_QUALITY;
+#else
+ lf.lfQuality = PROOF_QUALITY;
+#endif
}
int wxNativeFontInfo::GetPointSize() const
BYTE ff_family;
wxArrayString facename;
- // the list of fonts associated with a family was partially
+ // the list of fonts associated with a family was partially
// taken from http://www.codestyle.org/css/font-family
switch ( family )
// is returned as default GUI font for compatibility
int verMaj;
ff_family = FF_SWISS;
- if(wxGetOsVersion(&verMaj) == wxWINDOWS_NT && verMaj >= 5)
+ if(wxGetOsVersion(&verMaj) == wxOS_WINDOWS_NT && verMaj >= 5)
facename.Add(_T("MS Shell Dlg 2"));
else
facename.Add(_T("MS Shell Dlg"));
// Quoting the MSDN:
- // "MS Shell Dlg is a mapping mechanism that enables
- // U.S. English Microsoft Windows NT, and Microsoft Windows 2000 to
- // support locales that have characters that are not contained in code
+ // "MS Shell Dlg is a mapping mechanism that enables
+ // U.S. English Microsoft Windows NT, and Microsoft Windows 2000 to
+ // support locales that have characters that are not contained in code
// page 1252. It is not a font but a face name for a nonexistent font."
}
}
// real implementation
// ----------------------------------------------------------------------------
+wxObjectRefData *wxFont::CreateRefData() const
+{
+ return new wxFontRefData();
+}
+
+wxObjectRefData *wxFont::CloneRefData(const wxObjectRefData *data) const
+{
+ return new wxFontRefData(*wx_static_cast(const wxFontRefData *, data));
+}
+
bool wxFont::RealizeResource()
{
if ( GetResourceHandle() )
return M_FONTDATA && (M_FONTDATA->GetHFONT() == 0);
}
-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;
- }
-}
-
// ----------------------------------------------------------------------------
// change font attribute: we recreate font when doing it
// ----------------------------------------------------------------------------
void wxFont::SetPointSize(int pointSize)
{
- Unshare();
+ AllocExclusive();
M_FONTDATA->SetPointSize(pointSize);
void wxFont::SetPixelSize(const wxSize& pixelSize)
{
- Unshare();
+ AllocExclusive();
M_FONTDATA->SetPixelSize(pixelSize);
void wxFont::SetFamily(int family)
{
- Unshare();
+ AllocExclusive();
M_FONTDATA->SetFamily(family);
void wxFont::SetStyle(int style)
{
- Unshare();
+ AllocExclusive();
M_FONTDATA->SetStyle(style);
void wxFont::SetWeight(int weight)
{
- Unshare();
+ AllocExclusive();
M_FONTDATA->SetWeight(weight);
bool wxFont::SetFaceName(const wxString& faceName)
{
- Unshare();
+ AllocExclusive();
bool refdataok = M_FONTDATA->SetFaceName(faceName);
void wxFont::SetUnderlined(bool underlined)
{
- Unshare();
+ AllocExclusive();
M_FONTDATA->SetUnderlined(underlined);
void wxFont::SetEncoding(wxFontEncoding encoding)
{
- Unshare();
+ AllocExclusive();
M_FONTDATA->SetEncoding(encoding);
void wxFont::DoSetNativeFontInfo(const wxNativeFontInfo& info)
{
- Unshare();
-
- FreeResource();
+ AllocExclusive();
*M_FONTDATA = wxFontRefData(info);
wxSize wxFont::GetPixelSize() const
{
+ wxCHECK_MSG( Ok(), wxDefaultSize, wxT("invalid font") );
+
return M_FONTDATA->GetPixelSize();
}
const wxNativeFontInfo *wxFont::GetNativeFontInfo() const
{
- return M_FONTDATA->HasNativeFontInfo() ? &(M_FONTDATA->GetNativeFontInfo())
+ return Ok() && M_FONTDATA->HasNativeFontInfo() ? &(M_FONTDATA->GetNativeFontInfo())
: NULL;
}
wxString wxFont::GetNativeFontInfoDesc() const
{
+ wxCHECK_MSG( Ok(), wxEmptyString, wxT("invalid font") );
+
// be sure we have an HFONT associated...
wxConstCast(this, wxFont)->RealizeResource();
return wxFontBase::GetNativeFontInfoDesc();
wxString wxFont::GetNativeFontInfoUserDesc() const
{
+ wxCHECK_MSG( Ok(), wxEmptyString, wxT("invalid font") );
+
// be sure we have an HFONT associated...
wxConstCast(this, wxFont)->RealizeResource();
return wxFontBase::GetNativeFontInfoUserDesc();
return wxFontBase::IsFixedWidth();
}
-