Init(size, family, style, weight, underlined, faceName, encoding);
}
- wxFontRefData(const wxNativeFontInfo& info)
+ wxFontRefData(const wxNativeFontInfo& info, WXHFONT hFont = 0)
{
- Init(info);
+ Init(info, hFont);
}
virtual ~wxFontRefData();
const wxString& faceName,
wxFontEncoding encoding);
- void Init(const wxNativeFontInfo& info);
+ void Init(const wxNativeFontInfo& info, WXHFONT hFont = 0);
// If TRUE, the pointer to the actual font is temporary and SHOULD NOT BE
// DELETED by destructor
m_nativeFontInfoOk = FALSE;
}
-void wxFontRefData::Init(const wxNativeFontInfo& info)
+void wxFontRefData::Init(const wxNativeFontInfo& info, WXHFONT hFont)
{
// extract family from pitch-and-family
int lfFamily = info.lf.lfPitchAndFamily;
m_fontId = 0;
m_temporary = FALSE;
- m_hFont = 0;
+ // hFont may be zero, or it be passed in case we really want to
+ // use the exact font created in the underlying system
+ // (for example where we can't guarantee conversion from HFONT
+ // to LOGFONT back to HFONT)
+ m_hFont = hFont;
m_nativeFontInfoOk = TRUE;
m_nativeFontInfo = info;
void wxFont::Init()
{
- if ( wxTheFontList )
- wxTheFontList->Append(this);
}
-bool wxFont::Create(const wxNativeFontInfo& info)
+bool wxFont::Create(const wxNativeFontInfo& info, WXHFONT hFont)
{
UnRef();
- m_refData = new wxFontRefData(info);
+ m_refData = new wxFontRefData(info, hFont);
RealizeResource();
wxFont::~wxFont()
{
- if ( wxTheFontList )
- wxTheFontList->DeleteObject(this);
}
// ----------------------------------------------------------------------------
return M_FONTDATA->m_encoding;
}
-// ----------------------------------------------------------------------------
-// wxNativeFontInfo
-// ----------------------------------------------------------------------------
-
-bool wxNativeFontInfo::FromString(const wxString& s)
+wxNativeFontInfo *wxFont::GetNativeFontInfo() const
{
- long l;
-
- wxStringTokenizer tokenizer(s, _T(";"));
-
- wxString token = tokenizer.GetNextToken();
- //
- // Ignore the version for now
- //
+ if( M_FONTDATA->m_nativeFontInfoOk )
+ return new wxNativeFontInfo(M_FONTDATA->m_nativeFontInfo);
- token = tokenizer.GetNextToken();
- if ( !token.ToLong(&l) )
- return FALSE;
- lf.lfHeight = l;
-
- token = tokenizer.GetNextToken();
- if ( !token.ToLong(&l) )
- return FALSE;
- lf.lfWidth = l;
-
- token = tokenizer.GetNextToken();
- if ( !token.ToLong(&l) )
- return FALSE;
- lf.lfEscapement = l;
-
- token = tokenizer.GetNextToken();
- if ( !token.ToLong(&l) )
- return FALSE;
- lf.lfOrientation = l;
-
- token = tokenizer.GetNextToken();
- if ( !token.ToLong(&l) )
- return FALSE;
- lf.lfWeight = l;
-
- token = tokenizer.GetNextToken();
- if ( !token.ToLong(&l) )
- return FALSE;
- lf.lfItalic = (BYTE)l;
-
- token = tokenizer.GetNextToken();
- if ( !token.ToLong(&l) )
- return FALSE;
- lf.lfUnderline = (BYTE)l;
-
- token = tokenizer.GetNextToken();
- if ( !token.ToLong(&l) )
- return FALSE;
- lf.lfStrikeOut = (BYTE)l;
-
- token = tokenizer.GetNextToken();
- if ( !token.ToLong(&l) )
- return FALSE;
- lf.lfCharSet = (BYTE)l;
-
- token = tokenizer.GetNextToken();
- if ( !token.ToLong(&l) )
- return FALSE;
- lf.lfOutPrecision = (BYTE)l;
-
- token = tokenizer.GetNextToken();
- if ( !token.ToLong(&l) )
- return FALSE;
- lf.lfClipPrecision = (BYTE)l;
-
- token = tokenizer.GetNextToken();
- if ( !token.ToLong(&l) )
- return FALSE;
- lf.lfQuality = (BYTE)l;
-
- token = tokenizer.GetNextToken();
- if ( !token.ToLong(&l) )
- return FALSE;
- lf.lfPitchAndFamily = (BYTE)l;
-
- token = tokenizer.GetNextToken();
- if(!token)
- return FALSE;
- wxStrcpy(lf.lfFaceName, token.c_str());
-
- return TRUE;
-}
-
-wxString wxNativeFontInfo::ToString() const
-{
- wxString s;
-
- s.Printf(_T("%d;%d;%d;%d;%d;%d;%d;%d;%d;%d;%d;%d;%d;%d;%s"),
- 0, // version, in case we want to change the format later
- lf.lfHeight,
- lf.lfWidth,
- lf.lfEscapement,
- lf.lfOrientation,
- lf.lfWeight,
- lf.lfItalic,
- lf.lfUnderline,
- lf.lfStrikeOut,
- lf.lfCharSet,
- lf.lfOutPrecision,
- lf.lfClipPrecision,
- lf.lfQuality,
- lf.lfPitchAndFamily,
- lf.lfFaceName);
-
- return s;
+ return 0;
}